|
@@ -5,7 +5,8 @@ import time
|
|
|
import os
|
|
|
|
|
|
reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120,'uptime': 0x0800,
|
|
|
- 'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804}
|
|
|
+ 'in_norm': 0x0122,'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804,
|
|
|
+ 'in_deb_start': 0x124}
|
|
|
|
|
|
|
|
|
class IO_Module(Modbus):
|
|
@@ -93,6 +94,31 @@ class IO_Module(Modbus):
|
|
|
def set_inputs_mode(self, val):
|
|
|
self.write_holding_register(reg_table['in_mode'], val)
|
|
|
|
|
|
+ #
|
|
|
+ def set_input_mode(self, input, val):
|
|
|
+ ret = self.read_holding_registers(reg_table['in_mode'], 1)
|
|
|
+ if val == 1:
|
|
|
+ data = ret[0] | (0b1 << (input - 1))
|
|
|
+ else:
|
|
|
+ data = ret[0] & ~(0b1 << (input - 1))
|
|
|
+ self.set_inputs_mode(data)
|
|
|
+
|
|
|
+ # 0x0122 - нормальное состояние входов
|
|
|
+ def get_inputs_norm_state(self):
|
|
|
+ data = self.read_holding_registers(reg_table['in_norm'], 1)
|
|
|
+ return format(data[0], '08b')
|
|
|
+
|
|
|
+ def set_inputs_norm_state(self, val):
|
|
|
+ self.write_holding_register(reg_table['in_norm'], val)
|
|
|
+
|
|
|
+ # 0x0124 - время антидребезга (ms)
|
|
|
+ def get_debounce_channel(self, input):
|
|
|
+ data = self.read_holding_registers(reg_table['in_deb_start'] + input - 1, 1)
|
|
|
+ return data[0]
|
|
|
+
|
|
|
+ def set_devounce_channel(self, input, val):
|
|
|
+ self.write_holding_register(reg_table['in_deb_start'] + input - 1, val)
|
|
|
+
|
|
|
def get_uptime(self):
|
|
|
return self.read_uint32_holding(reg_table['uptime'])
|
|
|
|
|
@@ -121,19 +147,47 @@ def main():
|
|
|
# unix_time = dev.get_rtc()
|
|
|
# print(f'RTC: {time.ctime(unix_time)}. Unix time stamp: {unix_time}')
|
|
|
|
|
|
- # while True:
|
|
|
- for i in range(10):
|
|
|
+
|
|
|
+
|
|
|
+ for i in range(1, 9):
|
|
|
+ dev.set_input_mode(i, 1)
|
|
|
+ # 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_inputs_norm_state(0b00110101)
|
|
|
+
|
|
|
+ while True:
|
|
|
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
|
|
|
- print('Inputs values [bit field :', Fore.GREEN + dev.get_inputs_bit())
|
|
|
- print('Inputs mode [bit field] :', Fore.GREEN + dev.get_inputs_mode())
|
|
|
+ # Значения входов (битовое поле)
|
|
|
+ print('Inputs values [bit field] :', Fore.GREEN + dev.get_inputs_bit())
|
|
|
+ # Режим работы входов (битовое поле)
|
|
|
+ print('Inputs mode [bit field] :', Fore.GREEN + dev.get_inputs_mode())
|
|
|
+ # Нормальное состояние входов (битовое поле)
|
|
|
+ print('Inputs norm [bit field] :', Fore.GREEN + dev.get_inputs_norm_state())
|
|
|
+ # Период антидребезга (ms)
|
|
|
+ for i in range(1, 9):
|
|
|
+ print(f'Debounce input {i} (ms) :', Fore.GREEN + str(dev.get_debounce_channel(i)))
|
|
|
+ # Значение счетчиков
|
|
|
data = dev.get_inputs_counters()
|
|
|
- print('Inputs counters :', Fore.GREEN + ' | '.join(str(el) for el in data))
|
|
|
- dev.set_inputs_mode(i)
|
|
|
-
|
|
|
+ print('Inputs counters :', Fore.GREEN + ' | '.join(str(el) for el in data))
|
|
|
+
|
|
|
+ # break
|
|
|
time.sleep(1)
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ # for i in range(1, 9):
|
|
|
+ # dev.set_input_mode(i, 1)
|
|
|
+ # print('Inputs mode [bit field] :', Fore.GREEN + dev.get_inputs_mode())
|
|
|
|
|
|
|
|
|
+ # for i in range(8, 0, -1):
|
|
|
+ # dev.set_input_mode(i, 0)
|
|
|
+ # print('Inputs mode [bit field] :', Fore.GREEN + dev.get_inputs_mode())
|
|
|
+
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
main()
|