【问题标题】:Connecting to multiple clients TCP modbus连接到多个客户端 TCP modbus
【发布时间】:2015-04-20 05:50:47
【问题描述】:

我有一个使用我在计算机上运行的 python 脚本的工作 modbus 服务器和客户端,它通过使用 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 的连接,我该怎么做?

【问题讨论】:

  • 如果你调用socket connect ...你是客户端...他们是服务器...如果你调用socket接受你是服务器并且他们是客户端... .所以我很好奇其他ip的服务器或客户端?
  • 抱歉,打错了,其他ip是服务器。我使用 python 运行的是客户端。

标签: python tcp modbus


【解决方案1】:
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

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

【讨论】:

  • 我已经用我的 python 脚本中使用的代码更新了我的问题,当我尝试向单个 PLC 发送消息时出现问题。我如何定义哪个 PLC 应该对消息采取行动?那是奴隶号码重要的地方吗?
猜你喜欢
  • 2013-02-17
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2014-03-02
  • 1970-01-01
  • 2017-09-12
相关资源
最近更新 更多