回顾一下当时踩的坑:我计划是把采集电量这个任务也挂到NAS上(DS218+)。于是把采集数据的RS485(Modbus-RUT转)USB连接到NAS的USB口,发现调用不到,一查NAS上有4个串口,然后没有一个能用,找商家一问:Nas的USB口只支持存储设备,其他不支持。结果很明显,不能用NAS跑采集任务。
于是我在某宝上找到了一款RS485串口服务器,它天生就是为了填平我踩的这个坑:因为它能完成Modbus-RTU到Modbus-TCP透明转换,实现通过网络方式读取串口设备数据。
经过2天的等待今天收到RS485串口服务器,跟我认识的USB有线网卡好像呢
使用RS485串口服务器定制的特殊的连接线,连接方式简单易懂。从上图即可看出来,需要注意的地方就是连接线C端,它是RS485的引线用于连接串口设备的,根据标识连接对应接口即可(分别是地线、VCC、A、B),当时店家说RS串口服务器要单独供电,12V1A。我直接就用串口设备供电(5V)也能正常跑就不管单独供电了,如果通讯距离远可能还是要单独供电。
连线接好之后,打开店家发过来的工具软件,找到IP地址,就可以用WEB的方式管理了。
在WEB管理后台主要就是配置了串口设置的波特率和协议两项参数。
后面就是敲代码了。
import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as md
master = mt.TcpMaster("RS485串口服务器IP地址", 8899)#这个商口是默认端口
master.set_timeout(1.0)
result= master.execute(slave=1, function_code=md.READ_INPUT_REGISTERS, starting_address=0,quantity_of_x=9)
slave:从机编号,用1即可,如果有多个就是搞清楚
function_code:Modbus-TCP功能码
starting_address:要读取的寄存器地址
quantity_of_x:要读取寄存器个数
就三行代码就已经读出结果,但是结果需要二次加工才能使用的。否则数据就会不正确。
未完待续……