日期:2014-05-18  浏览次数:20788 次

485通讯缓冲区如何创建?
485通过232接电脑主机,从站最多允许到254台,每个从站均有可能发送数据到电脑主机,然后电脑主机进行应答。从站发过来的数据有源地址,电脑主机程序可以根据源地址识别具体是哪个从站过来的数据。对这方面不熟的,建议先看看485通讯的机制。
  现在问题来了,在电脑主机中的接收程序收到第一字节的数据后,System.IO.Ports.SerialPort就产生了一个事件,由于无法判定从站具体数据包长度,因此主机只能做一个固定的延时,然后就读取缓冲区数据,因而,有可能一次性没有把从站的数据包读完,也就是从站的一个数据包,在主机中可能会被识别为2个数据包,而第二个数据包是没有源地址的。请问如何建立缓冲机制?要求能够不把不同从站的数据混在一起的。

  感觉好像无所适从,因为过程中数据是有可能丢失的,例如硬件故障,在485的发送机制来说,只要从站能够进入发送状态,发送数据是没问题的,从站会把数据通道的占用一直到一个完整的数据包发送结束才会释放控制权。




------解决方案--------------------
弱弱的问下 485 和232 都代表什么 求普及
------解决方案--------------------
SerialPort.DataReceived之“管收不管埋”---这个正是你需要的解决方案
------解决方案--------------------
我遇到的情况通常是这样的,看能不能供你参考:
子站的通讯协议中定义一个截止位和通讯长度,比如子站发送的数据中,有一个字节表示后面的数据串长度有多少字节,另外在最后跟着一个截止位,表示发送结束。这样的话,主站在接收时,不管接收几次,都预先知道子站要发送的数据长度了。
------解决方案--------------------
探讨
SerialPort.DataReceived之“管收不管埋”---这个正是你需要的解决方案