modbus RTU 데이타 읽기 - 3082 ADAM 데이타 읽기 1 > 시리얼 통신

본문 바로가기

회원로그인

회원가입

시리얼 통신

modbus modbus RTU 데이타 읽기 - 3082 ADAM 데이타 읽기 1

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 104회 작성일 21-12-13 18:35

본문

import sys
import time
import serial
import serial.rs485


#===============================================================
# i_data : 3082ADAM에서 읽어온 hex값(str로 변환된 값)
def def_3082_hex(i_data):
    ret = [[]] * 9
    ret[0] = i_data[0:6]
    ret[1] = def_3082(i_data[6:10])
    ret[2] = def_3082(i_data[10:14])
    ret[3] = def_3082(i_data[14:18])
    ret[4] = def_3082(i_data[18:22])
    ret[5] = def_3082(i_data[22:26])
    ret[6] = def_3082(i_data[26:30])
    ret[7] = def_3082(i_data[30:34])
    ret[8] = def_3082(i_data[34:38])
   
    return ret
#===============================================================
#===============================================================
# i_data : 3082ADAM 에서 읽어온 수치값
# 계산식을 해서, mA 값으로 변환하기
def def_3082( i_data ):
    i_data = int(i_data, 16)
    ret = i_data * 20 / 4095
   
    return ret
#===============================================================

ser = serial.Serial("COM3", baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1)
print("ser ==>", ser)

if ser.is_open:
    print(ser.name, " : port open success")
   
    while True:
        #  HEX (16) converted to BYTES (2), pay attention to Python3.7 and python2.7 conversion
        send_data = bytes.fromhex('01 03 00 00 00 08 44 0C')    #  Send data to B '\ XFF \ X01 \ x00u \ x00 \ x00v'
        ser.write(send_data)   #  send command
       
        time.sleep(1)        #  Delay, otherwise len_return_data will return 0, which is easy to ignore! ! !
        return_data = ser.inWaiting()  #  Get buffer data (received data) length
       
        if return_data:
            hex_data = ser.read(return_data)  #  Read buffer data
           
            #  BYTES (2) Convert to HEX (16), pay attention to the difference between Python3.7 and python2.7, and turn into a string, intercept the required data field, and turn to 10
            read_data = def_3082_hex( str(hex_data.hex()) )
            print(read_data)
       
else:
    print(ser.name, " : port open failed")

 
[이 게시물은 최고관리자님에 의해 2022-11-23 13:44:07 소스코드에서 이동 됨]

댓글목록

등록된 댓글이 없습니다.