首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

请问一个点对多的串口通讯有关问题

2012-03-11 
请教一个点对多的串口通讯问题。我用MCU写了一个RS232串口通讯程序,转成RS485信号后可以被上位机(PC机)接收

请教一个点对多的串口通讯问题。
我用MCU写了一个RS232串口通讯程序,转成RS485信号后可以被上位机(PC机)接收。

但是我不知道怎么样才能实现PC机上的软件可以接收到来自不同下位机的485协议数据?

直接将所有的MCU传过来的485信号接到一起显然不行。要实现这种点对多的通讯方式硬件和软件上分别需要做哪些设置啊?

是不是还应该有一个地址信号需要通过MCU传过去供PC机用以识别?

谢谢!

[解决办法]
首先呢,要建立协议帧的概念,协议帧就是一组字节数据,这组字节数据在串口传送时两个字节间的空白时间间隔小于一个给定值(如1ms,时间我编的,就这个意思)。帧与帧之间的时间间隔大于某一个时间(比如10ms,只要比上面的那个时间高上一个数量级以上就行了,当然也可以不用时间做帧间隔)。这样你就能区分出帧了。在帧内部分域,比如可以将地址用一个字节表示,放在帧中的第一个域中。这样不太的设备有不同的帧。

485串口是半双工协议,因此一般用一主多从的方式。主机发起查询,从机响应。主机在查询帧中给出从机地址。符合地址要求的从机给出响应。当然也可用时分的方式由从机主动发送参数,这是需要主机调整时间以避免冲突。

建议LZ看一些MODBUS协议吧,如果你觉得MODBUS协议复杂,就根据MODBUS协议画一个简单的协议就行了。
[解决办法]
1.如果你想实现多机与PC机通信可以采用串口通信的多机通信电路,MCU也要相应做些寄存器设置。如果简单想实现多机通信的话,你可以在串口电平转换芯片那里通过不同的端口进行电平转换,转换RS485后的线接在一起就行,比如MAX232有两个端口可以转换,输入端你就接入不同的MCU,输出端你接在一起,一起送到PC机。

2.但这样PC机收到数据后就不知是哪个MCU送来的,就需要上面大家所说的地址问题,你可以在发数据时发送一个特殊的数据,如0xff,0x55之类的,表示数据头,然后数据头后面就跟着一个地址数据,1,2,3...。这就是一个简单的协议的,每次PC机收到判断是不是数据头,是的话后面那个字节就表示地址。反之就全是数据。

热点排行