12 063
правки
(Новая страница: «Now all inputs operate in switch mode with locking, and a short press on the button connected to input 0 will turn off all relays.») |
(Новая страница: «Leaving input 1 closed, turn off and turn on the relay power: after 20 minutes, relays 1, 2 and 3 will turn on again.») |
||
(не показано 20 промежуточных версий этого же участника) | |||
Строка 162: | Строка 162: | ||
Now all inputs operate in switch mode with locking, and a short press on the button connected to input 0 will turn off all relays. | Now all inputs operate in switch mode with locking, and a short press on the button connected to input 0 will turn off all relays. | ||
=== | === Disable input / relay communication === | ||
To disable the interaction of inputs and relays (for example, if we want to control the relay only through the controller rules engine), write the value 0 in register 5, and in registers 9, 10, 11, 12, 13, 14 write the value 3: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight> | ||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3</syntaxhighlight> | ||
Now clicking on the button or toggle switch will change the relay status you can manage only programmatically via Modbus. | |||
In this case, the function of the emergency input 0 is saved: a short press on the button connected to the input 0 will turn off all the relays. | |||
If we want to disable and input 0, then write the value 3 in register 16: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 3</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 3</syntaxhighlight> | ||
=== | === Using the Mapping matrix === | ||
More complex scenarios of interaction between inputs and relays can be implemented using a Mapping matrix. | |||
To use the Mapping matrix, write the value 0 in the holding register 5: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 4 </syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 4 </syntaxhighlight> | ||
And registers the settings of the interaction of inputs/outputs — value 4: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r 9 4 4 4 4 4 4 </syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r 9 4 4 4 4 4 4 </syntaxhighlight> | ||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4</syntaxhighlight> | ||
Mapping mapping-the matrix is filled with zeros. If you are unsure and want to erase the entire matrix, write 0 in each of the 64 holding registers starting with 384: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight> | ||
==== | ====Input 0 turns all relays on and off ==== | ||
Program the matrix in such a way that the input 0, working in the mode of the button (switch without fixation), sequentially turns on and off all the relays of the module when closed. | |||
To do this, we turn to the register map of the mapping matrix and see that the input 0 corresponds to the registers 440 — 447. And for interaction with inputs 1 — 6 registers 440 — 445 are responsible. | |||
We want the input to work as a switch without locking and triggered when pressed (on the rising edge), and when opened, nothing would happen. The state of all relays must be inverted each time they are pressed. This corresponds to a combination of 11 00: (12, 0x0C) — Change the output state when shorted: | |||
[[File:Mm_1100.png|frameless|270px]]<br> | [[File:Mm_1100.png|frameless|270px]]<br> | ||
Write in the registers 440 — 445 the value of 12: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r440 12 12 12 12 12 12</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r440 12 12 12 12 12 12</syntaxhighlight> | ||
Let's check the operation: at the first circuit of input 0 all relays are switched on, at the second — all relays are switched off. | |||
==== | = = = = = Inverted switch with locking === | ||
Set up the inputs so that when closed inputs relay would be disabled, and open -- is included. | |||
For this closing input (rising edge) the corresponding output shall be switched off (01), and upon opening the entrance (back front) — included (10). This corresponds to the value 6: [[File:Mm_0110.png|frameless|270px]]<br> | |||
In the matrix, the desired interaction registers input 1 — output 1, input 2 — output 2, etc. are located diagonally. These are registers 384, 393, 402, 411, 420, 429. They need to write the value 6: | |||
<syntaxhighlight lang="bash">for i in 384 393 402 411 420 429; do modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r$i 6; done</syntaxhighlight> | <syntaxhighlight lang="bash">for i in 384 393 402 411 420 429; do modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r$i 6; done</syntaxhighlight> | ||
Note: the relay state changes only when the input state changes. | |||
==== | ==== Leak sensor ==== | ||
Let the leak sensor be connected to the '''input 1''', and the '''relays 1 and 2''' control the ball valve actuators. '''Relay 3''' controls the warning lamp or buzzer. When wetting the leakage sensor '''relay 1 and relay 2''' are closed and the actuators close the ball valves. '''Relay 3''' closes and switches on the buzzer. '''Input 2''' will be programmed to reset the alarm and open the ball valves. | |||
Clear the mapping matrix: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight> | ||
Apply in our case, the mode when the input state is repeated every 20 minutes, for this write in the register 9 value 5 (control in accordance with the mapping matrix, after 20 minutes to re-simulate the input state), and the rest — the value 4 (control in accordance with the mapping matrix). | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 5 4 4 4 4 4</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 5 4 4 4 4 4</syntaxhighlight> | ||
To enter the leakage sensor (input 1) use the mode 1000 (8) — turn on when the circuit. [[File:Mm_1000.png|frameless|270px]]<br> To enter the reset button (input 2) use mode 0100 (4) — turn off when closing. [[File:Mm_0100.png|frameless|270px]]<br> | |||
On the map mapping-registers we determine that to enter 1, you need to write the value 8 in the registers 384, 385, 386, and to enter 2 — write the value 4 in the registers 392, 393, 394: | |||
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 8 8 8</syntaxhighlight> | <syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 8 8 8</syntaxhighlight> | ||
Строка 230: | Строка 230: | ||
Checking: close input 1 and iGND and leave it closed. Relays 1, 2 and 3 must be switched on. Then we close and open the input 2 — all three relay relays are off. Wait 20 minutes. Since input 1 remains closed (leakage is not eliminated), relays 1, 2 and 3 will switch back on after 20 minutes. | |||
Leaving input 1 closed, turn off and turn on the relay power: after 20 minutes, relays 1, 2 and 3 will turn on again. |
правки