主線程接收到消息后即調用WriteToPort函數向串口發送命令,確認命令發送完畢后把“發送”事件標記為OFF,“接收”事件標記為ON.同樣道理,監視線程監測到“接收”事件標記為ON時給主線程發送消息,主線程調用ReceiveChar(TSerialPort*port,COMSTATcomstat)函數接收PLC響應代碼。分析結果在屏幕上顯示。此時,監視線程把“發送”事件標記為ON,下一個循環到來時,監視線程向串口發送命令并接收PLC的響應代碼。在該系統中,用PLC控制變頻器,用計算機監控PLC.在一個循環內,監視線程首先檢測有無鼠標點擊指示燈,如有則首先發送代碼到串口中,使PLC相應指示燈為ON;否則發送預定義代碼到串口中,循環讀取PLC各內存區數據,并在下一個循環內讀取PLC響應碼,分析后在屏幕上做相應顯示。
由于監視線程一個循環內的代碼很少且耗時較多的串口處理程序均采用同步處理方式,監視線程只需要向主線程發送消息,不等主線程響應就返回,因此循環周期極短,足以滿足適時控制的要求。利用Windows的消息處理機制對響應結果進行分析。同時,串口監視線程繼續監視串口,主線程繼續接收用戶輸入并顯示Windows分析結果。程序中同樣要對計算機向PLC發送的命令代碼進行校驗,命令格式、校驗規則及校驗程序同第一種方法。主線程程序框圖,監視線程程序框圖如圖4所示。3兩種方法的對比分析在BCB中利用Windows封裝的API函數開發串行通訊程序比較復雜,它有兩個線程并列運行,可同時處理大量數據,其準確性高,適時性好,適用于對連續生產過程中對通訊響應要求嚴格、適時性強、數據量大的自動化工廠中。而在BCB中利用ACTIVEX控件開發的串行通訊程序只適用于小型離散控制系統中,開發成本較低。總結在計算機與PLC的通訊中,有3種方式可以采用,即:中斷方式、查詢方式和事件驅動方式。應用該電路系統已投入運行,經考核測試,工作穩定可靠。