代码优化:怎么用winsock实现对PLC数据的"实时"采集

代码优化:如何用winsock实现对PLC数据的实时采集?请教高手:如何用winsock实现对PLC数据的实时采集,也

代码优化:如何用winsock实现对PLC数据的"实时"采集?
请教高手:
如何用winsock实现对PLC数据的"实时"采集,也就是当PLC中被监控的某个量一发生变化就立即(或者延迟0.5秒以下)发送回本地电脑并且保存???

用Winsock采集PLC数据的代码如下(定时器间隔为1秒):

VB code
Private Sub Timer1_Timer()    '定时器定时触发事件                  Winsock_1.Close     Winsock_1.Connect         Do         DoEvents         Loop Until Winsock_1.State = sckConnected         call send_Signal    End SubPrivate Sub send_Signal()  '向PLC发送指令过程    Dim sendstr(12) As Byte        '*************************    '将通讯协议写入sendstr中    '*************************        Dim aStr As String    Dim i, j As Integer        For i = 0 To 11        aStr = aStr & Chr(sendstr(i))    Next i        Winsock_1.SendData aStr      End SubPrivate Sub Winsock_1_DataArrival(ByVal bytesTotal As Long)                 '****************************        'winsock返回数据事件    '返回数据,判断正确无误后保存到本地电脑        '****************************    End Sub


现在问题如下:
(1) 在定时器事件中必须每次将winsock先关闭掉再重新连接,否则返回来的数据会和上一次返回来的数据重叠;
(2) 用doevents方法有时会导致连接需要花费很长时间,可能需要几十秒才能连上;
(3) 由于用winsock采集数据,定时器的时间不宜设置过短,一般需要设置1秒以上发送接收一次;

所以:
请教高手,如何用winsock方法来实现PLC"实时"的数据采集,也就是尽量的缩短接收发送一次的时间间隔,最好小于0.5秒??

[解决办法]
1、要考虑PLC第次发送数据要做一定的延时(0.1~0.5秒做测试),否则粘包是不可避免的。
关闭重连的方法不可取。
2、这里用doevents不可取
VB code
Private Sub Timer1_Timer()    '定时器定时触发事件      if Winsock_1.State =7 then  call send_Signal    End Sub3、接收数据使用winsock事件,winsock发送数据可以小于1秒。
[解决办法]
PLC还支持TCP/IP啊?