MinimalModbus Тайм-аут при массовом чтении бит - PullRequest
0 голосов
/ 25 июня 2018

Прыжки сюда могут помочь, пожалуйста.Я общаюсь с устройством Modbus и получаю данные обратно, как и ожидалось, я довольно новичок в этом, поэтому мне нужен небольшой совет, я пытаюсь прочитать все битовые регистры на моем устройстве (Eaton SC200) для пользовательского ЧМИ.Если я пытаюсь выполнить следующий цикл или даже как в приведенном коде, ком-порт теряет связь.

#!/usr/bin/env python
import minimalmodbus
import time

instrument = minimalmodbus.Instrument('COM11', 1)
minimalmodbus.TIMEOUT = 1

DO =[]
instrument.address     # this is the slave address number
instrument.mode = minimalmodbus.MODE_RTU   # rtu or ascii mode
#port name, slave address (in decimal)#0 = instrument.read_bit(1,1)
#digital = instrument.read_registers(1,32,4)
Version =instrument.read_registers(3001,3,4)
serialupper = instrument.read_registers(6001,1,4)
serialLower = instrument.read_registers(6002,1,4)
busvolt= instrument.read_registers(7001,4,4)

print type(serialupper[0])
print(serialupper, serialLower)
upper = serialupper[0] << 16        # shift upper left 16 bits
Snumber = upper + serialLower[0]
print ('Serial no: = ' + str(Snumber))
print(busvolt)

print ('Getting i-o')

print instrument.read_bit(1001,2)
print instrument.read_bit(1002,2)
print instrument.read_bit(1003,2)
print instrument.read_bit(1004,2)
print instrument.read_bit(1101,2)
print instrument.read_bit(1102,2)
print instrument.read_bit(1201,2)
print instrument.read_bit(1202,2)
print instrument.read_bit(1203,2)
print instrument.read_bit(1204,2)
print instrument.read_bit(1201,2)
print instrument.read_bit(1201,2)

Ответ, который я получаю, таков:

<type 'int'>
([3754], [53255])
Serial no: = 246075399
[16989, 42144, 32704, 0]
Getting i-o
0
0
Traceback (most recent call last):
  File "modbusRTU.py", line 29, in <module>
    print instrument.read_bit(1003,2)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 193, in read_bit
    return self._genericCommand(functioncode, registeraddress)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 697, in _genericCommand
    payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 795, in _performCommand
    response = self._communicate(request, number_of_bytes_to_read)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 930, in _communicate
    raise IOError('No communication with the instrument (no answer)')
IOError: No communication with the instrument (no answer)

Я изменилТайм-аут для различных значений от 0,5 до 2, чтобы увидеть, если это проблема, иногда я получаю полные данные, а иногда ничего не получается.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 26 июня 2018

Скорее всего, это проблема физической связи.Проверьте кабельные окончания, проверьте нагрузочные резисторы (для RS-485), проверьте источники помех RFI / EMI и попробуйте снизить скорость передачи.Чем длиннее кабель, тем ниже скорость передачи данных, которую следует использовать.

Если это RS-485, есть ли согласующие резисторы на обоих концах шины?И они правильного размера?Это более важно в высокоскоростных сетях.В более медленных (9600 и менее) сетях, я видел, что RS-485 работает нормально, без оконечных резисторов или с ограничителями большого размера.Обычно я устанавливаю скорость передачи RS-485 на 9600, если я не опрашиваю много данных.

...