485通讯速率疑惑
做一个课题,打算由上位机通过485总线和多路下位机传感器模块连接进行数据采集,下位机是由一个直接输出数字信号的传感器通过SPI总线与单片机通讯,单片机再通过485总线将数据传给上位机,现在传感器的输出数据是100HZ,也就是10ms采集一个数据,我想问的是假如现在有20个下位机模块,要想将所采集的数据都实时的通过485传给上位机,是不是必须保证在10ms内,单片机要通过SPI把传感器数据读取出来,并且上位机要将20个模块全部轮询一遍,将各个模块的数据都采集上来,如果是这样的话,那485的通讯速率岂不是要特别特别大,而上位机我用的是485转232接口,请高手解惑!!
[解决办法]
1)传感器只有100Hz通信速率,按电气安全降额你最好用到50Hz,这样传感器与单片机通信会比较稳定,不能用到它的满额。
2)若单片机与上位机之间的通信,采用485方式建议在单片机侧硬件增加通信隔离电路,即加2个光藕提高通信抗干扰。一般工业现场,常用的BPS为9600,4800,太高没意义且光耦成本也会增加,满足9600的光藕只要0.3RMB。
仅一点经验之谈,希望对你有帮助,
[解决办法]
其实可以采用分组的方法轮番查询,比如说10个传感器一组,500ms查询第一组(10个),接下来的500ms查询第二组(10个),接下来的500ms又查询第一组···。并不一定一次要采集完20个传感器的数据啊,感觉这样也慢不到哪去。我做过用上位机115200的波特率一秒查询完50台机子的数据,每台机子返回79字节(79*8*50=31600个位,理论花费时间为31600/115200=0.27秒)
[解决办法]
看你的实时性,如10ms,一看实时性也不是很高,可以单个模块一下子发20个过来。200MS收一次。这样相当于10ms收一次数据。实时性比较好控制。0.5ms可能不是太好搞。如果有模块掉了的话,会影响下一个模块的读取。