VB實現電腦與台達 PLC的串列通信
───────PLC產品處 王乃全
摘要:本文介紹了 Visual Basic6編程語言,MODBUS ASCII通信協定及通過 VB如何實現
P PLC的通信
關鍵字:Visual Basic MODBUS
前言:
現代的世界是一個高度自動化的世界,各式各樣的設備都可以和電腦連線,而最簡單的
自動化連線方式就是使用串列通信。
VB提供了串列通信控制項 以讓開發者開發串列通信的系統程 ,功能上也提供了不
少為用戶著想的簡便之處。
PLC 制領域不可缺 的部分,已經非常普及,如何簡 的與 PLC交互已經成
為眾多廠 戰場。由此 生了人機界面、組態軟體等產品。 些產品的產 大簡
化了對 P ,操作,使 方便。但也有共同的缺點:價格 高和開發性較差。VB
作為“原始"的編程語言在這兩 面無疑有著明顯的優勢。
本文結合一個簡單的案例, 比較基礎的概念為大家展示如何 VB實現 PC-PLC的
通信,對於初涉這個領域的工程
一、串列通信基本概念
1、 通信的種類:通常通信的形
列通信(Serial Communicat
位元。這兩種不同的通信模
并行设备
如打印机
并行设备
如打印机
2、 串列通信
可
少
產
用更
方
用
師,也會受益與本文提供的基本概
式可以分為兩種,並行通信(Paral
ion)。所謂並行,既是一次傳輸量為
式如圖
平行傳輸
8 7 6 5 4 3 2 1
1
2
3
4
5
6
7
8
串列傳輸
式
便
這
過
通過
是現在控
商新的競爭
LC的控制
念。
lel Communica
8位;而串列
1
2
3
4
5
6
7
8
生大
與台達 DV
ASCII PLC
tion)和串
一次只傳 1
设 备
设 备
常用的串列通信也有兩種。分別位 RS-232和 RS-485
2-1 RS-232
RS-232 的信號准位元乃是參考地線而來的,如圖,傳輸端參考接地端 1 來傳送資料;
接收端則參考接地端 2還原出傳送端的信號準備。
傳送端 接收端
地電壓
接地端 1 接地端 2
由圖可知,由於兩個接地端准位不一定一樣,而且很容易受到干擾,所以信號在 RS-232
線路傳輸時,很容易產生錯誤。
2-2 RS-485
RS-485的信號傳輸方式如圖。
傳送端 接收端
地電壓
接地點 1 接地點 2
RS-485 的信號將被傳送出去時會分成正負兩條線路,當到達接收端後,在將信號相減
還原成原來的信號;如果將原始的信號表示成(DT),而被分成的信號分別標示成(D+)
及(D-),則 DT= (D+)-(D-)
同樣地,接收端在接收到信號後,也依據上式還原成原來的樣子。如果線路受到干擾,兩條
線路的信號分別為(D+)+Noise (D-)+Noise。接收端還原信號為
(DT)= [(D+)+Noise]-[ (D-)+Noise]
與先前結果一樣,所以 RS-485可以有效的防止雜訊的干擾。
二、Visual Basic基本概念
1、 VB 是微軟的視窗軟體,提供了很多介面成員。物件、屬性、事件、方法就是四個
重要的介面。
2、 VB常用控制項。
2-1標籤控制項
此控制項專用於顯示文字,數位用,顯示如圖
2-2 按鈕控制項
此控制項使用率很高,提供一個供系統用戶操作用的按鈕
2-3 計時器控制項
此控制項的最大作用在於固定的時間內會執行所設置的程式碼一次。
VB提供了大量的控制項,在此不一一敍述。
三、MScomm控制項
要完成 VB與 PLC等串列設備的通信,MScomm控制項是一個很好用的控制項。
所以在此有必要對MScomm控制項做一個較為詳細的說明
1、 MScomm非標準控制項,要手動添加,步驟如下:
1-1選擇功能表的【工程】
1-2 選擇【部件】
1-3 在彈出的對話方塊中做如圖選擇
1-4在部件選項卡就會出現MScomm控制項
2、基本屬性
電腦通信口選擇
通信參數設置
PortOpen
通信口是否打開
Input
收到的字元
Output
發送的字元
四、MODBUS ASCII。
Modbus 分為ASCII和RTU兩種,ASCII採用的格式和
格式,並僅對使用的功能碼進行說明,更多的資訊,請參看
1、通信格式
STX 起始字元 “:"(3AH)
ADR 1
ADR 0
通信地址(站號)採用 2個字
CMD 1
CMD 0
功能碼。採用 2個字元
DATA(0)
DATA(1)
……….
DATA(n-1)
資料項目
LRC CHK 1
LRC CHK 0
LRC 校驗碼。採用 2個字元
END 1
END 0
結束字元。採用 2個字元。
END 1 = CR(0DH),END 0
2、 LRC演算法
ADR H+CMD H+DATA H,然後取 2的補數
3、功能碼
05, 寫入線圈
格式 例子(十六進位)
字頭 3A
站號 01
功能碼 05
地址 05
00
寫入狀態 FF
00
LRC 碼 F6
06, 寫入單個字寄存器
格式 例子(十六進
字頭 3A
起
读
L
校驗相對簡單,本文採用ASCII
協定的詳細說明
元
= LF(0AH)
01, 讀線圈狀態
位)
格式 例子 (十六进制)
字头 3A
站号 01
功能码 01
始地址 06
14
取数目 00
25
RC 码 BF
站號 01
功能碼 06
寄存器位址 06
00
寫入的資料 12
34
LRC 校驗碼 AD
五、VB與 PLC通信的實現
1、控制要求
a、控制 PLC的啟動、停止,並顯示運行狀態(綠色為運行,紅色為停止)
b、能夠用交替型按鈕控制 Y0,Y1。並用指示燈顯示 Y0,Y1狀態。(綠色為運行,紅色為
停止)
c、能夠對 D256,D512兩個寄存器進行數值寫入的操作
2、思路:
a、PLC 啟動停止的標誌位元為 M1072,查 DVP 協議,知道位址為 H0C30。按功能碼
01操作
b、同樣 Y0,Y1的地址分別為 H0500,H0501。寫入 FF00為 ON,0000為 OFF,按功能
碼 05操作
c、D256,D512位址分別為 H1100,H1200,按功能碼 06操作即可
3、VB介面的設計如圖
用按鈕控制 PLC的啟動停止,Y0,Y1的 ON/OFF以及 D256,D512寫完資料的發送
用 Shape元件做指示燈,表示 PLC的運行狀態和 Y的狀態。
用 timer元件不停的讀取M1072的狀態,以判斷 PLC的運行情況
用MScomm控制項實現 PC與 PLC的通信
4、代碼構成
1)、LRC演算法校驗的實現
Public Function LRC(str As String) As String
c = 0
l = Len(str)
For c = c + 1 To l
c_data = Mid$(str, c, 2)
d_lrc = d_lrc + Val("&H" + c_data)
c = c + 1
Next c
If d_lrc > &HFF Then
d_lrc = d_lrc Mod &H100
End If
h_lrc = Hex(&HFF - d_lrc + 1)
If Len(h_lrc) > 2 Then
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
End If
LRC = h_lrc
End Function
2)、運行的一開始就判斷 PLC的狀態,並設置標誌位元
'初次運行打開串口,並顯示 PLC運行狀態
Private Sub Form_Load()
Dim s1 As String
Dim s2 As String
Dim s22 As String
Dim s3 As String
Dim s4 As String
MSComm1.PortOpen = True
s2 = "01010C300001"
s22 = LRC(s2)
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
MSComm1.Output = s1
s3 = MSComm1.Input
s4 = Mid$(s, 6, 8)
If s4 = "0C30FF00" Then
plc = 1 'PLC為運行標誌
Else
plc = 0 'PLC為停止標誌
End If
End Sub
3)、下面一段為用指示燈表示 PLC的運行狀態
Private Sub Timer5_Timer()
Dim s1 As String
Dim s2 As String
Dim s22
Dim s3 As String
Dim s4 As String
s2 = "01010C300001"
s22 = LRC(s2)
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
MSComm1.Output = s1
s3 = MSComm1.Input
s4 = Mid$(s3, 8, 2)
If s4 = "31" Then
plc = 1 'PLC為運行標誌
Else: If s4 = "30" Then plc = 0 'PLC為停止標誌
End If
If plc = 1 Then
Label2.Caption = "PLC正在運行......"
Shape1.FillColor = RGB(0, 255, 0) 'green
Else
Label2.Caption = "PLC已經停止"
Shape1.FillColor = RGB(255, 0, 0) 'red
End If
End Sub
4)、PLC的啟動與停止
'啟動 PLC
Private Sub start_Click()
Dim strout As String
Timer5.Enabled = False
str = "00050C30FF00" 'M1072 為 PLC啟動停止標誌位元。查地址表,M1072為 OC30.FF00
為置 ON,0000為置 OFF
'以上都是固定格式,要牢記
LRCC = LRC(str) '計算 str的 lrc校驗碼
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲傳送之資料。13為 D,10為 A
MSComm1.Output = strout
Timer5.Enabled = True
End Sub
'停止 PLC
Private Sub stop_Click()
Dim strout As String
Timer5.Enabled = False
str = "00050C300000"
LRCC = LRC(str)
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)
MSComm1.Output = strout
Timer5.Enabled = True
End Sub
Y0,Y1的 ON/OFF與 PLC啟動/停止的控制方式相同,指示燈的表示方式也相同。D256,
D512資料寫入的操作類似,此處由於篇幅的關係,就不把代碼全部列出。
六、總結
由於 VB 語言使用的簡易型,為眾多工程技術人員與串列設備的通信提供了很大的方
便。
台達 PLC 採用標準的 MODBUS 協定,這一協定目前廣為流行,為大家所熟知,也為
大家最終實現通信提供了簡化的平臺。
由於台達所有的機電產品都支援MODBUS協定,所以,掌握了 VB與 PLC通信過程,
也就等於掌握了 PC與台達所有機電產品的通信。
本文的形成由於時間的關係,也由於筆者的能力所限,難免有不祥之處,也希望大家能
夠不吝指出。
參考文獻
《VB與 RS-232通信實例》
《VB6從入門到精通》
《DVP-PLC應用技術手冊》
《DVP-Protocal》
2005-12-18