基于Vb的控制台达plc实例
时间:2025-04-25
时间:2025-04-25
Vb上位机控制台达plc实例
最近有点空余时间,用vb做了一个程序,目的是控制台达的plc,采集数据,最终能达到像触摸屏控制plc一样的效果,产品接近完成,与大家分享一下。
收到后的数据有待处理。 界面部分:
程序部分:
Private Sub Form_Load() Combo1.AddItem "COM1" Combo1.AddItem "COM2" Combo1.AddItem "COM3" Combo1.AddItem "COM4" Combo1.AddItem "COM5" Combo1.AddItem "COM6" Combo1.AddItem "COM7" Combo1.AddItem "COM8" Combo1.AddItem "COM9" Combo1.AddItem "COM10" Combo1.AddItem "COM11"
Combo1.AddItem "COM12" Combo1.AddItem "COM13" Combo1.AddItem "COM14" Combo1.AddItem "COM15" Combo1.AddItem "COM16" Combo2.AddItem "115200" Combo2.AddItem "57600" Combo2.AddItem "38400" Combo2.AddItem "19200" Combo2.AddItem "9600" Combo2.AddItem "4800" Combo3.AddItem "无None" Combo3.AddItem "奇Odd" Combo3.AddItem "偶Even" Combo4.AddItem "6" Combo4.AddItem "7" Combo4.AddItem "8" Combo5.AddItem "1" Combo5.AddItem "2" Combo6.AddItem "RTU" Combo1.ListIndex = 2
'If MSComm1.PortOpen = True Then ' MSComm1.PortOpen = False 'Else 'End If
With MSComm1
.CommPort = Combo1.ListIndex + 1 端口号Integer
.InputMode = 1 进制类型数据
.InputLen = 8 取所有数据(8个字节为一组!!)
.OutBufferSize = 512 发送缓冲区的大小,以字符为单位 Integer .InBufferSize = 1024 收缓冲区的大小,以字符为单位 Integer .InBufferCount = 0 .OutBufferCount = 0 .SThreshold = 0 .RThreshold = 1 OnComm()事件 End With End Sub
'CommPort设置并返回通信 '设置接受数据的类型是二 '一次性从接收缓冲区中读 'OutBufferSize 设置并返回512
'InBufferSize 设置并返回接 '清空接收缓冲区 '清空发送缓冲区
'不触发OnComm()事件 '接收1个字节数据触发 1024
Private Sub Combo1_Click()
If MSComm1.PortOpen = True Then '如果串口打开先关闭后再进行其他操作 MSComm1.PortOpen = False End If
http://www.77cn.com.cnmPort = Combo1.ListIndex + 1 '读取com口号 Command1.Caption = "打开串口" '按钮文字改变 Shape1.FillColor = &H808080 '灯颜色改变 End Sub
Private Sub Command1_Click() If Combo3 = "无None" Then
MSComm1.Settings = Str(Combo2) + "N" + Str(Combo4) + Str(Combo5) 'Settings设置并返回波特率?校验位?数据位?停止位 String "9600,N,8,1" ElseIf Combo3 = "奇Odd" Then
MSComm1.Settings = Str(Combo2) + "O" + Str(Combo4) + Str(Combo5) ElseIf Combo3 = "偶Even" Then
MSComm1.Settings = Str(Combo2) + "E" + Str(Combo4) + Str(Combo5) End If
Label9.Caption = MSComm1.Settings & " com" & Combo1.ListIndex + 1 & " " & MSComm1.PortOpen
On Error GoTo uerror '发现错误跳转到错误处理 If Command1.Caption = "关闭串口" Then MSComm1.PortOpen = False
Command1.Caption = "打开串口" '按钮文字改变 Shape1.FillColor = &H808080 '灯颜色改变 Else
MSComm1.PortOpen = True
Command1.Caption = "关闭串口" 'PortOpen设置并返回端口状态,也可以用于打开和关闭串口 Boolean True Shape1.FillColor = &HFF End If Exit Sub uerror:
msg$ = "无效端口号" '错误显示 Title$ = "串口调试助手"
x = MsgBox(msg$, 49, Title$) '48标示显示警告图标 End Sub
Private Sub Form_Resize() 'If Form1.Width <= 12000 Then 'Form1.Width = 12000 'End If
'If Form1.Height <= 6750 Then
'Form1.Height = 6750 'End If
'Label2.Left = Form1.Width - 1200 'Label1.Top = 50 'Label2.Top = 50 End Sub
''''''''''LRC校验(源码,源码+校验码) Sub lrc(a1 As String, b1 As String)
Dim stra As String, ml As String, Lrcbyte As String Dim checkadd%, AscLrc%, lrc%, zhi1% For i = 1 To (Len(a1) \ 2)
stra = Val("&H" & CStr(Mid(a1, i * 2 - 1, 2))) checkadd = checkadd + Val(stra) Next i
AscLrc = checkadd Mod &H100 '取255的余数 lrc = (&HFF - AscLrc) + 1 '取二次补
If lrc < 16 Then '此段程序是判断Hex(lrc)是否是一位数, Lrcbyte = "0" + CStr(Hex(lrc)) '如果是的话,前面加0;否则不加零 Else
Lrcbyte = CStr(Hex(lrc)) End If
b1 = a1 & Lrcbyte
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Timer1_Timer() time1 = Time date1 = Date now1 = Now
Label1.Caption = Year(Date) & "年" & Month(Date) & "月" & Day(Date) & "日" & vbNewLine Label2.Caption = Hour(Time) & "时" & Minute(Time) & "分" & Second(Time) & "秒" & vbNewLine
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub MSComm1_OnComm()
Dim BytReceived() As Byte, strdata$ Dim strBuff As String
Dim i%
Select Case http://www.77cn.com.cnmEvent '事件发生 Case comEvReceive …… 此处隐藏:6797字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:第十届全国多媒体课件大赛的通知