利用軟件編程實現(xiàn)DCS通訊_第1頁
利用軟件編程實現(xiàn)DCS通訊_第2頁
利用軟件編程實現(xiàn)DCS通訊_第3頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、本文格式為Word版,下載可任意編輯利用軟件編程實現(xiàn)DCS通訊 利用軟件編程方式,可以更加敏捷實現(xiàn)各種特別規(guī)的通訊。 由于自行編寫的程序在工程師站/操作員站運行,需要占用肯定的CUP時間及內(nèi)存,因此在通訊數(shù)據(jù)量較大,同時要求通訊速度較快時,由于沒有專業(yè)通訊軟件的“例外報告”機制,建議不要采納自行開發(fā)程序的方法。 由于自行編寫的程序通常沒有“數(shù)據(jù)緩存”機制,在傳送特別重要的數(shù)據(jù)時應當謹慎使用。 自行編程主要工作為了兩方面,一為I/A數(shù)據(jù)的讀寫及處理,一為通訊的實現(xiàn)。 通常自行開發(fā)通訊軟件包括:串口通訊(如智能前端)、TCP/IP通訊(照實時數(shù)據(jù)傳送)、FTP通訊(如定期傳送報表文本)、基于TCP

2、/IP的MODBUS協(xié)議通訊。 以上幾種通訊方式在通訊的實現(xiàn)方式上不同,但在I/As內(nèi)數(shù)據(jù)的讀寫操作是一樣的,接下來將闡述軟件編程時的主要函數(shù)及方式: 1.I/As數(shù)據(jù)的讀寫及處理 Foxboro公司I/As系統(tǒng)供應強大的內(nèi)部編程函數(shù)(C函數(shù)、FORTRAN),主要包括有: lOMCALL函數(shù)實現(xiàn)I/As系統(tǒng)內(nèi)部數(shù)據(jù)的讀寫操作。 主要函數(shù)有: 2intgetval(char*name,intobj_type,intimport,char*value,unsignedint*status,intdata_len) 此函數(shù)實現(xiàn)單個數(shù)據(jù)的讀操作。 2intom_getval(char*name,in

3、tobj_type,intimport,charvalue,unsignedint*status,intdata_len,PSAP_ADDR*psap_ptr) 此函數(shù)實現(xiàn)單個數(shù)據(jù)的讀操作,它使用PSAP指針。 2intsetval(char*name,intobj_type,intimport,char*value,unsigned*status,intdata_len) 此函數(shù)實現(xiàn)單個數(shù)據(jù)的寫操作。 2intom_setval(char*name,intobj_type,intimport,char*value,unsigned*status,intdata_len,PASP_ADDR*p

4、sap_ptr); 此函數(shù)實現(xiàn)單個數(shù)據(jù)的寫操作,它使用PSAP指針。 2intomopen(structom_header_node*om_descriptor,intopen_id) 此函數(shù)實現(xiàn)打開一個LIST,為數(shù)據(jù)的讀寫操作做預備。 2intomread(intomopen_id,intsize_list,structvalue*var_list) 此函數(shù)實現(xiàn)從打開的LIST中讀取數(shù)據(jù)。 2intomwrite(intomopen_id,intsize_list,structvalue*var_list); 此函數(shù)實現(xiàn)向打開的LIST中寫數(shù)據(jù)。 2intomclose(intopen_i

5、d,structom_header_node*header,structopen_var*var_list,structnet_addr*addr_tbl) 此函數(shù)實現(xiàn)關(guān)閉一個已經(jīng)打開的LIST。 2頭部文件、OM結(jié)構(gòu)及例程 #include #include #include #include #include main() structopen_varin_var_list8; structheader_nodein_om_desc; structnet_adrin_net_adr_tbl2; intin_open_id; intrtn; floatdelta_temp,delta_fc,

6、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_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函

