I'm using modbus protocol to communicate with my program. When slave gets signal from master on register 1 he starts function
def main():
#Create the server
server = modbus_rtu.RtuServer(serial.Serial(PORT))
server.start()
slave_1 = server.add_slave(1)
slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 2)
slave_1.set_values('0', 0, 0) #set value on the begining
slave_1.set_values('0', 1, 0) #set value on the begining
while True:
register_1 = slave_1.get_values('0', 0, 1)
register_2 = slave_1.get_values('0', 1, 1)
if register_1[0] == 1:
time.sleep(3)
slave_1.set_values('0', 0, 1)
time.sleep(3)
slave_1.set_values('0', 0, 0)
I want stop this function when I change state on register 2 for few seconds, after this time it should come back to place when it was stopped. It should be immediately, so I can not check this is normal "if". It should by similar like interrupt in arduino.
Question: How can I create this interrupt?
Unfortunatelly I don't know any similar python function like interrupt in arduino.
If you want to stop this program use:
if register_1[0] == 1:
for i in range(300): #for 300ms
if register_2[0] == 1:
__STOP_PROGRAM__
time.sleep(0.1) #sleep 1ms
slave_1.set_values('0', 0, 1)
for i in range(300): #for 300ms
if register_2[0] == 1:
__STOP_PROGRAM__
time.sleep(0.1) #sleep 1ms
slave_1.set_values('0', 0, 0)
It's not immediate, but if you need more exact, you can increase a value in range()
and decrease a value in time.sleep()