Voor mijn project gebruik ik een raspberry pi (master) en een aantal arduino slaves.
Ik vanuit de master de slaves bepaalde functies laten uitvoeren. Om te communiceren gebruik ik modbus.
Momenteel kan de raspberry pi via het modbus protocol lezen en schrijven in de registers van de arduino.
Gezien modbus voorgedefinieerde functies heeft, ben ik op zoek naar de juiste manier om de slave een actie uit te laten voeren.
Mijn huidige (relevante) implementatie op de slave is als volgt :
Vanaf de pi kan ik dus in register 1 schrijven, wat zorgt dat er code getriggerd word.
Bovenstaande code gebruikt modbus functie code 1 om een single coil te schrijven.
Mbv functie 16 kan ik paramters verzenden.
Welke modbus functie is bedoeld om de slave een actie uit te laten voeren?
Een register blijven pollen voelt een beetje vreemd.
Ik vanuit de master de slaves bepaalde functies laten uitvoeren. Om te communiceren gebruik ik modbus.
Momenteel kan de raspberry pi via het modbus protocol lezen en schrijven in de registers van de arduino.
Gezien modbus voorgedefinieerde functies heeft, ben ik op zoek naar de juiste manier om de slave een actie uit te laten voeren.
Mijn huidige (relevante) implementatie op de slave is als volgt :
code:
1
2
3
4
5
6
7
8
| #include <SimpleModbusSlave.h> void loop() { modbus_update(); if(holdingRegs[1] != 0) { //Action received run_function() holdingRegs[1] =0 } } |
Vanaf de pi kan ik dus in register 1 schrijven, wat zorgt dat er code getriggerd word.
Python:
1
2
3
4
| import minimalmodbus instrument = minimalmodbus.Instrument(....) instrument.mode = minimalmodbus.MODE_RTU instrument.write_register(1,1) |
Bovenstaande code gebruikt modbus functie code 1 om een single coil te schrijven.
Mbv functie 16 kan ik paramters verzenden.
Welke modbus functie is bedoeld om de slave een actie uit te laten voeren?
Een register blijven pollen voelt een beetje vreemd.