Я читаю и записываю регистры с устройства со следующими параметрами: скорость передачи - 9600 стоп-бит-1 no_of_bits - 8 четность - нечетная
В настоящее время я использую минимальную библиотеку Modbus. мой код для чтения реестра вставлен ниже
# serial line
import traceback
import minimalmodbus as mmRtu
regsSp = 6
portName = 'com4'
baudrate = 9600
timeoutSp = 0.5 + regsSp * 0
mmc = mmRtu.Instrument(portName,5,mode=mmRtu.MODE_RTU)
mmc.serial.baudrate = baudrate
mmc.serial.timeout = timeoutSp
mmc.serial.parity = 'O'
tb = None
errCnt = 0
mmc.address = 5
try:
data = mmc.read_registers(3, 6)
except:
tb = traceback.format_exc()
errCnt += 1
mmc.serial.close()
print(errCnt)
print(data)
[относится к теме библиотеки Python modbus]
Регистр чтения работает отлично.
Однако мой write_register здесь не работает. Я читаю с 5-го регистра своего устройства. Код ниже.
# serial line
import traceback
import minimalmodbus as mmRtu
regsSp = 6
portName = 'com4'
baudrate = 9600
timeoutSp = 0.5 + regsSp * 0
mmc = mmRtu.Instrument(portName,5,mode=mmRtu.MODE_RTU)
mmc.serial.baudrate = baudrate
mmc.serial.timeout = timeoutSp
mmc.serial.parity = 'O'
tb = None
errCnt = 0
mmc.address = 5
try:
data = mmc.read_registers(3, 6)
except:
tb = traceback.format_exc()
errCnt += 1
mmc.serial.close()
print(errCnt)
print(data)
Отслеживание (последний вызов последним): файл "C: /Users/Admin/PycharmProjects/weight_calibrate/weight_calibrate.py", строка 17, в mmc.write_register (4, 5, 0, 6, False) Файл "C: \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ minimalmodbus-0.7-py3.6.egg \ minimalmodbus.py ", строка 296, в write_register self._genericCommand (код функции, registeraddress, value, numberOfDecimals , signed = signed) Файл "C: \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ minimalmodbus-0.7-py3.6.egg \ minimalmodbus.py", строка 697, в _genericCommand payloadFromSlave = self._performCommand (код функции, payloadToSlave) Файл "C: \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ minimalmodbus-0.7-py3.6.egg \ minimalmodbus.py", строка 795, в _performCommand response = self._communicate (request, number_of_bytes_to_read) File "C: \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ minimalmodbus-0.7-py3.6.egg \" Minimalmodbus.py ", l ine 930, в _communicate поднять IOError ('Нет связи с прибором (нет ответа)') OSError: Нет связи с прибором (нет ответа)
Я проверил, что пакет данных в запросе идеален, даже CRC. Однако ответ от устройства нулевой, и именно здесь код не работает.
Minimalmodbus.py
if len(answer) == 0:
raise IOError('No communication with the instrument (no answer)')
так как ответ - б ''
Я могу писать в регистры своего устройства, используя инструменты просто Modbus master 8.0.7, и пакет данных запроса имеет одинаковое содержимое в обоих случаях. Это говорит о том, что у меня есть права на запись в порт. Кроме того, поскольку даже чтение фактически записывает запрос в порт, права доступа к файлам могут не быть проблемой, вот что я предполагаю.
Пожалуйста, предложите, если мне здесь не хватает какой-либо настройки ..
Я также пробовал библиотеку modbus_tk, и в этом случае она тоже не работает.