新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Windows CE設備與PLC串行通信的實現

        Windows CE設備與PLC串行通信的實現

        作者: 時間:2012-03-26 來源:網絡 收藏

        2.2 雙方通信程序的設計

        根據對控制系統的機械、電氣、開關量等控制要求,上下位機之間要就多種不同的數據、指令進行交互。并且這些數據、指令的數據位的長度不同。舉其中的機器狀態、機器參數、控制命令三種常見的指令為例。機器狀態要求下位機不間斷發送的機器的實時狀態,一般包含數據量不大。機器參數往往是在開機發送或者重新設置了機器的參數時發送,機器參數的數據個數較多,但發送的次數較少。控制命令,只有操作者通過控制面板上的操作時才會發送,它發送的內容也不多,發送頻率也較低。但由于使用Fx2n 的RS數據通信時,在每次進行通信時,必須知道本次要接收內容的個數。如果把不同類型的數據采用定長結構的發送方式,程序設計起來較為簡單,但是其中包含了大量的無用數據,發送的效率較低。所以在進行通信時,定義了下面的通信的協議形式:

        本次通信標志

        下次發送的個數

        本次發送內容

        結束標志

        其中協議中具體含義如下表所示:

        協議內容

        含義

        本次通信標志

        AA:機器狀態

        AF:機器參數

        AC:控制命令

        下次發送的個數

        用于確定下次接收的個數

        本次發送內容

        DATA

        結束標志

        FF

        表2 通信協議的格式

        這樣,通過在本次通信中加入下次通信的個數,在PLC端可以通過程序判定確定下次發送內容的個數,進行處理。這樣可以提高發送的效率,保證數據的實時性。具體的發送流程如下圖所示。

        圖3 通信流程圖

        2.3 對數據接收緩沖區的處理

        通過研究Windows CE提供的驅動程序代碼可以看出,驅動程序通過維護內部的軟件緩沖區來保障當應用程序不能及時響應數據到來時,數據會先保存在驅動程序的數據緩沖區中,而不會發生數據丟失的現象。但是對于實時響應要求很高系統來說就是有害的。這樣最新到來的數據不能被應用程序及時處理,而被堆放到了緩沖區的后部等待前面的數據處理完成后才能被處理,降低系統的實時性。為了減少驅動程序數據緩沖區對系統實時性的影響,可以通過在的程序中加入對串行API函數 PurgeComm的調用來及時清除緩沖區的內容,以保證新到的數據及時被應用程序處理,提高通信的實時性。

        3 總結

        本文詳細分析了在Windows CE下進行的特點,并設計了Windows CE與PLC進行的程序流程和通信格式。實現了通過串行通信連接的由Fx2n PLC與PC104模塊組成的上下位機控制系統,整套系統已經成功的應用到了高檔的電氣和運動控制。產品經過了用戶的長期檢驗和國家的技術鑒定,合作企業三年內已經取得近600多萬元的經濟效益。充分證明了整個系統結構的可行性和可靠性。并且可以通過借助Windows CE的可移植性和強大的網絡功能以及PLC通用性等特點,把這種通過串行通信連接構成的上下位機結構方式應用推廣到其它類似的機電一體化產品中的控制系統應用之中。

        參考文獻:

        [1] Microsoft Corporation, Platform Builder for Windows CE 5.0 Help [OL], 2004.

        [2] Douglas Boling, Programming Windows CE [M], 2001.

        [3] Mitsubishi Electric Corporation, FX2n series Programmable Controller User's Manual [M], 2001.

        [4] 田書峰,李欣.單片機與三菱PLC無協議串行通訊的實現[J],微計算機信息,2005,(10).[5] 陳向群,王雷等,Windows CE.NET 系統分析及實驗教程[M],機械工業出版社,2002.


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 香格里拉县| 沁水县| 齐河县| 广平县| 长垣县| 庆元县| 甘孜县| 淳安县| 湘乡市| 潼南县| 石泉县| 长白| 陵川县| 扎鲁特旗| 桐乡市| 泰州市| 庆元县| 鹤岗市| 乃东县| 屏山县| 兴宁市| 千阳县| 合山市| 泽州县| 若羌县| 无为县| 饶阳县| 达州市| 东明县| 洪雅县| 阳曲县| 昆明市| 容城县| 连江县| 龙岩市| 雷波县| 阳泉市| 博客| 富裕县| 广德县| 盐边县|