2014-09-16 6 views
1

나는 일반적으로 pymodbus와 modbus를 처음 접했고, float을 직접 추가하려고 시도했습니다.
아무런 성공없이 서버 컨텍스트에 추가했는데, 그것을하는 방법에지도하십시오. 이미 같은 것을 수행하여 페이로드를 사용하려고 : 나는 int로 페이로드를 캐스팅하려고 pymodbus에 대한 오류를 얻을 그러나서버 문맥 레지스터에 float를 추가하는 Pymodbus

builder = BinaryPayloadBuilder(endian=Endian.Little) 
builder.add_32bit_float(long(69000)) 
payload = builder.build() 

context[slave_id].setValues(register, address, payload) 

, 내 코드는 주로 동기화 서버 예제의 하나입니다. 어떤 도움을 내가 함께했다 레지스터와 16 비트 정수로 부동의 분할에 대한 몇 가지 조사 후

답변

1
builder = BinaryPayloadBuilder(endian=Endian.Little) 
builder.add_32bit_float(30.3) 
payload = builder.to_registers() 

context[slave_id].setValues(register, address, payload) 

이 올바른 방법입니다, 당신의 모드 버스 클라이언트를 필요가있다 "등록"주의을 시작 레지스터이며 모든 모드 버스 레지스터가 16 비트 폭 그래서 32 비트 부동 소수점 차지 2 (등록 및 등록 + 1).

0

아주 좋은 것 :

register = 3 
slave_id = 0x00 
address = 0x01 

values = context[slave_id].getValues(register, address, count=2) 

# Two integers to a floating point 
i1 = values[0] 
i2 = values[1] 
f = unpack('l',pack('<HH',i1,i2))[0] 
f = f+1 
# Floating point to two integers 
i1, i2 = unpack('<HH',pack('l',f)) 
print(f,i1,i2) 

context[slave_id].setValues(register, address, [i1,i2]) 

나는 엔디안의 인코딩 일부 문제 하나가 무엇인가를 확인했다 당신이