關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于Flash的遠程工業監控系統設計

        基于Flash的遠程工業監控系統設計

        作者: 時間:2012-07-02 來源:網絡 收藏

        3.2.1 1PAC服務端程序實現
        PAC服務端的實現主要分為通過Socket與上位機的通信和通過串口服務與外圍設備的通信兩大部分。
        通過Socket與上位機的通信主要分為監聽和連接。在監聽狀態下負責監聽客戶端的請求連接,并負責接受此連接。本系統PAC端監聽類為ServerListen,監聽類首先通過int bind(int sockfd,struct sockaddr*my_addr,int addrten)綁定了本地的502端口,然后通過函數int listen (int sockfd,intbacklog)將客戶端的連接請求放入隊列中等待,直到函數intaccept(int sockfd,void*addr,int*addrlen)處理它,然后返回一個全新的套接字文件來描述此單個連接。這樣,對于同一個連接就有兩個文件描述符,原先的一個文件描述符正在監聽你指定的端口,新的文件描述符可以用來調用send()和recv()。在連接狀態下負責與客戶端進行數據的接收和發送,通過數據傳輸類Server Custom來實現。在此類中利用int send(SOCKETs,const char FAR*buf,int len,int flags)函數將PAC服務端的數據發送到客戶端,如果網絡發生故障或待發送數據的長度len小于當前程序要發送數據的緩沖區的長度,則返回SOCKET_ERROR,利用int recv(SOCKETs,char FAR* buf,int len,int flags)從客戶端接收數據。函數先等待s的發送緩沖中的數據被協議傳送完畢,如果協議在傳送s的發送緩沖中的數據時出現網絡錯誤,則函數返回SOCKET_ERROR錯誤,如果s的發送緩沖中沒有數據或者數據被協議成功發送完畢后,函數先檢查套接字s的接收緩沖區,如果s的接收緩沖區中沒有數據或者協議正在接收數據,那么函數就一直等待,直到協議把數據接收完畢。
        對于外圍設備進行通信主要是通過串口服務,首先調用自己定義的COM口初始化函數InstallCom將端口初始化,然后通過build_REQ_Read函數實現根據ModBusRtu通訊協議將COM口讀取的外圍設備的數據放入自定義的數組中,并通過CRC16_modbus進行CRC校驗。接收的數據正確,則通過analyse_Read_Result分析從串口讀取的數據,并將讀取的數據位存放到Share_Mem[MaxShareMemNum]數組中。然后將Share_Mem數組作為REMOTCP_ModServer_Create參數與上位機進行通訊。對外圍設備發送指令,則是通過函數SendCommand選擇控制對象的COM后,將指令發送到外圍設備,外圍設備接收到指令后動作。
        3.2.2 客戶端程序與PAC服務端通訊的實現
        客戶端的實現主要分為3個部分:通過的Socket與PAC服務端的數據交互,將接收的數據在頁面上動態顯示和將獲取的數據實時存入到數據庫,實現實時數據庫的歷史存儲功能。
        客戶端與PAC服務端的數據交互主要是通過Socket進行的。首先定義Socket,利用connect連接PAC服務器的地址和端口號502,利用mysocket.addEventListener(Event.CONNECT,OnConnect)監聽是否已建立連接,利用mysocket.addEventListener (IOErrorEvent.IO_ ERROR,ioErrorHandler)來監聽連接過程中出現的錯誤,利用mysoeket.addEventListener(Event.CLOSE,OnClose)監聽連接是否關閉,利用mysocket.addEventListener(ProgressEvent.SOCKET DATA,receivedata) 中的mysoeket.readMultiByte(mysocket.bytesAvailabl e,“utf8”)接收PAC服務端發送過來的數據。添加控制功能則是通過flash頁面中的控件的觸發事件來完成。在觸發事件中添加mysocket. writeUTFBytes(data),并調用mysocket.flush()方法將觸發的事件發送出去,從而完成了與服務端的數據交換。
        在發送與接收數據的過程中由于遵循的為Modbus/TCP協議,發送和接收的數據要遵循Modbus標準的數據幀格式,因此需要根據Modbus協議的標準格式對所接收和發送的數據幀進行轉化。在接收的數據中,要對接收的數據進行分析,根據自己的定義,將地址與監控終端的信息取出,并轉換為String類型,在頁面上對應顯示。
        3.2.3 客戶端與數據庫的交互
        對采集來的數據除了在頁面上顯示,需要存入數據庫作為歷史備份。客戶端與Oracle數據庫無法直接交互,可以通過服務器端技術連接數據庫,這3種連接方式為:HttpService、WebService和RemoteObject。3種通訊方式比較如表1所示。

        本文引用地址:http://www.104case.com/article/160350.htm

        d.JPG


        從上表中可以看出,前兩種通信數據量較小,要傳輸大量的數據或是實現不同對象的序列化傳輸,需要利用高效的傳輸協議AMF(Aetion Script Message Format)來代替SOAP協議傳輸的方案。
        開源項目FluorineFx就是專門針對.net平臺與Flex通信提供的AMF協議通信網關,筆者可以通過FluorineFx方便地完成與.net的通信。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新兴县| 塘沽区| 吴桥县| 个旧市| 凤山市| 九龙坡区| 保康县| 灌南县| 浪卡子县| 沂水县| 邯郸市| 济阳县| 雷州市| 儋州市| 鹤山市| 上蔡县| 华容县| 郧西县| 浦东新区| 西充县| 普安县| 浦县| 安多县| 封开县| 三明市| 太原市| 灵武市| 博爱县| 鹤岗市| 温宿县| 莱芜市| 舟曲县| 邵武市| 博乐市| 泽库县| 正镶白旗| 雷山县| 改则县| 高雄市| 阿拉善盟| 武义县|