Если условное выражение не работает внутри асинхронной программы Python pymodbus, почему это происходит?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Если условное выражение не работает внутри асинхронной программы Python pymodbus, почему это происходит?

Сообщение Anonymous »

Я использую программу Python для связи с ПЛК с использованием OPCUA, а также контроллер массового расхода для дозирования некоторых веществ с использованием Modbus. Скрипт Python читает и записывает оба.

Код: Выделить всё

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

Это функция, которую я использую для чтения из регистров Modbus, и ниже я использую эту функцию

Код: Выделить всё

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()
Моя проблема в том, что мое условие if не работает. Код всегда обращается к sys.exit(), несмотря на то, что значения MFC_01DosingStatus и MFC_02DosingStatus равны 256.
Я пытался проверить несоответствие типов, они кажутся целыми числами. Функция Record_variables записывает их в файл .csv как целые числа. Я не знаю, что еще попробовать.

Подробнее здесь: https://stackoverflow.com/questions/786 ... hy-is-this
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Могу ли я настроить автоматическое выполнение асинхронной операции после завершения другой асинхронной операции?
    Anonymous » » в форуме C#
    0 Ответы
    82 Просмотры
    Последнее сообщение Anonymous
  • Перехват ошибок из асинхронной функции в блоке try..catch вне асинхронной функции
    Anonymous » » в форуме Javascript
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Условное выражение с оператором в Python
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Условное выражение в горячей точке карты изображения?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Условное выражение — синтаксическая ошибка при возврате
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»