7、數(shù)進行編程比較簡潔,但效率較差;用omopen、omread、omwrite、omclose編程需要簡單的聲明,編程比較簡單,但程序通用性好(不要FOXAPI的支持)、效率高。 lFOXAPI函數(shù)實現(xiàn)I/As系統(tǒng)內(nèi)部數(shù)據(jù)的讀寫操作及強大的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,in

8、t*error_array,int*reterr) 此函數(shù)實現(xiàn)以連續(xù)更新的方式打開一個讀寫SET。 2intbread(intdset,long*value_array,int*status_array,int*reterr) 此函數(shù)實現(xiàn)從一個已經(jīng)打開SET中讀取數(shù)據(jù)。 2intbwrite(intdset,long*value_array,int*error_array,int*reterr) 此函數(shù)實現(xiàn)向一個已經(jīng)打開SET中寫數(shù)據(jù)。 2intclsset(intdset,int*reterr) 此函數(shù)實現(xiàn)關(guān)閉一個已經(jīng)打開SET,釋放程序所使用的內(nèi)存空間,釋放對CP中數(shù)據(jù)的掌握權(quán)。 2頭部函

9、數(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*/ staticintgwSETNUMOBJNUM;/*GatewayArray*/ charnameSETNUMOBJNUM32;/*ObjectNameArray*/ chardes

10、cSETNUMOBJNUM15;/*ObjectdescriptionArray*/ staticintvaltypeSETNUMOBJNUM;/*ObjectValueTypeArray*/ staticintacctype=1;/*Read-onlyArray*/ staticfloatrdeltaSETNUMOBJNUM;/*ObjectsReadDeltaArray*/ staticfloatwdeltaSETNUMOBJNUM;/*ObjectsWriteDeltaArray*/ interrorSETNUMOBJNUM;/*ObjectsErrorArray*/ intindexS

11、ETNUMOBJNUM;/*ObjectsIndexesArray*/ intstatusSETNUMOBJNUM;/*ObjectsStatusArray*/ IAXVALvalueSETNUMOBJNUM;/*ObjectsValueArray*/ staticintrsr=4;/*ReadScanRate*/ staticintwsr=4;/*WriteScanRate*/ staticintclexit=1;/*IgnoredinUNIX*/ intreterrSETNUM;/*OpenSetreturnErrorCode*/ /*PredefineParameterofutility

12、*/ intsetSETNUM;/*OpenSetNumber*/ intTotal_SET;/*TotalSetNumber*/ intLast_SET_Num;/*LastSetValueNuber*/ intTotal_Num;/*TotalNumberofobjects*/ intTotal_File;/*TotaloutputfilesNumber*/ intINTERVAL;/*Communicateinterval*/ intCol_Num;/*Valuenumberperline*/ main() scopen(gwi,k,namei,valtypei,acctype,rdel

13、tai,clexit,rsr, wsr,wdeltai,seti,indexi,errori,reterri); printf(“ReturnErrorCode=%-dn”,reterri); printf(“ReturnDataSet=%-dn”,seti); rtn=bread(seti,valuei,statusi,reterri); if(reterri!=0) printf(“BufferedReadObjectsError%d,%d,%dn”,rtn, reterri,seti); for(i=0;i clsset(seti,reterri); 2特點 使用FOXAPI編程比較簡潔

14、,程序效率也很高,但程序的執(zhí)行需要FOXAPI的支持,編譯好的程序只能在裝有FOXAPI的AW、AP機器中運行。PI實時數(shù)據(jù)庫實際上便是利用FOXAPI函數(shù)編寫的應用程序。 lHICALL函數(shù)實現(xiàn)具有I/As風格的人機界面(HUMANINTERFACE)編程,包括顯示元素,如:矩形、圓弧、填充色;對話框、菜單結(jié)構(gòu)、鼠標鍵盤驅(qū)動、查詢、文件驅(qū)動等,事實上,整個I/As的人機界面編寫既是通過這些函數(shù)完成。 lIPCALL函數(shù)實現(xiàn)I/As系統(tǒng)內(nèi)部通訊編程,如:SOE軟件等。 lICCAPI函數(shù)實現(xiàn)I/As掌握處理器CP中CIO的相關(guān)操作。 l數(shù)學庫供應各種經(jīng)典數(shù)值計算的調(diào)用函數(shù)。 l物理特性庫供應各

15、種物理特性計算的調(diào)用函數(shù),包括水、蒸汽的焓、熵等計算。 2intvpt(floatp,floatt,float*v) 此函數(shù)依據(jù)蒸汽的壓力及溫度計算蒸汽的容積。 2inthpt_stm(floatp,floatt,float*h) 此函數(shù)依據(jù)蒸汽的壓力及溫度計算蒸汽的焓。 2intspt_stm(floatp,floatt,float*s) 此函數(shù)依據(jù)蒸汽的壓力及溫度計算蒸汽的熵。 2inthpt_wtr(floatp,floatt,float*h) 此函數(shù)依據(jù)水的壓力及溫度計算水的焓。 2intspt_wtr(floatp,floatt,float*s) 此函數(shù)依據(jù)水的壓力及溫度計算水的熵。

16、 2inthpt_air(floatp,floatt,float*h) 此函數(shù)依據(jù)空氣的壓力及溫度計算空氣的焓。 2intspt_air(floatp,floatt,float*s) 此函數(shù)依據(jù)空氣的壓力及溫度計算空氣的熵。 lINFORMIX編程。 在某些需要對歷史數(shù)據(jù)進行操作的場合,可以利用INFORMIX及E-SQL進行編程。 2.通訊的實現(xiàn) 在用軟件編程實現(xiàn)通訊時所采納的詳細的通訊硬件上,既可以通過串口實現(xiàn)RS-232通訊,也可以通過AUI網(wǎng)卡、BNC網(wǎng)卡、RJ-45網(wǎng)卡實現(xiàn)FTP通訊、TCP/IP通訊。 當與I/As通訊的其它設備(如智能數(shù)據(jù)采集前端、gps、自動同期裝置等非通用設備

17、)可以供應串口通訊,且通訊點數(shù)量不多時,采納特地的硬件實現(xiàn)通訊硬件不是一個特別經(jīng)濟的方案,此時可以采納RS-232實現(xiàn)通訊。 用RS-232實現(xiàn)通訊時,首先應初始化通訊端口,然后可以按RS-232通訊規(guī)程(RXD,TXD,RTS,CTS,DSR,DTR,DCD信號),發(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);

18、 if(savef=fcntl(*fd,F(xiàn)_GETFL,0)0) return(2); if(fcntl(*fd,F(xiàn)_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

19、.c_cflag=PARODD; termio.c_iflag=INPCK; termio.c_iflag=ISTRIP; termio.c_lflag=0; termio.c_oflag=0; termio.c_ccVMIN=1; termio.c_ccVTIME=0; if(ioctl(*fd,TCSETS,termio)0) return(5); sleep(1); return(0); 以下是讀寫端口的一段例程: intcomm(unsignedcharnum,intfd) intI,rtn,tioc; unsignedcharT200; unsignedcharbuff200; io

20、ctl(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/As進行通訊的是PC機或其它dcs,比較好的通訊方法是利用RJ-45等通訊口,按FTP協(xié)議或TCP/IP協(xié)議進行通訊。其中,F(xiàn)TP通訊的效率較低,且始終有讀盤/寫盤動作,對機器的影響較大,但此方法比較簡潔,簡單實現(xiàn),因此,在通訊不頻繁的時候(建議大于一小時),也可以采納這個方法。在更多的時候,則建議使用TCP/IP協(xié)議進行通訊。 利用TCP/IP進行通訊時,有兩個協(xié)議可以選擇:TCP及UDP,其中TCP(TransportControlProtocol,傳輸掌握協(xié)議)是面對聯(lián)接的,它供應高牢靠性服務,尤其適用于傳輸大量報文信息。UDP(UserDatagramProtocol,用戶數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論