1、要考虑PLC第次发送数据要做一定的延时(0.1~0.5秒做测试),否则粘包是不可避免的。
关闭重连的方法不可取。
2、这里用doevents不可取Private Sub Timer1_Timer() '定时器定时触发事件
if Winsock_1.State =7 then call send_Signal
End Sub3、接收数据使用winsock事件,winsock发送数据可以小于1秒。
关闭重连的方法不可取。
2、这里用doevents不可取Private Sub Timer1_Timer() '定时器定时触发事件
if Winsock_1.State =7 then call send_Signal
End Sub3、接收数据使用winsock事件,winsock发送数据可以小于1秒。
1、要考虑PLC编程时每次发送数据间要做一定的延时(0.1~0.5秒做测试,在PLC里大概就是多做几次空操作),否则vb收到粘包是不可避免的。
你说的这个延时是放在VB代码里还是PLC程序里?具体是放在什么步骤与什么步骤之间?
谢谢~
Private Sub Form_Load()
'建立TCP链接
Winsock1.ConnectEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'有PLC来的数据了
'PLC要是1ms次发送了10字节,而协议是1字节1个包,..而且这里vb程序处理1次数据到达要用1秒,并且一次接受所有字节..就是粘包了,因为接受缓冲区里面有超过1个包(1字节)的数据
'粘包了就要自己拆分包
'否则要求PLC发送1字节后,延迟一定时间,等PC计算机处理这个1字节的数据End Sub
(2) 当在Winsock1_DataArrival事件中,接收到PLC的数据,并且PC机处理完所有的该次的数据后,将标记flag置为TRUE;
(3) 在定时器中,当flag为TRUE的时候发送协议给PLC,并且发送完成后再将flag置为FALSE;
某个内部字记录设备的某个参数,该参数可能过10ms改变一下,也可能过20ms改变一次;我需要把该内部字一天当中所有的数据都记录并保存下来;如果按照我最原始的方法(参见最上面的帖子),该内部字采集到的数据有可能在连续两次会发生错误!
可否给一个例子?这种方式如果我每隔不到0.5秒去采集一次数据,两次之间的数据会不会发生重叠一类的问题?高手帮忙指条路啊,谢谢了~~