for device in devices.keys(): future = executor.submit(read_write, device, 0, 1234) futures.append(future) # 获取所有操作的结果 for future in concurrent.futures.as_completed(futures): result = future.result() print(result)读写多个寄存器怎么改
时间: 2024-03-22 14:39:24 浏览: 52
Azkaban报错-azkaban.executor.ExecutorManagerException: No active executors found
如果需要写入多个保持寄存器,可以将`read_write()`函数中的写操作修改为:
```
output_values = [1234, 5678, 9012, ...] # 需要写入的多个保持寄存器的值
result = master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 0, output_value=output_values)
```
这里将保持寄存器地址指定为0,表示从地址0开始写入多个保持寄存器的值。`WRITE_MULTIPLE_REGISTERS`功能码可以同时写入多个保持寄存器,`output_value`参数需要传入一个包含多个值的列表,列表中的值和保持寄存器的数量要一一对应。写入操作完成后,可以再执行读操作,读取刚刚写入的多个保持寄存器的值。
如果需要读取连续的多个保持寄存器,可以在读操作中指定读取的寄存器数量。例如,如果需要读取从地址1000开始的10个保持寄存器,可以将`read_write()`函数中的读操作修改为:
```
result = master.execute(1, cst.READ_HOLDING_REGISTERS, 1000, 10)
```
这里将保持寄存器地址指定为1000,数量指定为10。这样,Modbus Master会将从地址1000开始的10个保持寄存器的值读取出来,并返回一个包含这些值的列表。在`as_completed()`方法中,我们可以通过下标来访问每个操作的结果,例如:
```
for future in concurrent.futures.as_completed(futures):
result = future.result()
print(result[0]) # 输出第一个设备的结果
print(result[1]) # 输出第二个设备的结果
# ...
```
这里假设每个设备都只读取了一个寄存器,因此`result`是一个长度为1的列表。如果读取了多个寄存器,则`result`将是一个包含多个值的列表。
阅读全文