一、本架构是仪表通过串口连接串口服务器,串口协议是485,串口服务器网口通过网线接入终端电脑,串口服务器的网口IP地址必须同终端电脑的IP一致,在终端电脑编辑python脚本语言如下:
import modbus_tk.modbus_rtu as rtu
import socket
import time
print(__name__)
def test_reading_data(HOST,PORT,CODE,R_TYPE,N):
"""
HOST ip 地址,
PORT 端口,
CODE 读取指令,含节点号,
R_TYPE 读取数据的类型, "I46745" 整数,4字节
N 重复读取次数
"""
print("HOST : ",HOST)
print("PORT : ",PORT)
print("CODE : ",CODE)
print("TYPE : ",R_TYPE,"\n")
R_T = [int(x) for x in R_TYPE[2:]]
request = rtu.RtuQuery()
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((HOST,PORT))
i = 0
req_data = request.build_request(CODE[1:],CODE[0])
while i < N:
s.sendall(req_data)
r = s.recv(1000)
#print(i,' ',r)
R_T = [4,5,6,7]
Result = 0
for x in R_T:
Result = Result*256 + r[x-1]
#print(" Result : ",Result)
l = [int(x) for x in r]
print(i,l,Result,"T: ",R_T)
R_T = [5,4,7,6]
Result = 0
for x in R_T:
Result = Result*256 + r[x-1]
#print(" Result : ",Result)
l = [int(x) for x in r]
print(i,l,Result,"T: ",R_T)
R_T = [6,7,4,5]
Result = 0
for x in R_T:
Result = Result*256 + r[x-1]
#print(" Result : ",Result)
l = [int(x) for x in r]
print(i,l,Result,"T: ",R_T)
R_T = [7,6,5,4]
Result = 0
for x in R_T:
Result = Result*256 + r[x-1]
#print(" Result : ",Result)
l = [int(x) for x in r]
print(i,l,Result,"T: ",R_T)
i += 1
time.sleep(2)
s.close()
finally:
del(s)
del(request)
if __name__ == "__main__":
test_reading_data("串口服务器的IP",8000,bytes([1,3,0,8,0,2]),"I46745",2)
注释:1,3,0,8,0,2 对应modbus的01,03,00,08,00,02 01是仪表的ID,03是modbus的功能码,00 08是存储区域的开始,00 02是读取的长度。