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 不仅能缩短开发周期、使系统运行稳定可靠,而且系统开放性好,可以方便地与其他系统的模拟器连接组成更大规模的模拟器进行训练,是模拟器研制的一种新思路。