基于調制解調器與VB的PLC遠程通訊系統設計
二.讀數寫數
本系統操作PLC的關鍵數據主要是水位的設定值PV=R0和當前值CV=R1,即要對暫存器R0進行寫操作,R1進行讀操作;
依照協議VB設計的通訊程序必須指定一個命令碼,向PLC請求數據讀取,查的該命令碼為“46”,解釋為:連續多個緩存器之數據讀取。讀取R1的PC命令的ASCII碼寫法為:
“STX+ 01(站號)+46(命令碼)+01(連續數據個數)+R00001(數據開始地址)+LRC(偵誤值)+ETX”
依照協議VB設計的通訊程序必須指定一個命令碼,對PLC緩存器數據寫入,查的該命令碼為“47”,解釋為:連續多個緩存器之數據寫入。寫入R0的PC命令的ASCII碼寫法為:
“STX+ 01(站號)+47(命令碼)+01(連續數據個數)+R00000(數據開始地址)+XXXX(寫入的數據資料,16進制)+LRC(偵誤值)+ETX”
讀取當前值CV=R1,程序如下
Private Sub Timer1_Timer()
MSComm1.Output= Chr(2)+ “014601R00001”+ Lrc(“014601R00001”)+Chr(3)
Delay (10) ‘延時
CV = Val(“&H” + Mid(MSComm1.bbbbb, 7, 4)) ’數據處理,R0放于CV
CV.Text = CV
End Sub
寫入設定值PV=R0,程序如下
Private Sub Command1_Click()
If Len(Hex(PV.Text)) = 4 Then PV = Hex(PV.Text)
If Len(Hex(PV.Text)) = 3 Then PV = “0” + Hex(PV.Text
If Len(Hex(PV.Text)) = 2 Then PV = “00” + Hex(PV.Text)
If Len(Hex(PV.Text)) = 1 Then PV = “000” + Hex(PV.Text) ‘10進制轉換16進制
MSComm1.Output=Chr(2)+ “014701R00000”+ PV + +Lrc(“014701R00000” & PV)+Chr(3)
End Sub
三.偵誤值(CHECKSUM)計算
為VB的編程方便,把該計算做成單獨一個子程序,依所有數據累加,舍棄進位的規則VB的LRC編程如下:
Private Function Lrc(Dats) As bbbbbb
Dim i
Dim Sum
Sum =2
For i = 1 To Len(Dats)
Sum = Sum + Asc(Mid(Dats, i, 1))
Next i
Lrc = Right(“0” + Hex(Sum + 2), 2)
End Function
5結束語
采用基于MODEM通訊的設計極方便地實現該小電站生廠調度,在這種只需短時間連接控制的系統應用上可以大幅度地減小通訊成本,具有一定的推廣價值。另外,通過MODEM的連接,利用永宏編程軟件可以實現該設備的遠程程序調試修改,通過兩個MODEM還可以實現兩臺遠程PLC的CPU連接通訊等。