|
@@ -5,7 +5,7 @@ import colorama
|
|
|
from colorama import Fore
|
|
|
from time import sleep
|
|
|
from serial import Serial
|
|
|
-from mb_registers import AI_REGS
|
|
|
+from mb_registers import AI_REGS, AiReg
|
|
|
import matplotlib.pyplot as plt
|
|
|
import matplotlib.animation as animation
|
|
|
|
|
@@ -37,51 +37,97 @@ class IO_AnalogInput(IO_Module):
|
|
|
self.graph_input = ai_name['AIN_1']
|
|
|
self.graph_input_func = 0
|
|
|
|
|
|
+ # Чтение параметров
|
|
|
|
|
|
-
|
|
|
- '''Чтение параметров'''
|
|
|
-
|
|
|
- # Значения состояний входов вкл./выкл. (битовое поле)
|
|
|
def get_inputs_state(self):
|
|
|
- data = self.modbus.read_holding_registers(AI_REGS['ain_state'], 1)
|
|
|
+ 'Значения состояний входов вкл./выкл. (битовое поле)'
|
|
|
+ data = self.modbus.read_holding_registers(AiReg.IN_STATE.value, 1)
|
|
|
return format(data[0], '012b')
|
|
|
|
|
|
- # Режим измерения входов (0 - напряжение или 1 - ток. (битовое поле))
|
|
|
+
|
|
|
def get_inputs_mode(self):
|
|
|
- data = self.modbus.read_holding_registers(AI_REGS['ain_mode'], 1)
|
|
|
+ 'Режим измерения входов (0 - напряжение или 1 - ток. (битовое поле))'
|
|
|
+ data = self.modbus.read_holding_registers(AiReg.IN_MODE.value , 1)
|
|
|
return format(data[0], '012b')
|
|
|
|
|
|
- def get_input_gain(self, input):
|
|
|
- data = self.modbus.read_holding_registers(AI_REGS['ain_gain'] + input - 1, 1)
|
|
|
- return data[0]
|
|
|
-
|
|
|
+
|
|
|
def get_inputs_alarm(self):
|
|
|
- data = self.modbus.read_holding_registers(AI_REGS['ain_alarm'], 1)
|
|
|
+ 'Аварии аналоговых входов (битовое поле)'
|
|
|
+ data = self.modbus.read_holding_registers(AiReg.IN_FAILURE.value, 1)
|
|
|
return format(data[0], '012b')
|
|
|
|
|
|
+
|
|
|
+ def get_ext_sens_power(self):
|
|
|
+ 'Состояние питания внешних датчиков (вкл./выкл.)'
|
|
|
+ data = self.modbus.read_holding_registers(AiReg.EXT_SENS_POWER.value, 1)
|
|
|
+
|
|
|
+
|
|
|
+ def get_input_gain(self, channel):
|
|
|
+ 'Коэффициент усиления канала [1..12] (внутренний коэф-т ADC)'
|
|
|
+ data = self.modbus.read_holding_registers(AiReg.IN_GAINE_FACTOR.value + channel - 1, 1)
|
|
|
+ return data[0]
|
|
|
+
|
|
|
+
|
|
|
+ def get_k_factor(self, channel):
|
|
|
+ 'Коэффициент пересчета K канала [1..12]'
|
|
|
+ return self.modbus.read_float_holding(AiReg.IN_K_FACTOR.value + 2*(channel - 1))
|
|
|
+
|
|
|
+
|
|
|
+ def get_b_factor(self, channel):
|
|
|
+ 'Коэффициент пересчета B канала [1..12]'
|
|
|
+ return self.modbus.read_float_holding(AiReg.IN_B_FACTOR.value + 2*(channel - 1))
|
|
|
+
|
|
|
+
|
|
|
+ def get_raw_input(self, channel):
|
|
|
+ 'Сырые данные по отдельному каналу [1..12]'
|
|
|
+ return self.modbus.read_holding_registers(AiReg.IN_RAW.value + channel - 1, 1)[0]
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
def get_raw_inputs(self):
|
|
|
- data = self.modbus.read_holding_registers(AI_REGS['ain_raw'], 16)
|
|
|
+ data = self.modbus.read_holding_registers(AiReg.IN_RAW, 16)
|
|
|
return data
|
|
|
|
|
|
def get_fil_inputs(self):
|
|
|
data = self.modbus.read_holding_registers(AI_REGS['ain_fil'], 12)
|
|
|
return data
|
|
|
|
|
|
- '''Установка параметров'''
|
|
|
+ # Установка параметров
|
|
|
|
|
|
def set_inputs_state(self, val):
|
|
|
- self.modbus.write_holding_register(AI_REGS['ain_state'], val)
|
|
|
+ 'Значения состояний входов вкл./выкл. (битовое поле)'
|
|
|
+ self.modbus.write_holding_register(AiReg.IN_STATE.value , val)
|
|
|
+
|
|
|
|
|
|
def set_inputs_mode(self, val):
|
|
|
- self.modbus.write_holding_register(AI_REGS['ain_mode'], val)
|
|
|
+ 'Режим измерения входов (0 - напряжение или 1 - ток. (битовое поле))'
|
|
|
+ self.modbus.write_holding_register(AiReg.IN_STATE.value, val)
|
|
|
|
|
|
- def set_input_gain(self, input, value):
|
|
|
- # if value not in (1, 2, 4, 8, 16, 32, 64, 128):
|
|
|
- # return None
|
|
|
- self.modbus.write_holding_register(AI_REGS['ain_gain'] + input - 1, value)
|
|
|
|
|
|
def set_ext_sens_power(self, val):
|
|
|
- self.modbus.write_holding_register(AI_REGS['esens_pow'], val)
|
|
|
+ 'Состояние питания внешних датчиков (вкл./выкл.)'
|
|
|
+ self.modbus.write_holding_register(AiReg.EXT_SENS_POWER.value , val)
|
|
|
+
|
|
|
+
|
|
|
+ def set_input_gain(self, input, value):
|
|
|
+ '''
|
|
|
+ Коэффициент усиления канала [1..12] (внутренний коэф-т ADC)
|
|
|
+ Допустимые значения: 1, 2, 4, 8, 16, 32, 64, 128
|
|
|
+ '''
|
|
|
+ if value not in (1, 2, 4, 8, 16, 32, 64, 128):
|
|
|
+ return None
|
|
|
+ self.modbus.write_holding_register(AiReg.IN_GAINE_FACTOR.value + input - 1, value)
|
|
|
+
|
|
|
+
|
|
|
+ def set_k_factor(self, channel, value):
|
|
|
+ 'Коэффициент пересчета K канала [1..12]'
|
|
|
+ self.modbus.write_float(AiReg.IN_K_FACTOR.value + 2*(channel - 1), value)
|
|
|
+
|
|
|
+
|
|
|
+ def set_b_factor(self, channel, value):
|
|
|
+ 'Коэффициент пересчета K канала [1..12]'
|
|
|
+ self.modbus.write_float(AiReg.IN_B_FACTOR.value + 2*(channel - 1), value)
|
|
|
+
|
|
|
|
|
|
'''Настройки входов'''
|
|
|
def print_inputs(self):
|
|
@@ -187,8 +233,13 @@ def main():
|
|
|
sleep(1)
|
|
|
'''
|
|
|
|
|
|
- # ai.sys.get_system_vars()
|
|
|
+ '''Коэффициенты K и B'''
|
|
|
+ # for i in range(1, 13):
|
|
|
+ # ai.set_k_factor(i, i + 100)
|
|
|
+ # ai.set_b_factor(i, i + 1000)
|
|
|
|
|
|
+
|
|
|
+ # ai.sys.get_system_vars()
|
|
|
|
|
|
# print(ai.get_inputs_state())
|
|
|
# ai.set_inputs_state(0b1111_1111_1111)
|
|
@@ -220,6 +271,11 @@ def main():
|
|
|
# ai.get_raw_inputs()
|
|
|
# ai.print_raw_inputs()
|
|
|
|
|
|
+ '''Сырые данные'''
|
|
|
+ while True:
|
|
|
+ print(ai.get_raw_input(12))
|
|
|
+ sleep(1)
|
|
|
+
|
|
|
'''Вывод на график. Сырые данные'''
|
|
|
# ai.show_graph(ai.get_raw_inputs, 'AIN_7')
|
|
|
|
|
@@ -230,7 +286,7 @@ def main():
|
|
|
# ai.sys.get_system_vars()
|
|
|
|
|
|
'''Сохранение настроек'''
|
|
|
- ai.sys.save_sattings()
|
|
|
+ # ai.sys.save_sattings()
|
|
|
|
|
|
'''Обновление прошивки'''
|
|
|
# serial_port.timeout = 1
|