PAC应用于某动力系统训练模拟器中
1)启动看门狗。系统由于某种原因陷入死循环后能自动退出,使系统恢复正常。
(2)初始化5024、5017。该两种模拟量模块在使用之前需要通过软件进行设置。其中5024 设置为4~20mA 电流输出,5017 设置为0~10V 输入。
(3)启动网络心跳包检测定时器。网络心跳包用于确认网络连接是否正常。
3.2 网络连接子程序
控制器首先建立 socket,然后与服务器连接。网络连接子程序的主要部分为:
void ConnectServer()
{ //首先进行相关变量定义
if((SO_5510=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==
INVALID_SOCKET) //建立socket 并设置为TCP 方式
{//未能建立socket 的处理}
pulArgp = 1;
if(ioctlsocket(SO_5510, FIONBIO, pulArgp)) //将socket 设置为非阻塞模式
{//未能设置socket 的处理}
he=gethostbyname(172.18.55.1); //server address
Server_addr.sin_family = AF_INET; //TCP/IP
Server_addr.sin_port = htons(Server_Port);
Server_addr.sin_addr =*((struct in_addr *)he->h_addr);
memset((Server_addr.sin_zero), 0, 8);
ConnectReturnFlag = connect(SO_5510, (struct sockaddr *)Server_addr,sizeof(struct
sockaddr));//建立连接
if( ConnectReturnFlag == 0)
{//建立连接成功的相应处理}
else
{//建立连接失败的相应处理}
}
3.3 接收数并处理子程序
5510 接收到数据包后首先分析数据包内的命令字。本系统中设计的命令字有开始采集、停止采集、检查连接、有效数据等。如果是前三种命令则立即执行,如果是“有效数据”命令则打开数据包后面的内容(可能包含多个子包),子包内包含开关量、模拟量等若干子命令,程序根据不同子命令执行相应子程序。程序主体示意如下。
void ReceiveAndProcess()
{ if ((numbytes = recv(SO_5510, (char *)RECVITEMS, sizeof(RECVITEMS), 0))==
SOCKET_ERROR)
{//没有接收到数据的处理}
if(numbytes>0)//收到数据后的处理
{ switch(RECVITEMS.Command) //判断命令字
{ case Scollectstart: //开始采集命令
SendCommand(CReplyCollectStart);//表示收到开始采集命令
break;
case Ssendgroupdata: //有效数据指令
{ for(CircleNum=0;CircleNum
{ switch (RECVITEMS.Items[CircleNum].Command) //判断子命令
{ case SsendoneDOdata: //server 发送的开关量单字节指令
WriteOneDOChannel(RECVITEMS.Items[CircleNum]);
break;
case SsendoneAOdata: //server 发送的模拟量单字节指令
WriteOneAOChannel(RECVITEMS.Items[CircleNum]);
break;
default: break;
} } }
default: break;
} } }
3.3 数据采集发送子程序
为了降低网络传输的数据量,PAC 控制器只向服务器发送状态发生变化的数据,而状态没有发生变化的数据则不发送。同样,服务器通信程序SimuTrans 只向PAC 控制器发送模型计算后发生变化的数据。
为了保证数据不会丢失,针对不同种类的数据采用了不同的发送、回送方式。在该模拟器中,输入的模拟量为艇员操作面板上的旋钮时带动内部的电位器产生0~10V 的模拟电压信号,由于其操作是连续过程,操作过程会产生一系列变化数据,因此5017H 采集到的变化数据直接发送到服务器即可。对于操作按钮、多位开关等部件产生的开关量数据,为了避免数据丢失采用了重复发送,并且服务器收到数据后要做应答,确保了数据传输的可靠性。
4 结论
该模拟器2007 年9 月通过了验收、鉴定。在动力系统管理人员及在校学员的学习与训练过程中发挥了重要作用,获得了良好的军事和经济效益。该半实物仿真训练模拟器的成功研制实践说明,将新型PAC 控制器应用于模拟器代替传统的工控机或PLC 不仅能缩短开发周期、使系统运行稳定可靠,而且系统开放性好,可以方便地与其他系统的模拟器连接组成更大规模的模拟器进行训练,是模拟器研制的一种新思路。
- PAC模块式开关电源的原理与维修(07-04)
- 赛普拉斯设计首款背面照明、数字输出的CMOS 图像感应器(05-26)
- ispPAC及其滤波器设计(07-01)
- 多学科间数据交互在SIMPACK中的实现(06-13)
- 基于ispPAC技术的滤波器设计(07-13)
- 利用CompactRIO和LabVIEW控制心脏模拟器(08-06)