|
@@ -1,4 +1,4 @@
|
|
|
-from io_module import IO_Module
|
|
|
+from io_module import IO_Module, SysUtils
|
|
|
from modbus import Modbus, MBError, NoResponseError
|
|
|
from log_reader import DigitalLogReader
|
|
|
import colorama
|
|
@@ -90,31 +90,60 @@ class IO_Digital(IO_Module):
|
|
|
|
|
|
|
|
|
'''Запрос параметров дискретных входов'''
|
|
|
-
|
|
|
- # 0x0200 - Состояние выходов (вкл./выкл.)
|
|
|
+
|
|
|
def get_outputs_state(self):
|
|
|
- data = self.modbus.read_holding_registers(DioReg.OUT_STATE.value , 1)
|
|
|
+ 'Состояние выходов (вкл./выкл.)'
|
|
|
+ data = self.modbus.read_holding_registers(DioReg.OUT_STATE.value, 1)
|
|
|
return format(data[0], '08b')
|
|
|
|
|
|
+
|
|
|
+ def get_outputs(self):
|
|
|
+ 'Текущее состояние выходов'
|
|
|
+ data = self.modbus.read_holding_registers(DioReg.OUT_BITS.value, 1)
|
|
|
+ return format(data[0], '0b8')
|
|
|
+
|
|
|
+
|
|
|
+ def get_outputs_mode(self):
|
|
|
+ 'Режим работы выходов'
|
|
|
+ data = self.modbus.read_holding_registers(DioReg.OUT_MODE.value, 1)
|
|
|
+ return format(data[0], '0b8')
|
|
|
+
|
|
|
+
|
|
|
+ def get_outputs_mode_save(self):
|
|
|
+ 'Режим работы выходов в безопасном режиме'
|
|
|
+ data = self.modbus.read_holding_registers(DioReg.OUT_MODE_SAVE.value, 1)
|
|
|
+ return format(data[0], '0b8')
|
|
|
+
|
|
|
+
|
|
|
'''Установка параметров дискретных выходов'''
|
|
|
|
|
|
- # 0x0200 - Состояние выходов (вкл./выкл.)
|
|
|
+
|
|
|
def set_outputs_state(self, val):
|
|
|
+ 'Состояние выходов вкл./выкл. (битовое поле)'
|
|
|
self.modbus.write_holding_register(DioReg.OUT_STATE.value, val)
|
|
|
|
|
|
- # 0x0201 - текущее состояние выходов в обычном режиме
|
|
|
+
|
|
|
def set_outputs(self, val):
|
|
|
+ 'Текущее состояние выходов в обычном режиме'
|
|
|
self.modbus.write_holding_register(DioReg.OUT_BITS.value, val)
|
|
|
|
|
|
- # 0x0201 - Установить значение на конкретном выходе [1..8]
|
|
|
+
|
|
|
def set_output(self, output, val):
|
|
|
+ 'Установить значение на конкретном выходе [1..8]'
|
|
|
ret = self.modbus.read_holding_registers(DioReg.OUT_BITS.value, 1)
|
|
|
- if val == 1:
|
|
|
- data = ret[0] | (0b1 << (output - 1))
|
|
|
- else:
|
|
|
- data = ret[0] & ~(0b1 << (output - 1))
|
|
|
- self.set_outputs(data)
|
|
|
+ self.set_outputs(SysUtils.set_bit(ret, output - 1, val))
|
|
|
+
|
|
|
|
|
|
+ def set_outputs_mode(self, val):
|
|
|
+ 'Режим работы выходов (битовое поле)'
|
|
|
+ self.modbus.write_holding_register(DioReg.OUT_MODE.value, 1)
|
|
|
+
|
|
|
+
|
|
|
+ def set_output_mode(self, output, val):
|
|
|
+ 'Установить режим работы конкретного выхода [1..8]'
|
|
|
+ ret = self.modbus.read_holding_registers(DioReg.OUT_MODE.value, 1)[0]
|
|
|
+ self.set_outputs_mode(SysUtils.set_bit(ret, output - 1, val))
|
|
|
+
|
|
|
|
|
|
def print_inputs(self):
|
|
|
|
|
@@ -246,6 +275,12 @@ def main():
|
|
|
# tester.get_load()
|
|
|
|
|
|
'''Выходы'''
|
|
|
+
|
|
|
+ # print(dio.get_outputs())
|
|
|
+ !!!
|
|
|
+ # dio.set_output_mode(3, 0)
|
|
|
+ # print(dio.get_inputs_mode())
|
|
|
+
|
|
|
# for i in range(100):
|
|
|
# dio.set_outputs(0b00000001)
|
|
|
# sleep(1)
|
|
@@ -254,7 +289,7 @@ def main():
|
|
|
|
|
|
'''Системные переменные и параметры'''
|
|
|
# dio.sys.get_system_vars()
|
|
|
- print(dio.sys.get_bat_votage())
|
|
|
+ # print(dio.sys.get_bat_votage())
|
|
|
|
|
|
''' Установить текущее время с учетом часового пояса'''
|
|
|
# dev.sys.set_rtc()
|