내가 읽고 다음과 같은 매개 변수를 사용하여 장치에서 레지스터를 쓰고 있어요 (최소 모드 버스 사용) null을 반환 전송 속도 - 9600 stopbit-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 library 참조].
그러나 여기에서는 내 write_register가 실패합니다. 내 장치의 다섯 번째 레지스터에서 읽는 중입니다. 코드는 다음과 같습니다. mmc.write_register (4, 5, 0, 6, 17 행,
# 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)
역 추적 (마지막으로 가장 최근 통화) : 파일 "/Users/Admin/PycharmProjects/weight_calibrate/weight_calibrate.py C" , False) 파일 "write_register 에서 C : \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ minimalmodbus-0.7-py3.6.egg \ minimalmodbus.py"파일 296 줄 self._genericCommand (functioncode, 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._perfo rmCommand (functioncode, payloadToSlave) "C : \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ minimalmodbus-0.7-py3.6.egg \ minimalmodbus.py"파일의 795 행에 있습니다. in _performCommand 파일 "C : \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ minimalmodbus-0.7-py3.6.egg \ minimalmodbus"응답이 self._communicate (요청, number_of_bytes_to_read) 이 IO 오류 ('기기와 통신 할 수없는 경우 (응답 없음)') OSError를 제기 _communicate에 평 ", 라인 (930) : 기기와 통신 할 수없는 경우 (응답 없음)이
내가 체크 한 그의 데이터 패킷 요청은 완벽합니다. 심지어 CRC입니다. 그러나 장치의 응답은 null이며 코드가 실패하는 곳입니다.
minimalmodbus.py
if len(answer) == 0:
raise IOError('No communication with the instrument (no answer)')
대답은 'B' '나는 단순히 모드 버스 도구 마스터 8.0.7 및 요청 데이터 패킷이를 사용하여 장치의 레지스터에 쓸 수 있어요
이기 때문에 두 경우 모두 같은 내용. 이것은 포트에 쓸 수있는 권한이 있음을 의미합니다. 또한 읽은 후에도 포트에 요청을 실제로 기록하기 때문에 파일 사용 권한이 문제가되지 않을 수도 있습니다.
내가 여기에 어떤 설정을 잃었 경우 제안하시기 바랍니다
..또한 라이브러리 modbus_tk을 시도하고도 그 경우에 실패합니다.