Код: Выделить всё
async def read_input_registers(modbusclient, start_address, num_elements, slave, datatype):
response = await modbusclient.read_input_registers(start_address, num_elements, unit=slave)
if response.isError():
logging.error(f"Read Input Registers Error for {datatype}: {response}")
else:
if datatype == 'B':
data = response.registers[0]
else:
data_bytes = b''.join(pack('>H', register) for register in response.registers)
data = unpack(datatype, data_bytes)
print(f"{datatype} Data:", data)
return data
Код: Выделить всё
MFC_01DosedQuantity_g = await read_input_registers(modbusclient, 8, 2, 1, '>f' ) #Float datatype (big-endian)
await record_variables('MFC01_DosedQuantity_g', MFC_01DosedQuantity_g)
MFC_02DosedQuantity_g = await read_input_registers(modbusclient, 18, 2, 1, '>f') #Float datatype (big-endian)
await record_variables('MFC02_DosedQuantity_g', MFC_02DosedQuantity_g)
MFC_01DosingStatus = await read_input_registers(modbusclient,1, 1, 1, 'B') # Unsigned8 datatype
await record_variables('MFC01_DosingStatus', MFC_01DosingStatus)
MFC_02DosingStatus = await read_input_registers(11, 1, 1, 'B') # Unsigned8 datatype
await record_variables('MFC02_DosingStatus', MFC_02DosingStatus)
status = await read_input_value(client, 'ns=4;s=|var|C6 S14 PRO.Application.GVL.Stage')
if MFC_01DosingStatus == 512 or MFC_02DosingStatus == 512:
print(f"Error detected at stage {status}, shutting down...")
sys.exit()
Я пытался проверить несоответствие типов, они кажутся целыми числами. Функция Record_variables записывает их в файл .csv как целые числа. Я не знаю, что еще попробовать.
Подробнее здесь: https://stackoverflow.com/questions/786 ... hy-is-this