连接到多个客户端TCP modbus

时间:2015-02-19 01:04:10

标签: python tcp modbus

我有一个工作的modbus服务器和客户端使用我在ocmputer上运行的python脚本,它通过使用socket.connect与客户端的ip和端口进行连接,并允许交换modbus请求。

我不知道如何将它应用于多个ip。我希望我的程序要做的是连接到10个不同的modbus客户端并查询它们以获取信息。

是否可以调用多个socket.connect来打开多个流?如果是这样,当每个客户端需要一个唯一的从属ID时,它的功能是否类似于串行连接?

编辑:

#sets all the standard values
PLC1_IP = '10.0.238.34'
PLC1_Port = 504
PLC2_IP = '10.0.188.34'
PLC2_Port = 505


try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except (socket.error, msg):
    print("Unable to create socket. " + msg[1])
    sys.exit()
#connects to the plc using the port and ip    
s.connect((PLC1_IP, PLC2_Port))

PDU = struct.pack(">BHH", Function_Write, coil_number, Coil_On)
MBPA = struct.pack('>HHHB', 100, PLC1_Protocall, PLC1_Length, PLC1_Unit)
s.send(MBPA+PDU)
s.recv(1024)


#insert main code here

#s.close

这是我正在使用的代码,用于打开单个连接并发送我的modbus数据包。如果我想打开与第二个PLC的连接,我该怎么做?

1 个答案:

答案 0 :(得分:0)

def make_socket(ip):
    s= socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.connecnt((ip,port))
    return s

my_clients = [make_socket(ip) for ip in ip_addresses]

for client in my_clients:
    client.send("Hello")
    print client.recv(100) # or whatever

也许就是这样......很难看到你的任何代码......