2017-10-27 36 views
0

에 나는 위의 코드는 잘 작동 3Pymodbus은 라즈베리 파이 3

from pymodbus.client.sync import ModbusSerialClient as ModbusClient 

client = ModbusClient(method = 'rtu', port = '/dev/ttyUSB0', baudrate = 115200) 
client.connect() 

result = client.read_input_registers(0x3100,6,unit=1) 
solarVoltage = float(result.registers[0]/100.0) 
solarCurrent = float(result.registers[1]/100.0) 
batteryVoltage = float(result.registers[4]/100.0) 
chargeCurrent = float(result.registers[5]/100.0) 

# Do something with the data 

client.close() 

라즈베리 파이에 pymodbus를 통해 모드 버스 장치에서 데이터를 얻기 위해 노력하고 있어요. 하지만 난이

result = client.read_input_registers(0x3200,unit=1) 

처럼

enter image description here

예를 들어, 내가 노력하고 뭔가 아래에 주어진 정보로부터 비트를하고 싶지만 내가 result.registers를 호출 할 때 표시 출력은 0 하지만 내가 원하는 D0 ~ D15의 값을 얻습니다. 어떻게 할 수 있습니까? 감사합니다

답변

1

나는 당신이 읽을 수있는 레지스터의 숫자에 대한 가치가 누락 된 것 같아요. 두 개의 레지스터를 읽고 싶습니다. 명령어가

result = client.read_input_registers(0x3200, 2, unit=1) 
+0

안녕하십니까, 답장을 보내 주셔서 감사합니다. 당신이 언급 한 명령은 오직 3200과 3201을 별도로 호출하여 얻을 수있는 동일한 출력 인 [0], [1]을 돌려주었습니다. 제 질문은 D0, D1 .....이 그런 경우 어떻게 액세스 할 수 있는지에 대한 것입니다. 감사합니다. –

+1

나는 당신이 무엇을 요구하고 있는지 이해합니다. 예, 돌아 오는 값은 정수 값입니다. 그들을 비트로 나누어 비트 값을 얻습니다. 귀하의 경우, 3200이 0을 읽으면 D0-D15는 0이고 3201이 1이면 D0 = 1이고 나머지는 D1-D15가 0입니다. – Pal

+1

정수를 바이너리로 변환 한 다음 사양에 따라 개별 비트 범위에 액세스 할 수 있습니다. "
"batt_temp = int (결과 [4 : 7]) "
"batt_resistance (결과 : [0 : 0] = int (결과 [8])'
' 오류 = int (결과 [15]) ' – Sanju