|
@@ -4,9 +4,9 @@ from colorama import Fore
|
|
|
import time
|
|
|
import os
|
|
|
|
|
|
-reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120,'uptime': 0x0800,
|
|
|
- 'in_norm': 0x0122,'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804,
|
|
|
- 'in_deb_start': 0x124}
|
|
|
+reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120, 'in_norm': 0x0122, 'in_deb_start': 0x124,
|
|
|
+ 'out_cur': 0x0200,
|
|
|
+ 'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804, 'uptime': 0x0800,}
|
|
|
|
|
|
|
|
|
class IO_Module(Modbus):
|
|
@@ -116,9 +116,26 @@ class IO_Module(Modbus):
|
|
|
data = self.read_holding_registers(reg_table['in_deb_start'] + input - 1, 1)
|
|
|
return data[0]
|
|
|
|
|
|
- def set_devounce_channel(self, input, val):
|
|
|
+ def set_debounce_channel(self, input, val):
|
|
|
self.write_holding_register(reg_table['in_deb_start'] + input - 1, val)
|
|
|
|
|
|
+ # 0x0200 - текущее состояние выходов в обычно режиме
|
|
|
+ def get_output(self):
|
|
|
+ data = self.read_holding_registers(reg_table['out_cur'], 1)
|
|
|
+ return format(data[0], '08b')
|
|
|
+
|
|
|
+ # 0x0200 - текущее состояние выходов в обычно режиме
|
|
|
+ def set_outputs(self, val):
|
|
|
+ self.write_holding_register(reg_table['out_cur'], val)
|
|
|
+
|
|
|
+ def set_output(self, output, val):
|
|
|
+ ret = self.read_holding_registers(reg_table['out_cur'], 1)
|
|
|
+ if val == 1:
|
|
|
+ data = ret[0] | (0b1 << (output - 1))
|
|
|
+ else:
|
|
|
+ data = ret[0] & ~(0b1 << (output - 1))
|
|
|
+ self.set_outputs(data)
|
|
|
+
|
|
|
def get_uptime(self):
|
|
|
return self.read_uint32_holding(reg_table['uptime'])
|
|
|
|
|
@@ -154,7 +171,8 @@ def main():
|
|
|
# print('Inputs mode [bit field] :', Fore.GREEN + dev.get_inputs_mode())
|
|
|
|
|
|
for i in range(1, 9):
|
|
|
- dev.set_devounce_channel(i, 50 + i)
|
|
|
+ dev.set_debounce_channel(i, 50 + i)
|
|
|
+ dev.set_output(i, 0)
|
|
|
|
|
|
# Установить нормальное состояние входов
|
|
|
# dev.set_inputs_norm_state(0b00110101)
|
|
@@ -173,7 +191,23 @@ def main():
|
|
|
# Значение счетчиков
|
|
|
data = dev.get_inputs_counters()
|
|
|
print('Inputs counters :', Fore.GREEN + ' | '.join(str(el) for el in data))
|
|
|
-
|
|
|
+
|
|
|
+ # Текущее состояние выходов в обычном режиме
|
|
|
+ print('Outputs norm [bit field] :', Fore.GREEN + dev.get_output())
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ # # Для проверки выходов в обычном режиме
|
|
|
+ # for i in range(1, 9):
|
|
|
+ # dev.set_output(i, 1)
|
|
|
+ # print('Outputs norm [bit field] :', Fore.GREEN + dev.get_output())
|
|
|
+ # time.sleep(0.1)
|
|
|
+
|
|
|
+ # for i in range(1, 9):
|
|
|
+ # dev.set_output(i, 0)
|
|
|
+ # print('Outputs norm [bit field] :', Fore.GREEN + dev.get_output())
|
|
|
+ # time.sleep(0.1)
|
|
|
+
|
|
|
# break
|
|
|
time.sleep(1)
|
|
|
|