基于VB的台达PLC与监控计算机的串行通信实现(二)
2)功能码
4.2 VB与PLC通信的实现
以下举例说明现场设备与PLC通信的实现。
1)控制要求:控制PLC的起动、停止,并显示运行状态(绿色为运行,红色为停止);能够用交替型按钮控制Y0,Y1,并用指示灯显示Y0,Y1状态(绿色为运行,红色为停止);能够对D256,D512两个寄存器进行数值写入的操作。
2)实现思路:PLC起动停止的标志位为M1072,查DVP协议,知道地址为H0C30,按功能码01操作; 同样Y0,Y1的地址分别为H0500,H0501。写入FF00为ON,0000为OFF,按功能码05操作;D256,D512地址分别为H1100,H1200,按功能码06操作即可。
3)VB接口的设计如图10所示。
图10 监控程序界面
用按钮控制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的状态并设置标志位
Rem 初次运行打开串口,并显示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 Rem PLC为运行标志
Else
plc = 0 Rem 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 Rem PLC为运行标志
Else: If s4 = "30" Then plc = 0 Rem PLC为停止标志
End If
If plc = 1 Then
Label2.Caption = "PLC正在运行......"
Shape1.FillColor = RGB(0, 255, 0) Rem green
Else
Label2.Caption = "PLC已经停止"
Shape1.FillColor = RGB(255, 0, 0) Rem red
End If
End Sub
(4) PLC的起动与停止
Rem 起动PLC
Private Sub start_Click()
Dim strout As String
Timer5.Enabled = False
str = "00050C30FF00"
Rem M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置ON,0000为置OFF。
Rem 以上都是固定格式,要牢记。
LRCC = LRC(str) Rem 计算 str的lrc校验码。
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) Rem 欲传送之数据。13为D,10为A
MSComm1.Output = strout
Timer5.Enabled = True
End Sub
Rem 停止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数据写入的操作类似,限于篇幅其它代码就不再列出了。
5 结束语
VB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。
4.2 VB与PLC通信的实现
以下举例说明现场设备与PLC通信的实现。
1)控制要求:控制PLC的起动、停止,并显示运行状态(绿色为运行,红色为停止);能够用交替型按钮控制Y0,Y1,并用指示灯显示Y0,Y1状态(绿色为运行,红色为停止);能够对D256,D512两个寄存器进行数值写入的操作。
2)实现思路:PLC起动停止的标志位为M1072,查DVP协议,知道地址为H0C30,按功能码01操作; 同样Y0,Y1的地址分别为H0500,H0501。写入FF00为ON,0000为OFF,按功能码05操作;D256,D512地址分别为H1100,H1200,按功能码06操作即可。
3)VB接口的设计如图10所示。
图10 监控程序界面
用按钮控制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的状态并设置标志位
Rem 初次运行打开串口,并显示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 Rem PLC为运行标志
Else
plc = 0 Rem 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 Rem PLC为运行标志
Else: If s4 = "30" Then plc = 0 Rem PLC为停止标志
End If
If plc = 1 Then
Label2.Caption = "PLC正在运行......"
Shape1.FillColor = RGB(0, 255, 0) Rem green
Else
Label2.Caption = "PLC已经停止"
Shape1.FillColor = RGB(255, 0, 0) Rem red
End If
End Sub
(4) PLC的起动与停止
Rem 起动PLC
Private Sub start_Click()
Dim strout As String
Timer5.Enabled = False
str = "00050C30FF00"
Rem M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置ON,0000为置OFF。
Rem 以上都是固定格式,要牢记。
LRCC = LRC(str) Rem 计算 str的lrc校验码。
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) Rem 欲传送之数据。13为D,10为A
MSComm1.Output = strout
Timer5.Enabled = True
End Sub
Rem 停止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数据写入的操作类似,限于篇幅其它代码就不再列出了。
5 结束语
VB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。
文章版权归西部工控xbgk所有,未经许可不得转载。