|
@@ -5,7 +5,7 @@ import time
|
|
|
import os
|
|
|
|
|
|
reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120, 'in_norm': 0x0122, 'in_deb_start': 0x124,
|
|
|
- 'out_cur': 0x0200,
|
|
|
+ 'out_cur': 0x0200, 'out_mode': 0x0202,
|
|
|
'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804, 'uptime': 0x0800,}
|
|
|
|
|
|
|
|
@@ -120,7 +120,7 @@ class IO_Module(Modbus):
|
|
|
self.write_holding_register(reg_table['in_deb_start'] + input - 1, val)
|
|
|
|
|
|
# 0x0200 - текущее состояние выходов в обычно режиме
|
|
|
- def get_output(self):
|
|
|
+ def get_outputs(self):
|
|
|
data = self.read_holding_registers(reg_table['out_cur'], 1)
|
|
|
return format(data[0], '08b')
|
|
|
|
|
@@ -136,6 +136,22 @@ class IO_Module(Modbus):
|
|
|
data = ret[0] & ~(0b1 << (output - 1))
|
|
|
self.set_outputs(data)
|
|
|
|
|
|
+ # 0x0202 - режим работы выходов; 0 - обычный, 1 - ШИМ
|
|
|
+ def get_outputs_mode(self):
|
|
|
+ data = self.read_holding_registers(reg_table['out_mode'], 1)
|
|
|
+ return format(data[0], '08b')
|
|
|
+
|
|
|
+ def set_outputs_mode(self, val):
|
|
|
+ self.write_holding_register(reg_table['out_mode'], val)
|
|
|
+
|
|
|
+ def set_output_mode(self, output, val):
|
|
|
+ ret = self.read_holding_registers(reg_table['out_mode'], 1)
|
|
|
+ if val == 1:
|
|
|
+ data = ret[0] | (0b1 << (output - 1))
|
|
|
+ else:
|
|
|
+ data = ret[0] & ~(0b1 << (output - 1))
|
|
|
+ self.set_outputs_mode(data)
|
|
|
+
|
|
|
def get_uptime(self):
|
|
|
return self.read_uint32_holding(reg_table['uptime'])
|
|
|
|
|
@@ -173,7 +189,10 @@ def main():
|
|
|
for i in range(1, 9):
|
|
|
dev.set_debounce_channel(i, 50 + i)
|
|
|
dev.set_output(i, 0)
|
|
|
-
|
|
|
+
|
|
|
+ # Установить 1-ый выход в режим PWM
|
|
|
+ dev.set_output_mode(1, 1)
|
|
|
+
|
|
|
# Установить нормальное состояние входов
|
|
|
# dev.set_inputs_norm_state(0b00110101)
|
|
|
|
|
@@ -193,9 +212,9 @@ def main():
|
|
|
print('Inputs counters :', Fore.GREEN + ' | '.join(str(el) for el in data))
|
|
|
|
|
|
# Текущее состояние выходов в обычном режиме
|
|
|
- print('Outputs norm [bit field] :', Fore.GREEN + dev.get_output())
|
|
|
-
|
|
|
+ print('Outputs norm [bit field] :', Fore.GREEN + dev.get_outputs())
|
|
|
|
|
|
+
|
|
|
|
|
|
# # Для проверки выходов в обычном режиме
|
|
|
# for i in range(1, 9):
|
|
@@ -208,6 +227,17 @@ def main():
|
|
|
# print('Outputs norm [bit field] :', Fore.GREEN + dev.get_output())
|
|
|
# time.sleep(0.1)
|
|
|
|
|
|
+ # # Режим работы выходов
|
|
|
+ # for i in range(1, 9):
|
|
|
+ # dev.set_output_mode(i, 1)
|
|
|
+ # print('Outputs mode [bit field] :', Fore.GREEN + dev.get_outputs_mode())
|
|
|
+ # time.sleep(0.1)
|
|
|
+
|
|
|
+ # for i in range(1, 9):
|
|
|
+ # dev.set_output_mode(i, 0)
|
|
|
+ # print('Outputs mode [bit field] :', Fore.GREEN + dev.get_outputs_mode())
|
|
|
+ # time.sleep(0.1)
|
|
|
+
|
|
|
# break
|
|
|
time.sleep(1)
|
|
|
|