现有项目是利用c#的socket与plc进行实时通讯,plc有两种通讯模式——常规采集&高频采集。

其中常规采集大概在10ms左右发送一次数据,高频采集大概在2ms左右发送一次数据。

现有代码框架:在与plc进行连接时,通过建立委托并创建线程的方式,来循环读取数据

//创建委托
public delegate void plc_hd_receive(byte[] recv_data);

public plc_hd_receive plc_recv_delegate_hd;

//给委托绑定方法
plc_recv_delegate_hd = new plc_hd_receive(plc_receive_callback_hd);

//创建线程 plc_thread_hd = new thread(new threadstart(plc_readthread_hd));
plc_thread_hd.isbackground = true; plc_thread_hd.start();
//在线程内调用委托 this.begininvoke(this.plc_recv_delegate_hd, new object[] { recv_buffer_hd });

 只要连接plc成功后,会一直在后台读取plc发送来的数据,并解析数据

现有问题:实时性和数据完整性不够,有些操作会导致socket断掉连接。

计划:改写现有代码框架,加深对通讯的理解,和对实时数据流的处理。