import snap7 from concurrent.futures import ThreadPoolExecutor # 定义连接S7-1200的函数 def connect_plc(ip, port): plc = snap7.client.Client() plc.connect(ip, port) return plc # 定义读取S7-1200数据的函数 def read_data(plc): data = plc.read_area(snap7.types.Areas.DB, 1, 0, 10) return data # 定义S7-1200的IP地址和端口号 plc_ips = ['192.168.0.10', '192.168.0.20'] plc_ports = [102, 102] # 创建线程池,并连接到S7-1200 with ThreadPoolExecutor(max_workers=len(plc_ips)) as executor: plcs = list(executor.map(connect_plc, plc_ips, plc_ports)) # 读取S7-1200的数据 with ThreadPoolExecutor(max_workers=len(plcs)) as executor: data_list = list(executor.map(read_data, plcs)) # 输出读取的数据 for i, data in enumerate(data_list): print('Data from PLC', i+1, ':', data) # 关闭连接 for plc in plcs: plc.disconnect() 报Message=connect() missing 1 required positional argument: 'slot' Source= StackTrace:
时间: 2024-03-21 19:43:29 浏览: 87
flask-executor:向 Flask 添加 concurrent.futures 支持
根据您提供的代码,connect_plc函数确实缺少一个slot参数,导致连接S7-1200时发生错误。您可以将connect_plc函数修改为以下代码:
```python
def connect_plc(ip, port, slot=0):
plc = snap7.client.Client()
plc.connect(ip, rack=0, slot=slot, port=port)
return plc
```
在这个修改后的代码中,我们为connect_plc函数添加了一个默认值为0的slot参数,并将其传递给connect函数。如果您的S7-1200配置需要使用不同的slot号,可以在调用connect_plc函数时显式地指定它。
希望这可以帮助您解决问题。
阅读全文