modbus 모드버스 float 형태로 데이타 받기
페이지 정보

본문
모드버스 float 형태로 데이타 받기
import sys
from datetime import datetime
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.payload import BinaryPayloadBuilder
from pymodbus.compat import iteritems
import numpy as np
from dbcon import *
def read_float(rg):
d16 = np.array(rg, dtype=np.int16)
return list( d16.view(dtype=np.float32) )
host = "10.10.100.254"
port = 8899
timeout = 3
now_chk = 0
while True:
now = datetime.now()
now_1 = now.timestamp()
if (now_chk == 0 or now_chk < now.timestamp()):
now_chk = now.timestamp() + 1 # 지연시간 5초
now_str = now.strftime('%Y-%m-%d %H:%M:%S')
print(now_str)
else: # 지연시간이 안지났으면, continue
continue
'''
전력량계 : 10번
'''
#############################################################################################
# 전력량계 데이타 읽기
sql = " insert into data_power set "
sql = sql + " date = '" + str(now_str) + "' "
unit_i = 1
#modbus_client = ModbusClient(host, port, timeout=timeout, unit_id=unit_i)
modbus_client = ModbusClient(method='rtu', baudrate=9600, parity='N', port='COM4', timeout=1, stopbits=1)
#rg = modbus_client.read_input_registers(14, 1)
#rg = modbus_client.read_holding_registers(0, 3)
rr = modbus_client.read_input_registers(address=0, count=40, unit=1)
rg = rr.registers
#print(" 0 ~ 20 => ", rg)
ret_rg = read_float(rg) # 실수형으로 변경
print( ret_rg )
modbus_client.close()
#print(sql)
#DB_query_run(sql)
#############################################################################################
- 이전글modbustools 23.05.08
- 다음글phpmodbus 를 이용하여, modbus 통신하기 22.11.25
댓글목록
등록된 댓글이 없습니다.