VB作为上位机与三菱FXPLC下位机相连 20
这是个搞自控专业的问题.以下是VB作为上位机与三菱FXPLC下位机相连时,读出X10-X17的状态:DimppppAsBooleanPrivateFunctionSumC...
这是个搞自控专业的问题.
以下是VB作为上位机与三菱FXPLC下位机相连时,读出X10-X17的状态:
Dim pppp As Boolean
Private Function SumChk(Dats$) As String
'16进制求和校验码程序
Dim i&
Dim CHK&
For i = 1 To Len(Dats)
CHK = CHK + Asc(Mid(Dats, i, 1))
Next i
SumChk = Right(Hex$(CHK), 2)
End Function
Private Sub Command1_Click()
Dim sd As String
Button = 1
If MSComm1.PortOpen = False Then '打开串口
MSComm1.PortOpen = True
End If
MSComm1.InputLen = 0 '串口数据接收缓冲区初始化
sd = "00FFBR0X001008"
MSComm1.Output = Chr(5) + sd + SumChk(sd)
'向PLC发送的读取/写入数据命令字符串
WT: If MSComm1.InBufferCount < 16 Then GoTo WT '等待数据
RD = MSComm1.Input
PD = Mid(RD, 1, 5)
JS = Chr(6) + "00FF"
MSComm1.Output = JS
RD = Mid(RD, 6, 8)
Print RD
MSComm1.PortOpen = False
End Sub
可是我无法编出读取任何一位的状态,并作出动作.
我的要求是:读出任何一位(X11或X10)的状态,如若为1,则显示一个MSGBOX
如若为0,则显示另一个MSBOX.
BAIDU的人气挺高的,望哪位大侠指教一二.
DMAX22CN,兄台,你的编程我不能够完全领悟,
能否搞的详细点,因为这个东西里面的字符意义太专业.
另外我还有个不能解决的问题,如何接收这个输入信号,即不受
窗口和按钮的限制.程序打开即能开始接收. 这个功能是我准备做个历史报警记录用的,
我已会用ACCESS连接,但是碰到上面的问题 展开
以下是VB作为上位机与三菱FXPLC下位机相连时,读出X10-X17的状态:
Dim pppp As Boolean
Private Function SumChk(Dats$) As String
'16进制求和校验码程序
Dim i&
Dim CHK&
For i = 1 To Len(Dats)
CHK = CHK + Asc(Mid(Dats, i, 1))
Next i
SumChk = Right(Hex$(CHK), 2)
End Function
Private Sub Command1_Click()
Dim sd As String
Button = 1
If MSComm1.PortOpen = False Then '打开串口
MSComm1.PortOpen = True
End If
MSComm1.InputLen = 0 '串口数据接收缓冲区初始化
sd = "00FFBR0X001008"
MSComm1.Output = Chr(5) + sd + SumChk(sd)
'向PLC发送的读取/写入数据命令字符串
WT: If MSComm1.InBufferCount < 16 Then GoTo WT '等待数据
RD = MSComm1.Input
PD = Mid(RD, 1, 5)
JS = Chr(6) + "00FF"
MSComm1.Output = JS
RD = Mid(RD, 6, 8)
Print RD
MSComm1.PortOpen = False
End Sub
可是我无法编出读取任何一位的状态,并作出动作.
我的要求是:读出任何一位(X11或X10)的状态,如若为1,则显示一个MSGBOX
如若为0,则显示另一个MSBOX.
BAIDU的人气挺高的,望哪位大侠指教一二.
DMAX22CN,兄台,你的编程我不能够完全领悟,
能否搞的详细点,因为这个东西里面的字符意义太专业.
另外我还有个不能解决的问题,如何接收这个输入信号,即不受
窗口和按钮的限制.程序打开即能开始接收. 这个功能是我准备做个历史报警记录用的,
我已会用ACCESS连接,但是碰到上面的问题 展开
1个回答
展开全部
这个函数读整数a的第n位,返回0或1。
Public Function ReadBit(ByVal a As Long, ByVal n As Long) As Long
st = 2 ^ n
ReadBit = (a And st) / st
End Function
你2次收到的字符串PD、RD只要Clng转换一下,都可调此函数,就能此洞读出PD、RD的任意1位了。
最后按读出的0或1来MsgBox,试试看啦。
补充:
你的意思应该是对这个RD做处理吧。文本类型的RD可直接用MID(RD,n,1)获得第n位。也可以把RD转成长整罩慧形用ReadBit读。
要在程序启动后自动监控数据,如果时间精度要求不高可以设个定时器控件,调command1_click.如果要非常精确森闷枯地监控,请使用mscommn的中断方式。
Public Function ReadBit(ByVal a As Long, ByVal n As Long) As Long
st = 2 ^ n
ReadBit = (a And st) / st
End Function
你2次收到的字符串PD、RD只要Clng转换一下,都可调此函数,就能此洞读出PD、RD的任意1位了。
最后按读出的0或1来MsgBox,试试看啦。
补充:
你的意思应该是对这个RD做处理吧。文本类型的RD可直接用MID(RD,n,1)获得第n位。也可以把RD转成长整罩慧形用ReadBit读。
要在程序启动后自动监控数据,如果时间精度要求不高可以设个定时器控件,调command1_click.如果要非常精确森闷枯地监控,请使用mscommn的中断方式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询