C# serialport读取松下PLC的数据,用的是松下Mewtocol通讯協议,我在timer_tick事件中有发送没有接收数据据,因要实时读取数据,timer设置为1毫秒,数据接收时不全,代码如下:
timer设置为100毫秒,可以正确有发送没有接收数据据,泹PLC的数据变化快,100毫秒无法准确反应所有数据,不知如何来解决这个问题?
------解决方案-------------------- 我有个严重的怀疑你每1毫秒发送一次请求的意义在哪里?
若传输速率是1200波特(其中有一个起始位, 8 个数据位, 2 个停止位)那么,每秒所能传送的字符数是1200/(1+8+1+2)= 100个
假设1个报文20个字符
你的通信极限也就昰200毫秒1个报文。
你的通信极限在 40 毫秒 1 个报文
如果是半双工这个效率还要低很多。
你可以根据你的波特率调整请求的间隔再快就没什么意义了------解决方案--------------------lz的理解有误。 serialport的接受数据事件是实时的一旦有数据到达就会触发此事件。因此不需要你去定时1ms读而应当单独定义一个timer,每1ms给plc写数据
另外你有发送没有接收数据据的处理可以优化。
//将读取到的bytes存储在ch数组中
我们通常是使用消息队列直接把数据缓存入队列
而另一个线程负责处理队列。这样实际类似流水线操作上个工序只管上个工序滴,下个工序也只管从总线上拿工件
至于这个中间肯定會有时间差不过无所谓了要差都差了,也就是数据是连续滴但是都总体延后了一点(这一点问题不太大,对计算机的运行速度来说基本是可以承受滴)
自己写的一个串口接收发送的小程序向串口发送命令是应该有返回信息的
可是写的程序运行没有任何返回信息,求解
开始的时候测试的是串口那段一直有数据向PC端发送这样程序是可以接收到数据的,可是改为串口端接收到命令再返回数据的这个之后就怎么也收不到数据了向串口发送数据的方法应该沒错吧。