大佬解讀工業(yè)監(jiān)控系統(tǒng),遠(yuǎn)程工業(yè)監(jiān)控系統(tǒng)設(shè)計(jì)(下篇)
工業(yè)監(jiān)控系統(tǒng)發(fā)揮著重要作用,對(duì)于工業(yè)監(jiān)控系統(tǒng),我們應(yīng)當(dāng)有所了解。前文中,小編對(duì)遠(yuǎn)程工業(yè)監(jiān)控系統(tǒng)設(shè)計(jì)做過(guò)部分介紹。本文中,將對(duì)前文提及的遠(yuǎn)程工業(yè)監(jiān)控系統(tǒng)設(shè)計(jì)的余下部分予以介紹。如果你對(duì)工業(yè)監(jiān)控存在興趣,不妨繼續(xù)往下閱讀哦。
基于Flash遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)
1.系統(tǒng)硬件連接設(shè)計(jì)
現(xiàn)場(chǎng)設(shè)備通過(guò)串口與數(shù)據(jù)采集模塊通訊,數(shù)據(jù)采集模塊通過(guò)工業(yè)以太網(wǎng)與Web服務(wù)器連接,Web服務(wù)器通過(guò)以太網(wǎng)與數(shù)據(jù)庫(kù)服務(wù)器連接。數(shù)據(jù)采集模塊采用PAC(可編程自動(dòng)化控制器),支持Modbus/TEP通信協(xié)議。Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器采用HP服務(wù)器,安裝操作系統(tǒng)為Windo ws Server 2008 Enterprise.網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)采用星型拓?fù)浣Y(jié)構(gòu),是為了能夠與現(xiàn)場(chǎng)采集設(shè)備建立更有效的連接。Web服務(wù)器存儲(chǔ)數(shù)據(jù)直接面向數(shù)據(jù)庫(kù)服務(wù)器,便于減輕整個(gè)網(wǎng)絡(luò)負(fù)擔(dān),防止由于數(shù)據(jù)量過(guò)大而引起網(wǎng)絡(luò)阻塞。同時(shí)數(shù)據(jù)庫(kù)服務(wù)器實(shí)現(xiàn)雙機(jī)熱備,來(lái)提高系統(tǒng)的可靠性。將數(shù)據(jù)庫(kù)分為兩部分:中心數(shù)據(jù)庫(kù)和企業(yè)級(jí)數(shù)據(jù)庫(kù),中心數(shù)據(jù)庫(kù)主要存放當(dāng)前數(shù)據(jù),企業(yè)級(jí)數(shù)據(jù)庫(kù)則存放歷史數(shù)據(jù)以及設(shè)備和用戶的管理數(shù)據(jù),實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)與靜態(tài)數(shù)據(jù)的隔離。網(wǎng)絡(luò)拓?fù)鋱D如下圖所示。
圖示:系統(tǒng)總體架構(gòu)圖
2.系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)的核心內(nèi)容為PAC編程和客戶端Flash編程。PAC編程語(yǔ)言為C語(yǔ)言,編輯環(huán)境為BC編譯器,F(xiàn)lash編程語(yǔ)言為AcTIon Script,編輯環(huán)境為Flash builder4.5.
本系統(tǒng)通過(guò)創(chuàng)建一個(gè)以TCP數(shù)據(jù)流方式建立的Socket從而實(shí)現(xiàn)PAC服務(wù)端與基于Web的Flash客戶端的數(shù)據(jù)傳輸。建立通信的過(guò)程為:首先PAC服務(wù)端通過(guò)Socket監(jiān)聽(tīng)自身的Modbus/TCP專用端口502,客戶端程序則通過(guò)此端口及PAC服務(wù)端的IP地址作為連接Socket參數(shù),創(chuàng)建一個(gè)Socket與PAC服務(wù)端建立連接。網(wǎng)絡(luò)無(wú)故障,則連接建立??蛻舳送ㄟ^(guò)Flash中Socket的SendMessage()和ReadBytes()方法來(lái)發(fā)送和接收信息。
利用Flash創(chuàng)建的基于Modbus/TCP套接字模型為如下圖所示。
圖示:Modbus/TCP套接字模型
3.PAC服務(wù)端程序?qū)崿F(xiàn)
PAC服務(wù)端的實(shí)現(xiàn)主要分為通過(guò)Socket與上位機(jī)的通信和通過(guò)串口服務(wù)與外圍設(shè)備的通信兩大部分。
通過(guò)Socket與上位機(jī)的通信主要分為監(jiān)聽(tīng)和連接。在監(jiān)聽(tīng)狀態(tài)下負(fù)責(zé)監(jiān)聽(tīng)客戶端的請(qǐng)求連接,并負(fù)責(zé)接受此連接。本系統(tǒng)PAC端設(shè)計(jì)監(jiān)聽(tīng)類為ServerListen,監(jiān)聽(tīng)類首先通過(guò)int bind(int sockfd,struct sockaddr*my_addr,int addrten)綁定了本地的502端口,然后通過(guò)函數(shù)int listen (int sockfd,intbacklog)將客戶端的連接請(qǐng)求放入隊(duì)列中等待,直到函數(shù)intaccept(int sockfd,void*addr,int*addrlen)處理它,然后返回一個(gè)全新的套接字文件來(lái)描述此單個(gè)連接。這樣,對(duì)于同一個(gè)連接就有兩個(gè)文件描述符,原先的一個(gè)文件描述符正在監(jiān)聽(tīng)你指定的端口,新的文件描述符可以用來(lái)調(diào)用send()和recv()。在連接狀態(tài)下負(fù)責(zé)與客戶端進(jìn)行數(shù)據(jù)的接收和發(fā)送,通過(guò)數(shù)據(jù)傳輸類Server Custom來(lái)實(shí)現(xiàn)。在此類中利用int send(SOCKETs,const char FAR*buf,int len,int flags)函數(shù)將PAC服務(wù)端的數(shù)據(jù)發(fā)送到客戶端,如果網(wǎng)絡(luò)發(fā)生故障或待發(fā)送數(shù)據(jù)的長(zhǎng)度len小于當(dāng)前程序要發(fā)送數(shù)據(jù)的緩沖區(qū)的長(zhǎng)度,則返回SOCKET_ERROR,利用int recv(SOCKETs,char FAR* buf,int len,int flags)從客戶端接收數(shù)據(jù)。函數(shù)先等待s的發(fā)送緩沖中的數(shù)據(jù)被協(xié)議傳送完畢,如果協(xié)議在傳送s的發(fā)送緩沖中的數(shù)據(jù)時(shí)出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤,則函數(shù)返回SOCKET_ERROR錯(cuò)誤,如果s的發(fā)送緩沖中沒(méi)有數(shù)據(jù)或者數(shù)據(jù)被協(xié)議成功發(fā)送完畢后,函數(shù)先檢查套接字s的接收緩沖區(qū),如果s的接收緩沖區(qū)中沒(méi)有數(shù)據(jù)或者協(xié)議正在接收數(shù)據(jù),那么函數(shù)就一直等待,直到協(xié)議把數(shù)據(jù)接收完畢。
對(duì)于外圍設(shè)備進(jìn)行通信主要是通過(guò)串口服務(wù),首先調(diào)用自己定義的COM口初始化函數(shù)InstallCom將端口初始化,然后通過(guò)build_REQ_Read函數(shù)實(shí)現(xiàn)根據(jù)ModBusRtu通訊協(xié)議將COM口讀取的外圍設(shè)備的數(shù)據(jù)放入自定義的數(shù)組中,并通過(guò)CRC16_modbus進(jìn)行CRC校驗(yàn)。接收的數(shù)據(jù)正確,則通過(guò)analyse_Read_Result分析從串口讀取的數(shù)據(jù),并將讀取的數(shù)據(jù)位存放到Share_Mem[MaxShareMemNum]數(shù)組中。然后將Share_Mem數(shù)組作為REMOTCP_ModServer_Create參數(shù)與上位機(jī)進(jìn)行通訊。對(duì)外圍設(shè)備發(fā)送指令,則是通過(guò)函數(shù)SendCommand選擇控制對(duì)象的COM后,將指令發(fā)送到外圍設(shè)備,外圍設(shè)備接收到指令后動(dòng)作。
以上便是此次小編帶來(lái)的“工業(yè)監(jiān)控”相關(guān)內(nèi)容,希望大家對(duì)本文知識(shí)具備一定的了解。如果你喜歡本文,不妨持續(xù)關(guān)注我們網(wǎng)站哦,小編將于后期帶來(lái)更多精彩內(nèi)容。最后,十分感謝大家的閱讀,have a nice day!