用户中心

资讯 > DCS

DCS系统中实行通讯的几种方法探讨

作者:www.cechina.cn2013.04.13阅读 4332

  一 简介
  随着我国工业的自动化整体水平的提高,企业中的控制系统及控制设备的种类也越来越多;同时,随着市场经济的发展,各个企业也对DCS系统的要求也越来越高,除了要满足常规的控制以外,还要求DCS系统能将控制系统的各个运行参数实时传送到上位的MIS系统或SIS系统中去,进行数据后处理加工、共享、性能优化。所有的这些,都对DCS系统提出了通讯问题,包括和其它DCS或PLC的通讯、以及与上位机的通讯。
  在谏壁发电厂的四台300MW机组(7#、8#、9#、10#)的DCS改造中www.cechina.cn,全部采用的Foxboro公司的I/A’s系统,与I/A’s通讯的装置有893类智能数据采集前端、锅炉高过壁温分析系统、基于PC机的实时报表数据库系统、PI海量数据库(SIS系统),几乎涵盖了DCS系统与其他系统进行通讯的所有方式:使用专业通讯硬件实现通讯、使用专业通讯软件实现通讯、自行开发通讯程序(包括:串口通讯、TCP/IP通讯、FTP通讯、基于TCP/IP的MODBUS协议通讯)。
  下面,将对以上几种通讯方式的实现做一个简单介绍并比较,给出在选择通讯方式时的几点建议。
  二 利用硬件实现通讯
  对于市场上广泛使用的A-B公司PLC产品,Foxboro公司专门开发专用的通讯硬件--集成在I/A’s中的AB-STATION,通过AB-STATION,在I/A’s中可以直接对A-B的PLC进行管理、组态、通讯及数据采集监视,使整个系统既具有PLC快速的优点,又具有DCS系统友好的人机界面,强大的数据库管理的优势。
  对于工业界广泛采用的MODBUS协议(含ASCII协议及RTU协议),Foxboro公司开发了多种符合MODBUS协议的硬件,主要有:MODBUSGATEWAY,MODBUSGATEWAYPLUS,适用于RS-232通讯及RS-485通讯,并可以选择做为仆方或主方。采用专门的通讯硬件,可以与一切提供MODBUS协议通讯接口的设备进行通讯,包括其它公司的DCS系统、PLC产品等。在上海Foxboro公司所实施的大部分需要进行通讯的项目中均采用这种方式。
  除以上两种专门通讯硬件外,Foxboro公司还有一个可以自定义协议的通讯硬件—FOREIGNDEVICEINTIGRATOR30(设备集成器30)。使用此通讯硬件,需要通讯的双方只要定义好通讯数据包格式(包括数据包报头信息、数据格式、数据包报尾信息)和通讯参数(包括起始位、停止位、数据位、波特率)即可实现通讯。在镇江电厂项目中,上海Foxboro公司就采用这个方法实现了与GEPLC及无锡阳山智能数据采集前端的通讯,大大减少了用户的投资。
  此外,对于市场上使用较多的PLC和DCS产品,Foxboro公司提供专门的通讯软件进行通讯。
  以上所有的通讯方式所采用的硬件是一样的:通讯处理机30(COMMUNICATIONPROCESSOR30),不同之处在于所选用的通讯软件不一样。
  对于MODBUS协议,采用的波特率通常为9600bps,因此每秒所能通讯的数据包是有限制的。
  对于MODBUS协议,如果MODBUS设备不同,每个通讯包所能通讯的量是不一样的www.cechina.cn,通常使用的548设备可以通讯到256个字节,亦即128个模拟量或2048个数字量。
  标准的MODBUS通讯帧格式为:“〈仆方地址〉〈功能码〉〈起始地址〉〈数据传送量〉〈校验码〉”。对于不同的设备具有不同的MODBUS地址;同一设备,不同数据类型(外部寄存器、内部寄存器、外部保持线圈、内部保持线圈等)具有不同的功能码;同一数据类型,读/写操作不同时,也具有不同的功能码。
  因此,在考虑MODBUS协议通讯时,不能只看有多少个模拟量/数字量,而必须同时考虑:有多少个设备,每个设备的通讯模拟量/数字量数据有多少,数据是否双向传送,通讯速率为多少。综合考虑以上因数后,计算出需要多少个通讯处理器。
  需要强调的是:Foxboro公司的硬件通讯产品COMM30与许多公司的硬件通讯方式通过采用插在工程师站/操作员站主板上的串口通讯卡实现不同,Foxboro公司的COMM30具有专用的CPU芯片,独立于工程师站及操作员站运行,是控制网络中一个独立的处理站,即使在工程师站/操作员站死机时仍能保证通讯的正常运行,这在参与控制的通讯(如与定排程控、吹灰程控等)中显的尤为重要。
  三 用专业通讯软件实现通讯
  专业的通讯软件主要分为两类:一类实现数据的实时采集与传送,另一类实现流程画面的实时传送。
  3.1数据的实时采集及传送
  用Foxboro公司开发的通讯软件或利用第三方开发的针对I/A’s的通讯软件实现通讯是一种非常方便的办法,它可以大大缩短项目周期。
  Foxboro公司的专业通讯软件从早期的DataforWindow、PIMS中的DataLink到现在使用的AIM*AT软件秉承始终如一的思想www.cechina.cn,利用AISAPI(FOXAPI的早期版本),FOXAPI的内部函数调用实现数据的实时读写;利用TCP/IP实现数据在I/A’s与PC机之间的双向传送;利用DDE技术将I/A’s的数据在支持DDE技术的程序(如:Excel、Lotus1-2-3、Delphi等)中显示,同时提供VB调用函数,便于用户的二次开发。该软件的最快传送速率为0.1秒。在目前的项目中,比较多的采用了这种办法。
  对于目前较流行的OPC通讯协议,Foxboro公司提供专门的OPC通讯软件,同时也可以选用第三方,如:MATRICON公司的OPC通讯软件。
  第三方通讯软件主要是美国OSI公司的PI实时数据库。OSI公司的PI系统基于C/S结构,能将100多家的DCS系统或PLC中的实时数据传送到WindowNT服务器中,利用其专利的“螺旋门压缩”技术,将数据进行压缩加工,使其保存周期可长达数年以上(取决于硬盘容量)。同时,利用其强大的系统工具实现二次开发,包括流程画面显示、趋势显示、优化处理、性能计算等。PI实时数据库在Foxboro的I/A’s中的应用在国外已经有了上百个成功使用的业绩。谏壁发电厂利用PI系统将其#7、#8、#9、#10四台300MW机组多达20,000点的数据实现了实时传送、长达2年的数据存储,并利用其强大的二次开发工具,为全厂MIS(或SIS)系统的应用开发服务。
  专业的通讯软件,如:PI,除了具有高率、高速、数据保存时间长、安全可靠、功能强大、界面友好、使用方便等优点外,通常在数据传送时还具有以下特性:
  l采用“例外报告”方式:设定数据需要传送的变化范围,对未超过变化范围的数据不传送,这一机制大大降低了通讯负载。
  l具有“数据缓存”机制:在网络通讯中断时,将需要传送的数据缓存在工作站的硬盘上,待网络通讯恢复时,在网络通讯的空闲时再将数据传送到数据库中。这一机制保证了数据不丢失。
  3.2流程画面的实时传送
  将流程画面实时传送到PC机上,可以使企业领导和运行管理人员、热工仪表维护人员可以及时掌握现场的生产运行情况,便于整个企业的资源共享、状态监视及物流管理。
  关于流程画面的实时传送,目前使用较多的是使用HumingBird公司的Exceed软件。利用Exceed软件的Telnet功能和I/A’s的附加显示管理器(AdditionalDisplayManager),将I/A’s中的流程画面实时传送至PC机中,并可以定义在PC机中的操作权限是否可以操作。
  除Exceed软件外,还可以使用GraphOn公司的GO_Global软件,该软件可以直接利用网络传输,也可以用拨号方式,将I/A’s中的流程画面实时传送至PC机中。
  在使用Exceed及GO_Global软件时,利用Modem拨号,就可以实现“远程诊断”(FOXWATCH),即:将I/A’s使用情况等信息,及时传送回Foxboro公司,Foxboro公司的工程技术人员在公司内就可以对用户的各种要求进行及时响应,对其系统进行诊断,并对用户提出使用建议。在谏壁发电厂的I/A’s系统中,就安装有FOXWATCH软件,使用效果非常好,厂级领导、热工维护人员等在办公室内即可了解机组生产运行情况;在出现故障时,可以迅速将DCS系统使用情况传送给Foxboro公司的工程技术人员,在最短的时间内得到技术支持,最大程度地降低损失。
  无论是采用专门的硬件实现通讯,还是使用专业的通讯软件实现通讯,实现方法都比较简单,下面将重点介绍在Foxboro公司I/A’s产品中用软件编程方法实现通讯的几种方法。
  四 利用软件编程实现通讯
  利用软件编程方式,可以更加灵活实现各种非常规的通讯。
  由于自行编写的程序在工程师站/操作员站运行,需要占用一定的CUP时间及内存,因此在通讯数据量较大,同时要求通讯速度较快时,由于没有专业通讯软件的“例外报告”机制,建议不要采用自行开发程序的办法。
  由于自行编写的程序通常没有“数据缓存”机制,在传送非常重要的数据时应该谨慎使用。
  自行编程主要工作为了两方面,一为I/A数据的读写及处理,一为通讯的实现。
  通常自行开发通讯软件包括:串口通讯(如智能前端)、TCP/IP通讯(如实时数据传送)、FTP通讯(如定期传送报表文本)、基于TCP/IP的MODBUS协议通讯。
  以上几种通讯方式在通讯的实现方式上不同,但在I/A’s内数据的读写操作是一样的,接下来将阐述软件编程时的主要函数及方式:
  4.1I/A’s数据的读写及处理
  Foxboro公司I/A’s系统提供强大的内部编程函数(C函数、FORTRAN),主要包括有:
  lOMCALL函数–实现I/A’s系统内部数据的读写操作。
  主要函数有:
  2intgetval(char*name,intobj_type,intimport,char*value,unsignedint*status,intdata_len)
  此函数实现单个数据的读操作。
  2intom_getval(char*name,intobj_type,intimport,charvalue,unsignedint*status,intdata_len,PSAP_ADDR*psap_ptr)
  此函数实现单个数据的读操作,它使用PSAP指针。
  2intsetval(char*name,intobj_type,intimport,char*value,unsigned*status,intdata_len)
  此函数实现单个数据的写操作。
  2intom_setval(char*name,intobj_type,intimport,char*value,unsigned*status,intdata_len,PASP_ADDR*psap_ptr);
  此函数实现单个数据的写操作,它使用PSAP指针。
  2intomopen(structom_header_node*om_descriptor,intopen_id)
  此函数实现打开一个LISTwww.cechina.cn,为数据的读写操作做准备。
  2intomread(intomopen_id,intsize_list,structvalue*var_list)
  此函数实现从打开的LIST中读取数据。
  2intomwrite(intomopen_id,intsize_list,structvalue*var_list);
  此函数实现向打开的LIST中写数据。
  2intomclose(intopen_id,structom_header_node*header,structopen_var*var_list,structnet_addr*addr_tbl)
  此函数实现关闭一个已经打开的LIST。
  2头部文件、OM结构及例程
  #include
  #include
  #include
  #include
  #include
  main()
  {
  structopen_varin_var_list[8];
  structheader_nodein_om_desc;
  structnet_adrin_net_adr_tbl[2];
  intin_open_id;
  intrtn;
  floatdelta_temp,delta_fc,delta_df;
  structvalue*in_data_list,*temp;
  inti;
  delta_temp=5.0;
  delta_fc=1.0;
  delta_df=0.5;
  in_om_desc.task_status=OM_R_ACCESS;
  in_om_desc.net_adr_tbl_ptr=in_net_adr_tbl;
  in_om_desc.size_net_adr_tbl=2;
  in_om_desc.open_list_ptr=in_var_list;
  in_om_desc.size_open_list=8;
  2特点
  使用getval、setval、om_getval、om_setval函数进行编程比较简单,但效率较差;用omopen、omread、omwrite、omclose编程需要复杂的声明,编程比较复杂,但程序通用性好(不要FOXAPI的支持)、效率高。
  lFOXAPI函数–实现I/A’s系统内部数据的读写操作及强大的C/S结构编程。
  主要函数有:
  2intsbopen(int*gw_arrayCONTROL ENGINEERING China版权所有,intnument,char*name_array,int*valtyp_array,intacctyp,float*delta_array,intclexit,intrsr,intwsr,float*wdelta_array,int*dset,int*index_array,int*error_array,int*reterr)
  此函数实现以连续更新的方式打开一个读写SET。
  2intbread(intdset,long*value_array,int*status_array,int*reterr)
  此函数实现从一个已经打开SET中读取数据。
  2intbwrite(intdset,long*value_array,int*error_array,int*reterr)
  此函数实现向一个已经打开SET中写数据。
  2intclsset(intdset,int*reterr)
  此函数实现关闭一个已经打开SET,释放程序所使用的内存空间,释放对CP中数据的控制权。
  2头部函数,FOXAPI结构定义及例程
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #defineOBJNUM100
  #defineSETNUM20
  typedefunion
  {
  longlval;
  shortival;
  floatfval;
  charbval;
  }IAXVAL;
  /*PredefinedParameterofI/Avalue*/
  staticintgw[SETNUM][OBJNUM];/*GatewayArray*/
  charname[SETNUM][OBJNUM][32];/*ObjectNameArray*/
  chardesc[SETNUM][OBJNUM][15];/*ObjectdescriptionArray*/
  staticintvaltype[SETNUM][OBJNUM];/*ObjectValueTypeArray*/
  staticintacctype=1;/*Read-onlyArray*/
  staticfloatrdelta[SETNUM][OBJNUM];/*ObjectsReadDeltaArray*/
  staticfloatwdelta[SETNUM][OBJNUM];/*ObjectsWriteDeltaArray*/
  interror[SETNUM][OBJNUM];/*ObjectsErrorArray*/
  intindex[SETNUM][OBJNUM];/*ObjectsIndexesArray*/
  intstatus[SETNUM][OBJNUM];/*ObjectsStatusArray*/
  IAXVALvalue[SETNUM][OBJNUM];/*ObjectsValueArray*/
  staticintrsr=4;/*ReadScanRate*/
  staticintwsr=4;/*WriteScanRate*/
  staticintclexit=1;/*IgnoredinUNIX*/
  intreterr[SETNUM];/*OpenSetreturnErrorCode*/
  /*PredefineParameterofutility*/
  intset[SETNUM];/*OpenSetNumber*/
  intTotal_SET;/*TotalSetNumber*/
  intLast_SET_Num;/*LastSetValueNuber*/
  intTotal_Num;/*TotalNumberofobjects*/
  intTotal_File;/*TotaloutputfilesNumber*/
  intINTERVAL;/*Communicateinterval*/
  intCol_Num;/*Valuenumberperline*/
  main()
  {
  ……scopen(gw[i],k,name[i],valtype[i],acctype,rdelta[i],clexit,rsr,\
  wsr,wdelta[i],&set[i],index[i],error[i],&reterr[i]);
  printf(“ReturnErrorCode=%-d\n”,reterr[i]);
  printf(“ReturnDataSet=%-d\n”,set[i]);
  ……rtn=bread(set[i],value[i],status[i],&reterr[i]);
  if(reterr[i]!=0)
  {
  printf(“BufferedReadObjectsError%d,%d,%d\n”,rtn,\
  reterr[i],set[i]);
  }
  ……for(i=0;i
  {
  clsset(set[i],&reterr[i]);
  }
  ……
 
版权声明:版权归控制工程网所有,转载请注明出处!

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688