Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions packages/modules/io_devices/dimm_kit/api.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
import time
from typing import Dict, Optional
from modules.common.component_state import IoState
from modules.common.configurable_io import ConfigurableIo
Expand Down Expand Up @@ -40,21 +41,22 @@ def read():
except socket.timeout:
log.exception("Dimm-Kit")
raise Exception("Die IP-Adresse ist nicht erreichbar. Bitte überprüfe die Einstellungen.")
# analog inputs are configured as 0-5V (AI1-AI4) and 0-25mA (AI5-AI8) as default
# the values are reported as integers in range of 0-1024
time.sleep(0.1)
analog_read = client.read_input_registers(0x00, [ModbusDataType.UINT_16]*8, unit=config.configuration.modbus_id)
analog_input = {getattr(AnalogInputMapping, f'AI{pin+1}'): analog_read[pin] * 5 for pin in range(8)}
time.sleep(0.1)
digital_input_read = client.read_coils(0x00, 8, unit=config.configuration.modbus_id)
digital_input = {getattr(DigitalInputMapping, f'DI{pin+1}'): digital_input_read[pin] for pin in range(8)}
time.sleep(0.1)
digital_output_read = client.read_coils(0x10, 8, unit=config.configuration.modbus_id)
digital_output = {getattr(DigitalOutputMapping, f'DO{pin+1}'): digital_output_read[pin] for pin in range(8)}
return IoState(
# analog inputs are configured as 0-5V (AI1-AI4) and 0-25mA (AI5-AI8) as default
# the values are reported as integers in range of 0-1024
analog_input={
pin.name: client.read_input_registers(
pin.value, ModbusDataType.UINT_16, unit=config.configuration.modbus_id
) * 5 for pin in AnalogInputMapping},
digital_input={
pin.name: client.read_coils(
pin.value, 1, unit=config.configuration.modbus_id
) for pin in DigitalInputMapping},
digital_output={
pin.name: client.read_coils(
pin.value, 1, unit=config.configuration.modbus_id
) for pin in DigitalOutputMapping})
analog_input=analog_input,
digital_input=digital_input,
digital_output=digital_output
)

def write(analog_output: Optional[Dict[str, int]], digital_output: Optional[Dict[str, bool]]) -> None:
nonlocal client
Expand Down