모드버스 float 형태로 데이타 받기 > 시리얼 통신

본문 바로가기

회원로그인

회원가입

시리얼 통신

modbus 모드버스 float 형태로 데이타 받기

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 66회 작성일 23-04-23 22:54

본문

모드버스 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)
    #############################################################################################

댓글목록

등록된 댓글이 없습니다.