一.簡(jiǎn)介
隨著我國(guó)工業(yè)的自動(dòng)化整體水平的提高,企業(yè)中的控制系統(tǒng)及控制設(shè)備的種類(lèi)也越來(lái)越多;同時(shí),隨著市場(chǎng)經(jīng)濟(jì)的發(fā)展,各個(gè)企業(yè)也對(duì)DCS系統(tǒng)的要求也越來(lái)越高,除了要滿足常規(guī)的控制以外,還要求DCS系統(tǒng)能將控制系統(tǒng)的各個(gè)運(yùn)行參數(shù)實(shí)時(shí)傳送到上位的MIS系統(tǒng)或SIS系統(tǒng)中去,進(jìn)行數(shù)據(jù)后處理加工、共享、性能優(yōu)化。所有的這些,都對(duì)DCS系統(tǒng)提出了通訊問(wèn)題,包括和其它DCS或PLC的通訊、以及與上位機(jī)的通訊。
在諫壁發(fā)電廠的四臺(tái)300MW機(jī)組(7#、8#、9#、10#)的DCS改造中,全部采用的Foxboro公司的I/A’s系統(tǒng),與I/A’s通訊的裝置有893類(lèi)智能數(shù)據(jù)采集前端、鍋爐高過(guò)壁溫分析系統(tǒng)、基于PC機(jī)的實(shí)時(shí)報(bào)表數(shù)據(jù)庫(kù)系統(tǒng)、PI海量數(shù)據(jù)庫(kù)(SIS系統(tǒng)),幾乎涵蓋了DCS系統(tǒng)與其他系統(tǒng)進(jìn)行通訊的所有方式:使用專(zhuān)業(yè)通訊硬件實(shí)現(xiàn)通訊、使用專(zhuān)業(yè)通訊軟件實(shí)現(xiàn)通訊、自行開(kāi)發(fā)通訊程序(包括:串口通訊、TCP/IP通訊、FTP通訊、基于TCP/IP的MODBUS協(xié)議通訊)。
下面,將對(duì)以上幾種通訊方式的實(shí)現(xiàn)做一個(gè)簡(jiǎn)單介紹并比較,給出在選擇通訊方式時(shí)的幾點(diǎn)建議。
二.利用硬件實(shí)現(xiàn)通訊
對(duì)于市場(chǎng)上廣泛使用的A-B公司PLC產(chǎn)品,F(xiàn)oxboro公司專(zhuān)門(mén)開(kāi)發(fā)專(zhuān)用的通訊硬件--集成在I/A’s中的AB-STATION,通過(guò)AB-STATION,在I/A’s中可以直接對(duì)A-B的PLC進(jìn)行管理、組態(tài)、通訊及數(shù)據(jù)采集監(jiān)視,使整個(gè)系統(tǒng)既具有PLC快速的優(yōu)點(diǎn),又具有DCS系統(tǒng)友好的人機(jī)界面,強(qiáng)大的數(shù)據(jù)庫(kù)管理的優(yōu)勢(shì)。
對(duì)于工業(yè)界廣泛采用的MODBUS協(xié)議(含ASCII協(xié)議及RTU協(xié)議),F(xiàn)oxboro公司開(kāi)發(fā)了多種符合MODBUS協(xié)議的硬件,主要有:MODBUSGATEWAY,MODBUSGATEWAYPLUS,適用于RS-232通訊及RS-485通訊,并可以選擇做為仆方或主方。采用專(zhuān)門(mén)的通訊硬件,可以與一切提供MODBUS協(xié)議通訊接口的設(shè)備進(jìn)行通訊,包括其它公司的DCS系統(tǒng)、PLC產(chǎn)品等。在上海Foxboro公司所實(shí)施的大部分需要進(jìn)行通訊的項(xiàng)目中均采用這種方式。
除以上兩種專(zhuān)門(mén)通訊硬件外,F(xiàn)oxboro公司還有一個(gè)可以自定義協(xié)議的通訊硬件—FOREIGNDEVICEINTIGRATOR30(設(shè)備集成器30)。使用此通訊硬件,需要通訊的雙方只要定義好通訊數(shù)據(jù)包格式(包括數(shù)據(jù)包報(bào)頭信息、數(shù)據(jù)格式、數(shù)據(jù)包報(bào)尾信息)和通訊參數(shù)(包括起始位、停止位、數(shù)據(jù)位、波特率)即可實(shí)現(xiàn)通訊。在鎮(zhèn)江電廠項(xiàng)目中,上海Foxboro公司就采用這個(gè)方法實(shí)現(xiàn)了與GEPLC及無(wú)錫陽(yáng)山智能數(shù)據(jù)采集前端的通訊,大大減少了用戶的投資。
此外,對(duì)于市場(chǎng)上使用較多的PLC和DCS產(chǎn)品,F(xiàn)oxboro公司提供專(zhuān)門(mén)的通訊軟件進(jìn)行通訊。
以上所有的通訊方式所采用的硬件是一樣的:通訊處理機(jī)30(COMMUNICATIONPROCESSOR30),不同之處在于所選用的通訊軟件不一樣。
對(duì)于MODBUS協(xié)議,采用的波特率通常為9600bps,因此每秒所能通訊的數(shù)據(jù)包是有限制的。
對(duì)于MODBUS協(xié)議,如果MODBUS設(shè)備不同,每個(gè)通訊包所能通訊的量是不一樣的,通常使用的548設(shè)備可以通訊到256個(gè)字節(jié),亦即128個(gè)模擬量或2048個(gè)數(shù)字量。
標(biāo)準(zhǔn)的MODBUS通訊幀格式為:“〈仆方地址〉〈功能碼〉〈起始地址〉〈數(shù)據(jù)傳送量〉〈校驗(yàn)碼〉”。對(duì)于不同的設(shè)備具有不同的MODBUS地址;同一設(shè)備,不同數(shù)據(jù)類(lèi)型(外部寄存器、內(nèi)部寄存器、外部保持線圈、內(nèi)部保持線圈等)具有不同的功能碼;同一數(shù)據(jù)類(lèi)型,讀/寫(xiě)操作不同時(shí),也具有不同的功能碼。
因此,在考慮MODBUS協(xié)議通訊時(shí),不能只看有多少個(gè)模擬量/數(shù)字量,而必須同時(shí)考慮:有多少個(gè)設(shè)備,每個(gè)設(shè)備的通訊模擬量/數(shù)字量數(shù)據(jù)有多少,數(shù)據(jù)是否雙向傳送,通訊速率為多少。綜合考慮以上因數(shù)后,計(jì)算出需要多少個(gè)通訊處理器。
需要強(qiáng)調(diào)的是:Foxboro公司的硬件通訊產(chǎn)品COMM30與許多公司的硬件通訊方式通過(guò)采用插在工程師站/操作員站主板上的串口通訊卡實(shí)現(xiàn)不同,F(xiàn)oxboro公司的COMM30具有專(zhuān)用的CPU芯片,獨(dú)立于工程師站及操作員站運(yùn)行,是控制網(wǎng)絡(luò)中一個(gè)獨(dú)立的處理站,即使在工程師站/操作員站死機(jī)時(shí)仍能保證通訊的正常運(yùn)行,這在參與控制的通訊(如與定排程控、吹灰程控等)中顯的尤為重要。
三.用專(zhuān)業(yè)通訊軟件實(shí)現(xiàn)通訊
專(zhuān)業(yè)的通訊軟件主要分為兩類(lèi):一類(lèi)實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)采集與傳送,另一類(lèi)實(shí)現(xiàn)流程畫(huà)面的實(shí)時(shí)傳送。
3.1數(shù)據(jù)的實(shí)時(shí)采集及傳送
用Foxboro公司開(kāi)發(fā)的通訊軟件或利用第三方開(kāi)發(fā)的針對(duì)I/A’s的通訊軟件實(shí)現(xiàn)通訊是一種非常方便的辦法,它可以大大縮短項(xiàng)目周期。
Foxboro公司的專(zhuān)業(yè)通訊軟件從早期的DataforWindow、PIMS中的DataLink到現(xiàn)在使用的AIM*AT軟件秉承始終如一的思想,利用AISAPI(FOXAPI的早期版本),F(xiàn)OXAPI的內(nèi)部函數(shù)調(diào)用實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)讀寫(xiě);利用TCP/IP實(shí)現(xiàn)數(shù)據(jù)在I/A’s與PC機(jī)之間的雙向傳送;利用DDE技術(shù)將I/A’s的數(shù)據(jù)在支持DDE技術(shù)的程序(如:Excel、Lotus1-2-3、Delphi等)中顯示,同時(shí)提供VB調(diào)用函數(shù),便于用戶的二次開(kāi)發(fā)。該軟件的最快傳送速率為0.1秒。在目前的項(xiàng)目中,比較多的采用了這種辦法。
對(duì)于目前較流行的OPC通訊協(xié)議,F(xiàn)oxboro公司提供專(zhuān)門(mén)的OPC通訊軟件,同時(shí)也可以選用第三方,如:MATRICON公司的OPC通訊軟件。
第三方通訊軟件主要是美國(guó)OSI公司的PI實(shí)時(shí)數(shù)據(jù)庫(kù)。OSI公司的PI系統(tǒng)基于C/S結(jié)構(gòu),能將100多家的DCS系統(tǒng)或PLC中的實(shí)時(shí)數(shù)據(jù)傳送到WindowNT服務(wù)器中,利用其專(zhuān)利的“螺旋門(mén)壓縮”技術(shù),將數(shù)據(jù)進(jìn)行壓縮加工,使其保存周期可長(zhǎng)達(dá)數(shù)年以上(取決于硬盤(pán)容量)。同時(shí),利用其強(qiáng)大的系統(tǒng)工具實(shí)現(xiàn)二次開(kāi)發(fā),包括流程畫(huà)面顯示、趨勢(shì)顯示、優(yōu)化處理、性能計(jì)算等。PI實(shí)時(shí)數(shù)據(jù)庫(kù)在Foxboro的I/A’s中的應(yīng)用在國(guó)外已經(jīng)有了上百個(gè)成功使用的業(yè)績(jī)。諫壁發(fā)電廠利用PI系統(tǒng)將其#7、#8、#9、#10四臺(tái)300MW機(jī)組多達(dá)20,000點(diǎn)的數(shù)據(jù)實(shí)現(xiàn)了實(shí)時(shí)傳送、長(zhǎng)達(dá)2年的數(shù)據(jù)存儲(chǔ),并利用其強(qiáng)大的二次開(kāi)發(fā)工具,為全廠MIS(或SIS)系統(tǒng)的應(yīng)用開(kāi)發(fā)服務(wù)。
專(zhuān)業(yè)的通訊軟件,如:PI,除了具有高率、高速、數(shù)據(jù)保存時(shí)間長(zhǎng)、安全可靠、功能強(qiáng)大、界面友好、使用方便等優(yōu)點(diǎn)外,通常在數(shù)據(jù)傳送時(shí)還具有以下特性:
l采用“例外報(bào)告”方式:設(shè)定數(shù)據(jù)需要傳送的變化范圍,對(duì)未超過(guò)變化范圍的數(shù)據(jù)不傳送,這一機(jī)制大大降低了通訊負(fù)載。
l具有“數(shù)據(jù)緩存”機(jī)制:在網(wǎng)絡(luò)通訊中斷時(shí),將需要傳送的數(shù)據(jù)緩存在工作站的硬盤(pán)上,待網(wǎng)絡(luò)通訊恢復(fù)時(shí),在網(wǎng)絡(luò)通訊的空閑時(shí)再將數(shù)據(jù)傳送到數(shù)據(jù)庫(kù)中。這一機(jī)制保證了數(shù)據(jù)不丟失。
3.2流程畫(huà)面的實(shí)時(shí)傳送
將流程畫(huà)面實(shí)時(shí)傳送到PC機(jī)上,可以使企業(yè)領(lǐng)導(dǎo)和運(yùn)行管理人員、熱工儀表維護(hù)人員可以及時(shí)掌握現(xiàn)場(chǎng)的生產(chǎn)運(yùn)行情況,便于整個(gè)企業(yè)的資源共享、狀態(tài)監(jiān)視及物流管理。
關(guān)于流程畫(huà)面的實(shí)時(shí)傳送,目前使用較多的是使用HumingBird公司的Exceed軟件。利用Exceed軟件的Telnet功能和I/A’s的附加顯示管理器(AdditionalDisplayManager),將I/A’s中的流程畫(huà)面實(shí)時(shí)傳送至PC機(jī)中,并可以定義在PC機(jī)中的操作權(quán)限是否可以操作。
除Exceed軟件外,還可以使用GraphOn公司的GO_Global軟件,該軟件可以直接利用網(wǎng)絡(luò)傳輸,也可以用撥號(hào)方式,將I/A’s中的流程畫(huà)面實(shí)時(shí)傳送至PC機(jī)中。
在使用Exceed及GO_Global軟件時(shí),利用Modem撥號(hào),就可以實(shí)現(xiàn)“遠(yuǎn)程診斷”(FOXWATCH),即:將I/A’s使用情況等信息,及時(shí)傳送回Foxboro公司,F(xiàn)oxboro公司的工程技術(shù)人員在公司內(nèi)就可以對(duì)用戶的各種要求進(jìn)行及時(shí)響應(yīng),對(duì)其系統(tǒng)進(jìn)行診斷,并對(duì)用戶提出使用建議。在諫壁發(fā)電廠的I/A’s系統(tǒng)中,就安裝有FOXWATCH軟件,使用效果非常好,廠級(jí)領(lǐng)導(dǎo)、熱工維護(hù)人員等在辦公室內(nèi)即可了解機(jī)組生產(chǎn)運(yùn)行情況;在出現(xiàn)故障時(shí),可以迅速將DCS系統(tǒng)使用情況傳送給Foxboro公司的工程技術(shù)人員,在最短的時(shí)間內(nèi)得到技術(shù)支持,最大程度地降低損失。
無(wú)論是采用專(zhuān)門(mén)的硬件實(shí)現(xiàn)通訊,還是使用專(zhuān)業(yè)的通訊軟件實(shí)現(xiàn)通訊,實(shí)現(xiàn)方法都比較簡(jiǎn)單,下面將重點(diǎn)介紹在Foxboro公司I/A’s產(chǎn)品中用軟件編程方法實(shí)現(xiàn)通訊的幾種方法。
四.利用軟件編程實(shí)現(xiàn)通訊
利用軟件編程方式,可以更加靈活實(shí)現(xiàn)各種非常規(guī)的通訊。
由于自行編寫(xiě)的程序在工程師站/操作員站運(yùn)行,需要占用一定的CUP時(shí)間及內(nèi)存,因此在通訊數(shù)據(jù)量較大,同時(shí)要求通訊速度較快時(shí),由于沒(méi)有專(zhuān)業(yè)通訊軟件的“例外報(bào)告”機(jī)制,建議不要采用自行開(kāi)發(fā)程序的辦法。
由于自行編寫(xiě)的程序通常沒(méi)有“數(shù)據(jù)緩存”機(jī)制,在傳送非常重要的數(shù)據(jù)時(shí)應(yīng)該謹(jǐn)慎使用。
自行編程主要工作為了兩方面,一為I/A數(shù)據(jù)的讀寫(xiě)及處理,一為通訊的實(shí)現(xiàn)。
通常自行開(kāi)發(fā)通訊軟件包括:串口通訊(如智能前端)、TCP/IP通訊(如實(shí)時(shí)數(shù)據(jù)傳送)、FTP通訊(如定期傳送報(bào)表文本)、基于TCP/IP的MODBUS協(xié)議通訊。
以上幾種通訊方式在通訊的實(shí)現(xiàn)方式上不同,但在I/A’s內(nèi)數(shù)據(jù)的讀寫(xiě)操作是一樣的,接下來(lái)將闡述軟件編程時(shí)的主要函數(shù)及方式:
4.1I/A’s數(shù)據(jù)的讀寫(xiě)及處理
Foxboro公司I/A’s系統(tǒng)提供強(qiáng)大的內(nèi)部編程函數(shù)(C函數(shù)、FORTRAN),主要包括有:
lOMCALL函數(shù)–實(shí)現(xiàn)I/A’s系統(tǒng)內(nèi)部數(shù)據(jù)的讀寫(xiě)操作。
主要函數(shù)有:
2intgetval(char*name,intobj_type,intimport,char*value,unsignedint*status,intdata_len) 此函數(shù)實(shí)現(xiàn)單個(gè)數(shù)據(jù)的讀操作。 2intom_getval(char*name,intobj_type,intimport,charvalue,unsignedint*status,intdata_len,PSAP_ADDR*psap_ptr) 此函數(shù)實(shí)現(xiàn)單個(gè)數(shù)據(jù)的讀操作,它使用PSAP指針。 2intsetval(char*name,intobj_type,intimport,char*value,unsigned*status,intdata_len) 此函數(shù)實(shí)現(xiàn)單個(gè)數(shù)據(jù)的寫(xiě)操作。 2intom_setval(char*name,intobj_type,intimport,char*value,unsigned*status,intdata_len,PASP_ADDR*psap_ptr); 此函數(shù)實(shí)現(xiàn)單個(gè)數(shù)據(jù)的寫(xiě)操作,它使用PSAP指針。 2intomopen(structom_header_node*om_descriptor,intopen_id) 此函數(shù)實(shí)現(xiàn)打開(kāi)一個(gè)LIST,為數(shù)據(jù)的讀寫(xiě)操作做準(zhǔn)備。 2intomread(intomopen_id,intsize_list,structvalue*var_list) 此函數(shù)實(shí)現(xiàn)從打開(kāi)的LIST中讀取數(shù)據(jù)。 2intomwrite(intomopen_id,intsize_list,structvalue*var_list); 此函數(shù)實(shí)現(xiàn)向打開(kāi)的LIST中寫(xiě)數(shù)據(jù)。 2intomclose(intopen_id,structom_header_node*header,structopen_var*var_list,structnet_addr*addr_tbl) 此函數(shù)實(shí)現(xiàn)關(guān)閉一個(gè)已經(jīng)打開(kāi)的LIST。
2頭部文件、OM結(jié)構(gòu)及例程
#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特點(diǎn)
使用getval、setval、om_getval、om_setval函數(shù)進(jìn)行編程比較簡(jiǎn)單,但效率較差;用omopen、omread、omwrite、omclose編程需要復(fù)雜的聲明,編程比較復(fù)雜,但程序通用性好(不要FOXAPI的支持)、效率高。
lFOXAPI函數(shù)–實(shí)現(xiàn)I/A’s系統(tǒng)內(nèi)部數(shù)據(jù)的讀寫(xiě)操作及強(qiáng)大的C/S結(jié)構(gòu)編程。
主要函數(shù)有:
2intsbopen(int*gw_array,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)
此函數(shù)實(shí)現(xiàn)以連續(xù)更新的方式打開(kāi)一個(gè)讀寫(xiě)SET。 2intbread(intdset,long*value_array,int*status_array,int*reterr) 此函數(shù)實(shí)現(xiàn)從一個(gè)已經(jīng)打開(kāi)SET中讀取數(shù)據(jù)。 2intbwrite(intdset,long*value_array,int*error_array,int*reterr) 此函數(shù)實(shí)現(xiàn)向一個(gè)已經(jīng)打開(kāi)SET中寫(xiě)數(shù)據(jù)。 2intclsset(intdset,int*reterr) 此函數(shù)實(shí)現(xiàn)關(guān)閉一個(gè)已經(jīng)打開(kāi)SET,釋放程序所使用的內(nèi)存空間,釋放對(duì)CP中數(shù)據(jù)的控制權(quán)。
2頭部函數(shù),F(xiàn)OXAPI結(jié)構(gòu)定義及例程
#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]); } …… }
2特點(diǎn)
使用FOXAPI編程比較簡(jiǎn)單,程序效率也很高,但程序的執(zhí)行需要FOXAPI的支持,編譯好的程序只能在裝有FOXAPI的AW、AP機(jī)器中運(yùn)行。PI實(shí)時(shí)數(shù)據(jù)庫(kù)實(shí)際上便是利用FOXAPI函數(shù)編寫(xiě)的應(yīng)用程序。
lHICALL函數(shù)–實(shí)現(xiàn)具有I/A’s風(fēng)格的人機(jī)界面(HUMANINTERFACE)編程,包括顯示元素,如:矩形、圓弧、填充色;對(duì)話框、菜單結(jié)構(gòu)、鼠標(biāo)鍵盤(pán)驅(qū)動(dòng)、查詢(xún)、文件驅(qū)動(dòng)等,事實(shí)上,整個(gè)I/A’s的人機(jī)界面編寫(xiě)既是通過(guò)這些函數(shù)完成。
lIPCALL函數(shù)–實(shí)現(xiàn)I/A’s系統(tǒng)內(nèi)部通訊編程,如:SOE軟件等。 lICCAPI函數(shù)–實(shí)現(xiàn)I/A’s控制處理器CP中CIO的相關(guān)操作。 l數(shù)學(xué)庫(kù)–提供各種經(jīng)典數(shù)值計(jì)算的調(diào)用函數(shù)。 l物理特性庫(kù)–提供各種物理特性計(jì)算的調(diào)用函數(shù),包括水、蒸汽的焓、熵等計(jì)算。 2intvpt(floatp,floatt,float*v) 此函數(shù)根據(jù)蒸汽的壓力及溫度計(jì)算蒸汽的容積。 2inthpt_stm(floatp,floatt,float*h) 此函數(shù)根據(jù)蒸汽的壓力及溫度計(jì)算蒸汽的焓。 2intspt_stm(floatp,floatt,float*s) 此函數(shù)根據(jù)蒸汽的壓力及溫度計(jì)算蒸汽的熵。 2inthpt_wtr(floatp,floatt,float*h) 此函數(shù)根據(jù)水的壓力及溫度計(jì)算水的焓。 2intspt_wtr(floatp,floatt,float*s) 此函數(shù)根據(jù)水的壓力及溫度計(jì)算水的熵。 2inthpt_air(floatp,floatt,float*h) 此函數(shù)根據(jù)空氣的壓力及溫度計(jì)算空氣的焓。 2intspt_air(floatp,floatt,float*s) 此函數(shù)根據(jù)空氣的壓力及溫度計(jì)算空氣的熵。 lINFORMIX編程。 在某些需要對(duì)歷史數(shù)據(jù)進(jìn)行操作的場(chǎng)合,可以利用INFORMIX及E-SQL進(jìn)行編程。
4.2通訊的實(shí)現(xiàn)
在用軟件編程實(shí)現(xiàn)通訊時(shí)所采用的具體的通訊硬件上,既可以通過(guò)串口實(shí)現(xiàn)RS-232通訊,也可以通過(guò)AUI網(wǎng)卡、BNC網(wǎng)卡、RJ-45網(wǎng)卡實(shí)現(xiàn)FTP通訊、TCP/IP通訊。
當(dāng)與I/A’s通訊的其它設(shè)備(如智能數(shù)據(jù)采集前端、GPS、自動(dòng)同期裝置等非通用設(shè)備)可以提供串口通訊,且通訊點(diǎn)數(shù)量不多時(shí),采用專(zhuān)門(mén)的硬件實(shí)現(xiàn)通訊硬件不是一個(gè)非常經(jīng)濟(jì)的方案,此時(shí)可以采用RS-232實(shí)現(xiàn)通訊。
用RS-232實(shí)現(xiàn)通訊時(shí),首先應(yīng)初始化通訊端口,然后可以按RS-232通訊規(guī)程(RXD,TXD,RTS,CTS,DSR,DTR,DCD信號(hào)),發(fā)送指令并接受數(shù)據(jù)。
以下是初始化端口的一段例程:
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); } 以下是讀寫(xiě)端口的一段例程: 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進(jìn)行通訊的是PC機(jī)或其它DCS,比較好的通訊辦法是利用RJ-45等通訊口,按FTP協(xié)議或TCP/IP協(xié)議進(jìn)行通訊。其中,F(xiàn)TP通訊的效率較低,且一直有讀盤(pán)/寫(xiě)盤(pán)動(dòng)作,對(duì)機(jī)器的影響較大,但此方法比較簡(jiǎn)單,容易實(shí)現(xiàn),因此,在通訊不頻繁的時(shí)候(建議大于一小時(shí)),也可以采用這個(gè)辦法。在更多的時(shí)候,則建議使用TCP/IP協(xié)議進(jìn)行通訊。
利用TCP/IP進(jìn)行通訊時(shí),有兩個(gè)協(xié)議可以選擇:TCP及UDP,其中TCP(TransportControlProtocol,傳輸控制協(xié)議)是面向聯(lián)接的,它提供高可靠性服務(wù),尤其適用于傳輸大量報(bào)文信息。UDP(UserDatagramProtocol,用戶數(shù)據(jù)報(bào)協(xié)議)是無(wú)聯(lián)接的,它提供高效率的服務(wù),適用于一次傳輸少量報(bào)文信息的場(chǎng)合。
UDP通訊的程序的編寫(xiě)也比較容易,只需指定客戶機(jī)的IP地址(或主機(jī)名)及傳送端口號(hào)即可,下面是一段利用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); }……
五.通訊安全性的考慮
在采用了I/A’s和PC或其它DCS之間雙向通訊后,安全性就成為一個(gè)比較突出的問(wèn)題,應(yīng)盡力避免不必要的人為破壞。安全性是一個(gè)非常復(fù)雜的問(wèn)題,請(qǐng)參考專(zhuān)業(yè)文獻(xiàn)。在此不做詳細(xì)討論,只就一般性原則提出幾點(diǎn)建議:
I.自行開(kāi)發(fā)軟件時(shí),必須考慮到安全性,包括對(duì)控制處理器數(shù)據(jù)的讀寫(xiě)操作權(quán)限、軟件的事件處理功能(進(jìn)程的意外中斷、程序的死循環(huán)、邊界處理、內(nèi)存的釋放等)、TCP/IP的操作權(quán)限。
II.對(duì)于專(zhuān)業(yè)軟件,由于功能強(qiáng)大,在使用時(shí),應(yīng)對(duì)軟件不必要的部分加以封閉,并對(duì)軟件的操作加以口令授權(quán)。
III.建立通訊程序握手機(jī)制時(shí),必須考慮安全性。
IV.加強(qiáng)有關(guān)的安全性規(guī)章制度的建設(shè),避免人為的破壞。
V.DCS系統(tǒng)與MIS/SIS系統(tǒng)之間設(shè)置網(wǎng)關(guān),企業(yè)MIS/SIS系統(tǒng)聯(lián)結(jié)到INTERNET時(shí)配置防火墻。
六.結(jié)論
本文通過(guò)以諫壁發(fā)電廠使用的Foxboro公司的I/A’s系統(tǒng)為例,討論了DCS系統(tǒng)中實(shí)行通訊的幾種方法。歸納起來(lái)有:使用專(zhuān)業(yè)硬件、使用專(zhuān)門(mén)通訊軟件,以及自行開(kāi)發(fā)軟件三種。
對(duì)主流通訊協(xié)議(MODBUS、A-BPLC)以及通訊數(shù)據(jù)量較多時(shí),采用專(zhuān)業(yè)通訊硬件實(shí)現(xiàn)通訊是一個(gè)比較好的辦法。這種配置方式的優(yōu)勢(shì)在于:通訊可靠、安全性好、容易實(shí)現(xiàn)、開(kāi)發(fā)周期短;不足之處在于:增加了硬件投資。需要指出:在考慮MODBUS協(xié)議通訊時(shí),不能只看有多少個(gè)模擬量/數(shù)字量,而必須同時(shí)考慮:有多少個(gè)設(shè)備,每個(gè)設(shè)備的通訊模擬量/數(shù)字量數(shù)據(jù)有多少,數(shù)據(jù)是否雙向傳送,通訊速率為多少。綜合考慮以上因數(shù)后,計(jì)算出需要多少個(gè)通訊處理器。
專(zhuān)門(mén)的通訊軟件由于功能強(qiáng)大,在使用時(shí)首先要考慮的是安全性,同時(shí)要增加軟件費(fèi)用(大型的數(shù)據(jù)庫(kù)如:PI,I-FIX等價(jià)格都比較貴)。但它也有非常明顯的優(yōu)勢(shì):實(shí)現(xiàn)通訊容易、二次開(kāi)發(fā)工具充足,項(xiàng)目周期短,項(xiàng)目質(zhì)量有保證。
在需要實(shí)時(shí)傳送流程畫(huà)面時(shí),當(dāng)然應(yīng)采用專(zhuān)業(yè)通訊軟件,如:Exceed、GO_Global等。
如果自行開(kāi)發(fā)通訊程序,需要考慮的有:編程工具—C語(yǔ)言投資、程序的魯棒性、編程的工作量、項(xiàng)目周期、通訊效率、對(duì)工程師站/操作員站的CPU占用等問(wèn)題。它的優(yōu)勢(shì)在于:開(kāi)發(fā)靈活,容易實(shí)現(xiàn)用戶的各種特殊需求。
如果通訊量不大(50點(diǎn)左右),建議使用增加I/O卡件,不同系統(tǒng)系統(tǒng)之間通過(guò)硬接線連接的方式實(shí)現(xiàn)。這樣既考慮到了總體投資、項(xiàng)目周期,也增加了系統(tǒng)的可靠性。
如果通訊只提供RS-232通訊,則采用RS-232C協(xié)議進(jìn)行通訊。
如果通訊量較大,但時(shí)間間隔較長(zhǎng),可以考慮采用FTP方式傳送文本數(shù)據(jù)。
如果通訊頻率較高,建議采用TCP/IP中的UDP協(xié)議進(jìn)行通訊。
|