
寻求一个VB与西门子S7_200PLC的通讯程序 100
示例程序也可以,主要是VB来控制并得到反馈,协议自定就可以,急用!!!邮箱wangchao815724@163.com我想知道的是PLC程序...
示例程序也可以,主要是VB来控制并得到反馈,协议自定就可以,急用!!!邮箱wangchao815724@163.com
我想知道的是PLC程序 展开
我想知道的是PLC程序 展开
3个回答
展开全部
Dim rcvlenth
Dim rcv() As Byte
Dim s1(8) As Integer
Dim s2(2) As Integer
Dim s3(8) As Integer
Dim s4(6) As Integer
Dim q1 As Integer
Dim q2 As Integer
'初始化
Private Sub Form_Load()
With MSComm1
.CommPort = 1
.Settings = "9600,n8,1"
.InputMode = comInputModeBinary
.RThreshold = 1
.InputLen = 0
.OutBufferCount = 0
.InBufferCount = 0
End With
If Not MSComm1.PortOpen Then
MSComm1.PortOpen = True
End If
End Sub
Private Sub Timer1_Timer()
Call send '发送
End Sub
Private Sub Check1_Click(Index As Integer)
q2 = 0
For i = 1 To 0 Step -1
q2 = q2 + Check1(i).Value * 2 ^ i
Next i
End Sub
Private Sub Check2_Click(Index As Integer)
q1 = 0
For i = 7 To 0 Step -1
q1 = q1 + Check2(i).Value * 2 ^ i
Next i
End Sub
Private Sub send()
'If q1 = 255 Then Exit Sub
rcvlenth = -1
sdata = Array(1, 3, 0, 0) '数据内容
sdata(0) = q1
sdata(1) = q2
Dim nByte() As Byte
ReDim nByte(UBound(sdata) + 5) As Byte '报文长度:数据长度+4
nByte(0) = 0 '起始字符
nByte(1) = UBound(sdata) + 1
fcs = nByte(1) '异或校验码
For i = 2 To UBound(sdata) + 2
nByte(i) = sdata(i - 2)
fcs = fcs Xor nByte(i)
Next
nByte(i) = fcs
nByte(i + 1) = &HFF '结束字符
MSComm1.Output = nByte '发送
End Sub
'中断接收
Private Sub MSComm1_OnComm()
Dim rcvtemp() As Byte '接收缓冲
ReDim Preserve rcv(200) As Byte '接收数组
Text1 = ""
Select Case MSComm1.CommEvent
Case comEvReceive
rcvtemp = MSComm1.Input '读串口到缓冲区
For i = LBound(rcvtemp) To UBound(rcvtemp) '字符串到数组
rcvlenth = rcvlenth + 1
rcv(rcvlenth) = rcvtemp(i)
Next i
ReDim Preserve rcv(rcvlenth) As Byte
End Select
For i = LBound(rcvtemp) To UBound(rcvtemp) '在Text1中显示
Text1 = Text1 & Str$(rcv(i))
Next i
'rcv(0) 起始 00, rcv(1) 字节数, rcv(2) Q0状态, rcv(3) Q1状态 <>255,
'rcv(4) I0状态, rcv(5) I1状态, rcv(6) 校验, rcv(7) 结束 255,
' Call dtob1
Call dtob2
For i = 0 To 7
If s1(i) = 1 Then Shape1(i).FillColor = vbRed Else Shape1(i).FillColor = vbBlue
Next i
For i = 0 To 1
If s2(i) = 1 Then Shape2(i).FillColor = vbRed Else Shape2(i).FillColor = vbBlue
Next i
Call dtob3
Call dtob4
For i = 0 To 7
If s3(i) = 1 Then Shape3(i).FillColor = vbRed Else Shape3(i).FillColor = vbBlue
Next i
For i = 0 To 5
If s4(i) = 1 Then Shape4(i).FillColor = vbRed Else Shape4(i).FillColor = vbBlue
Next i
End Sub
'十进制转二进制
Private Sub dtob1()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(2)
For k = 0 To 7
s1(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s1(i) = r
i = i + 1
Loop Until m = 0
End Sub
'十进制转二进制
Private Sub dtob2()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(3)
For k = 0 To 1
s2(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s2(i) = r
i = i + 1
Loop Until m = 0
End Sub
'十进制转二进制
Private Sub dtob3()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(4)
For k = 0 To 7
s3(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s3(i) = r
i = i + 1
Loop Until m = 0
End Sub
'十进制转二进制
Private Sub dtob4()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(5)
For k = 0 To 5
s4(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s4(i) = r
i = i + 1
Loop Until m = 0
End Sub
'关闭程序
Private Sub Cmdquit_Click()
Unload Me
End Sub
以上就是VB--S7-200的VB源代码,这个PLC内无需写代码的。需望对你有用
Dim rcv() As Byte
Dim s1(8) As Integer
Dim s2(2) As Integer
Dim s3(8) As Integer
Dim s4(6) As Integer
Dim q1 As Integer
Dim q2 As Integer
'初始化
Private Sub Form_Load()
With MSComm1
.CommPort = 1
.Settings = "9600,n8,1"
.InputMode = comInputModeBinary
.RThreshold = 1
.InputLen = 0
.OutBufferCount = 0
.InBufferCount = 0
End With
If Not MSComm1.PortOpen Then
MSComm1.PortOpen = True
End If
End Sub
Private Sub Timer1_Timer()
Call send '发送
End Sub
Private Sub Check1_Click(Index As Integer)
q2 = 0
For i = 1 To 0 Step -1
q2 = q2 + Check1(i).Value * 2 ^ i
Next i
End Sub
Private Sub Check2_Click(Index As Integer)
q1 = 0
For i = 7 To 0 Step -1
q1 = q1 + Check2(i).Value * 2 ^ i
Next i
End Sub
Private Sub send()
'If q1 = 255 Then Exit Sub
rcvlenth = -1
sdata = Array(1, 3, 0, 0) '数据内容
sdata(0) = q1
sdata(1) = q2
Dim nByte() As Byte
ReDim nByte(UBound(sdata) + 5) As Byte '报文长度:数据长度+4
nByte(0) = 0 '起始字符
nByte(1) = UBound(sdata) + 1
fcs = nByte(1) '异或校验码
For i = 2 To UBound(sdata) + 2
nByte(i) = sdata(i - 2)
fcs = fcs Xor nByte(i)
Next
nByte(i) = fcs
nByte(i + 1) = &HFF '结束字符
MSComm1.Output = nByte '发送
End Sub
'中断接收
Private Sub MSComm1_OnComm()
Dim rcvtemp() As Byte '接收缓冲
ReDim Preserve rcv(200) As Byte '接收数组
Text1 = ""
Select Case MSComm1.CommEvent
Case comEvReceive
rcvtemp = MSComm1.Input '读串口到缓冲区
For i = LBound(rcvtemp) To UBound(rcvtemp) '字符串到数组
rcvlenth = rcvlenth + 1
rcv(rcvlenth) = rcvtemp(i)
Next i
ReDim Preserve rcv(rcvlenth) As Byte
End Select
For i = LBound(rcvtemp) To UBound(rcvtemp) '在Text1中显示
Text1 = Text1 & Str$(rcv(i))
Next i
'rcv(0) 起始 00, rcv(1) 字节数, rcv(2) Q0状态, rcv(3) Q1状态 <>255,
'rcv(4) I0状态, rcv(5) I1状态, rcv(6) 校验, rcv(7) 结束 255,
' Call dtob1
Call dtob2
For i = 0 To 7
If s1(i) = 1 Then Shape1(i).FillColor = vbRed Else Shape1(i).FillColor = vbBlue
Next i
For i = 0 To 1
If s2(i) = 1 Then Shape2(i).FillColor = vbRed Else Shape2(i).FillColor = vbBlue
Next i
Call dtob3
Call dtob4
For i = 0 To 7
If s3(i) = 1 Then Shape3(i).FillColor = vbRed Else Shape3(i).FillColor = vbBlue
Next i
For i = 0 To 5
If s4(i) = 1 Then Shape4(i).FillColor = vbRed Else Shape4(i).FillColor = vbBlue
Next i
End Sub
'十进制转二进制
Private Sub dtob1()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(2)
For k = 0 To 7
s1(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s1(i) = r
i = i + 1
Loop Until m = 0
End Sub
'十进制转二进制
Private Sub dtob2()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(3)
For k = 0 To 1
s2(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s2(i) = r
i = i + 1
Loop Until m = 0
End Sub
'十进制转二进制
Private Sub dtob3()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(4)
For k = 0 To 7
s3(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s3(i) = r
i = i + 1
Loop Until m = 0
End Sub
'十进制转二进制
Private Sub dtob4()
Dim q As Integer
Dim m As Integer
Dim r As Integer
Dim i As Integer
q = rcv(5)
For k = 0 To 5
s4(k) = 0
Next k
Do
m = q \ 2
r = q Mod 2
q = m
s4(i) = r
i = i + 1
Loop Until m = 0
End Sub
'关闭程序
Private Sub Cmdquit_Click()
Unload Me
End Sub
以上就是VB--S7-200的VB源代码,这个PLC内无需写代码的。需望对你有用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2023-06-12 广告
单片机编程是指使用单片机编程语言,如C语言,来编写单片机的程序代码,以控制单片机的行为。这种技术在电子工程、计算机科学和电子通信等领域中被广泛应用。单片机编程的主要任务是设计和实现单片机的程序,包括定义单片机的指令系统、编写程序代码、处理器...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
更多追问追答
追问
我想要一个PLC程序,不是测试串口的软件,麻烦你能再给一个吗
追答
给出的代码仅提供LZ参考,LZ可以依据西门子S7_200PLC说明书的通信协议修改后调试.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
随你便
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询