台达plc与vb通信问题,怎样读出寄存器值、?
PrivateSubCommand3_Click()Dims1AsStringDims2AsStringDims22AsStringDimTA1AsStringDimta...
Private Sub Command3_Click()Dim s1 As StringDim s2 As StringDim s22 As StringDim TA1 As StringDim ta2 As StringMSComm1.OutBufferCount = 0 '清空发送缓冲区MSComm1.InputMode = 0 '设置数据格式为字符形式MSComm1.RTSEnable = True '串口通讯使能MSComm1.InBufferCount = 0 '接受缓冲区等待被取走的字符数MSComm1.InputLen = 0 '每次从接受缓冲区读却的字符个数,=0接受全部s2 = "000312000001"s22 = LRC(s2)s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)MSComm1.Output = s1ta2$ = MSComm1.InputTA1 = Mid$(ta2, 8, 2)End Sub奇偶校验函数已确认没问题,为什么ta2读不出值,有时会在mscomm1.output=s1报错:串口编程错误,求解????????
展开
2个回答
展开全部
output语句之后紧接着就读input,感觉中间应该有延时等待(边等边读,同时判断缓冲区中数据是否满足要求。满足要求则退出等候处理数据,超时则报错退出)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
迪凯特科技(北京)有限公司
2023-07-28 广告
2023-07-28 广告
单片机串口通信的原理是利用单片机的串口通信模块,通过把数据转化为一位一位的用时序方式传送数据,实现单片机与外部设备之间的数据通信。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以...
点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
展开全部
我觉得很可能是你的命令串写的不对。一般是:
2字节(地址)+ 2字节(命令) + 4字节(数据地址) + 4字节(数据长度) + 2字节(LRC)
但是你的S2居然是11个字符,怎么想怎么不对……
另外,你刚刚Output了,立刻就Input,你确定PLC来得及反馈?
最佳办法是使用事件驱动,写OnComm事件;
其次可以While循环读取数据缓冲数(InBufferCount),确认反馈数据到达后再Input;
最不济也得死循环等个两秒吧……
2字节(地址)+ 2字节(命令) + 4字节(数据地址) + 4字节(数据长度) + 2字节(LRC)
但是你的S2居然是11个字符,怎么想怎么不对……
另外,你刚刚Output了,立刻就Input,你确定PLC来得及反馈?
最佳办法是使用事件驱动,写OnComm事件;
其次可以While循环读取数据缓冲数(InBufferCount),确认反馈数据到达后再Input;
最不济也得死循环等个两秒吧……
追问
s2是十二个字符啊,通过s1的计算出来就是14个字符啦,写入的是s1,用了循环还是不行,感觉是缓冲区没有数据似的,读出的是空串
追答
可以用串口调试助手试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询