Предупреждение - общий новичок с Modbus и промышленным управлением в целом ... Извините за любую неправильную терминологию/и т. Д. заранее!Включить/выключить катушки ModBus с помощью Python - Beckhoff BK9000
У меня есть проект с использованием межсетевого соединения Beckhoff BK9000/BK9100, и мне нужно проверить состояния до шести цифровых выходов (модули KL2602), а также включить и выключить эти шесть выходов в зависимости от некоторой логики.
Я знаю, что устройство работает и находится на указанном IP-адресе, так как я могу видеть его в TwinCat3 и вручную манипулировать выходами.
Я пытался использовать следующий код:
from pyModbusTCP.client import ModbusClient
SERVER_HOST = "172.16.17.32"
SERVER_PORT = 502
# TCP auto connect on modbus request, close after it
c = ModbusClient(host=SERVER_HOST, port=SERVER_PORT, auto_open=True, auto_close=True)
for i in range(4):
print(str(i) + str(c.read_coils(i,16)))
status = c.write_single_coil(0, False)
print(status)
for i in range(4):
print(str(i) + str(c.read_coils(i,16)))
Когда я делаю это, я могу видеть, что True/False для катушки «0» соответствует различным выходным состояниям, которые я установил вручную используя TwinCat3. Есть шесть выходов вручную высоко посаженных, здесь видно:
0[True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False]
1[True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False]
2[True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False]
3[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False]
Оказывается, что, когда я увеличиваю «катушку», это просто читает один немного дальше в поток, как «катушка» 1, 2 и 3 вращается оставил.
Однако я все еще не могу изменить значения. Я слышу мигающий щелчок реле при установке катушки '0' на False (но не нажимайте на true), и состояние чтения катушек не изменяется. TwinCat также не показывает никаких изменений. Я получаю «Нет» от записи, что указывает на то, что он не работает в соответствии с документацией модуля.
0[True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False]
1[True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False]
2[True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False]
3[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False]
None
0[True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False]
1[True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False]
2[True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False]
3[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False]
Я уверен, что это что-то простое с битовыми операциями или чем-то подобным, которое я пропускаю. Любые идеи о том, что я делаю неправильно, что приводит к сбою записи?
Непонятно, если вы можете установить состояние катушки с помощью twincat или нет. Если нет, я бы посмотрел на руководство/настройки контроллера. – intrepidhero
Кроме того, попробовали ли вы включить режим [debug mode] (https://pythonhosted.org/pyModbusTCP/quickstart/index.html#modbusclient-debug-mode), чтобы узнать, дает ли он какую-либо полезную обратную связь? Вы также можете попробовать захватить трафик в Wireshark - он должен декодировать Modbus/TCP и может быть проще следовать, чем данные кадра Modbus от Python. Сначала я попытаюсь исключить любые возможные проблемы с конфигурацией оборудования. – thephez
Я обязательно проверю режим отладки и Wireshark, если ничего больше не всплывет.Насколько я могу судить, аппаратное обеспечение работает нормально - я могу полностью контролировать его через TwinCat3, либо через мягкий ПЛК, либо вручную щелкнув правой кнопкой мыши, и установив выходы на 1 или 0. У меня также есть две единицы (BK9000 дома и BK9100 при работе), и оба имеют одинаковое поведение. – user2726921