新闻中心

EEPW首页 > 模拟技术 > 设计应用 > PAC应用于某动力系统训练模拟器中

PAC应用于某动力系统训练模拟器中

作者:时间:2009-07-20来源:网络收藏

  3.1 初始化子程序

  (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: //开始采集命令



评论


相关推荐

技术专区

关闭