Slide 86
Slide 86 text
from pymodbus.datastore import ModbusServerContext, ModbusSlaveContext, ModbusSparseDataBlock
from pymodbus.server.asynchronous import StartTcpServer
from datetime import datetime
def boolfmt(label: str, boolvar: bool):
return f"[ {label} ]" if boolvar else "[ ]"
class MyDataBlock(ModbusSparseDataBlock):
"""A custom data "storage" class that logs all incoming requests"""
def setValues(self, address, values):
super().setValues(address, values)
now = datetime.now().strftime("%H:%M:%S.%f")
g, y, r, h, f, w = [boolfmt(k, v) for k, v in zip("GYRHFW", values)]
print(f"{now} {g} {y} {r} {w} {f} {h}")
def main():
block = MyDataBlock([0]*100) # storing 100 words
store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block)
context = ModbusServerContext(slaves=store)
StartTcpServer(context, address=('0.0.0.0', 502))
if __name__ == "__main__":
main()