您当前的位置:五五电子网电子知识电子知识资料工艺技术利用软件编程实现DCS通讯 正文
利用软件编程实现DCS通讯

利用软件编程实现DCS通讯

点击数:7159 次   录入时间:03-04 12:02:40   整理:http://www.55dianzi.com   工艺技术

  此函数根据空气的压力及温度计算空气的焓。

  2intspt_air(floatp,floatt,float*s)

  此函数根据空气的压力及温度计算空气的熵。

  lINFORMIX编程。

  在某些需要对历史数据进行操作的场合,可以利用INFORMIX及E-SQL进行编程。

  2.通讯的实现

  在用软件编程实现通讯时所采用的具体的通讯硬件上,既可以通过串口实现RS-232通讯,也可以通过AUI网卡、BNC网卡、RJ-45网卡实现FTP通讯、TCP/IP通讯。

  当与I/A’s通讯的其它设备(如智能数据采集前端、GPS、自动同期装置等非通用设备)可以提供串口通讯,且通讯点数量不多时,采用专门的硬件实现通讯硬件不是一个非常经济的方案,此时可以采用RS-232实现通讯。

  用RS-232实现通讯时,首先应初始化通讯端口,然后可以按RS-232通讯规程(RXD,TXD,RTS,CTS,DSR,DTR,DCD信号),发送指令并接受数据。

  以下是初始化端口的一段例程:

  intinit_port(intk,int*fd,char*comport)

  {

  intsavef;

  if((*fd=open(comport,O_RDWR|O_NDELAY|O_NONBLOCK))《0)

  return(1);

  fflush(stdout);

  fflush(stdin);

  if(savef=fcntl(*fd,F_GETFL,0)《0)

  return(2);

  if(fcntl(*fd,F_SETFL,savef|O_NDELAY)《0)

  return(3);

  if(ioctl(*fd,TCGETS,&termio)《0)

  return(4);

  /*Settheportparameteras9600Baudrate,8databits,1siopbit,

  Enablereceiver,Evenparityenable*/

  termio.c_cflag=B9600|CS8|CREAD|PARENB|CLOCAL;

  termio.c_cflag&=~CSTOPB;

  termio.c_cflag&=~PARODD;

  termio.c_iflag=INPCK;

  termio.c_iflag&=~ISTRIP;

  termio.c_lflag=0;

  termio.c_oflag=0;

  termio.c_cc[VMIN]=1;

  termio.c_cc[VTIME]=0;

  if(ioctl(*fd,TCSETS,&termio)《0)

  return(5);

  sleep(1);

  return(0);

  }

  以下是读写端口的一段例程:

  intcomm(unsignedcharnum,intfd)

  {

  intI,rtn,tioc;

  unsignedcharT[200];

  unsignedcharbuff[200];

  ……ioctl(fd,TIOCMGET,&tioc);

  tioc=tioc|TIOCM_RTS;

  ioctl(fd,TIOCMSET,&tioc);

  ……write(fd,T,200);

  rtn=ioctl(fd,TCSBRK,1);

  strcpy(buf,”“,200);

  read(fd,buf,200);

  }

  如果与I/A’s进行通讯的是PC机或其它DCS,比较好的通讯办法是利用RJ-45等通讯口,按FTP协议或TCP/IP协议进行通讯。其中,FTP通讯的效率较低,且一直有读盘/写盘动作,对机器的影响较大,但此方法比较简单,容易实现,因此,在通讯不频繁的时候(建议大于一小时),也可以采用这个办法。在更多的时候,则建议使用TCP/IP协议进行通讯。

  利用TCP/IP进行通讯时,有两个协议可以选择:TCP及UDP,其中TCP(TransportControlProtocol,传输控制协议)是面向联接的,它提供高可靠性服务,尤其适用于传输大量报文信息。UDP(UserDatagramProtocol,用户数据报协议)是无联接的,它提供高效率的服务,适用于一次传输少量报文信息的场合。

  UDP通讯的程序的编写也比较容易,只需指定客户机的IP地址(或主机名)及传送端口号即可,下面是一段利用UDP初始化例程:

  #include

  #include

  #include

  #include

  #include

  #include

  intsock,length;

  structsockaddr_in,sockname;

  charbuff[1024];

  intInit_Socket()

  {

  char*clientName=“AW5101”;

  intportNum=10002;

  structhostent*hp,*gethostbyname();

  /*Creatsocketonwhichtosend.*/

  sock=socket(AF_INET,SOCK_DGRAM,0);

  if(sock==-1)

  {

  perror(“opendatagramsocketerr0r”);

  exit(1);

  }

  hp=gethostbyname(clientName);

  if(hp==(structhostent*)0)

  {

  printf(“unkownhost:%s\n”,clientName);

  exit(2);

  }

  memcpy((char*)&sockname.sin_addr,(char*)hp-》h_addr,hp-》h_length);

  sockname.sin_family=AF_INET;

  sockname.sin_port=htons(atoi(portNum);

  return(0);

  }……

上一页  [1] [2] 


本文关键字:软件编程  工艺技术电子知识资料 - 工艺技术