rs485 - 지하수 센서 데이타 읽은 후, 파일에 데이타 저장하기 - 2 > 시리얼 통신

본문 바로가기

회원로그인

회원가입

시리얼 통신

serial rs485 - 지하수 센서 데이타 읽은 후, 파일에 데이타 저장하기 - 2

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 116회 작성일 22-11-23 13:27

본문

import logging, sys, time
import serial
import datetime as dt

starttime = time.time()
sleeptime = 10
##########################################
# 파일이름 만들기
def def_savefile():
    todate = dt.datetime.now();
    #print("=>", todate.year, todate.month, todate.day);
   
    y = str(todate.year);
   
    m = todate.month;
    if (m < 10):
        m_value = "0" + str(m);
    else:
        m_value = str(m);

    d = todate.day;
    if (d < 10):
        d_value = "0" + str(d);
    else:
        d_value = str(d);

    ret = y + m_value + d_value;
    #print(file_date);
   
    ret1 = "./dat/water_" + ret + ".dat"
    ret2 = "./dat/water_" + ret + ".csv"
   
    return (ret1, ret2)
##########################################
##########################################
# 계측값으로 자연수위, 높이 계산하기 ()
_1atm_ = 0;         # 1atm (대기압 Pa)
_p1_ = 1.293;       # p1 (공기밀도 kg/m3)
_p2_ = 1000;        # p2 (물밀도 kg/m3)
_g_ = 9.8;          # g (중력가속도 m/s2)
_1psi_ = 6894.73;   # 1psi (Pa 단위환산)

_H_ = 62;           # H = H1 + H2 (심도)
_H3_ = 37;          # H3 고도

def func_h( val ):
    pg = float(val) * _1psi_;

    tmp = pg - _1atm_ + _p1_ * _g_ * (_H3_ - _H_);
    tmp2 = ((_p1_ - (_p1_* 2)) * _g_) + (_p2_ * _g_);
    ret_h2 = (tmp / tmp2);

    ret_h1 = (_H_ - ret_h2);

    #return $ret;     // H1(자연수위), H2(지하수높이)
    return (ret_h1, ret_h2)
##########################################


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

op = "0RtTSVIB!"
print("op=>", op)

while True:
    try:
        #ser.write(bytes(bytearray([3])))
        ser.write(op.encode())        
        read_data = ser.readline()
       
        ##################################################
        # 센서에서 읽어온 정보 그대로 파일에 저장하기
       
        saveFile = def_savefile();        
        f = open(saveFile[0], "a");

        write_data = read_data.decode('utf-8');
        write_data = write_data.strip();
        write_data = write_data + "\n";
       
        f.write(write_data);
       
        f.close();
        ##################################################
       
        ##################################################
        # 센서정보를 항목별로 나눠서 저장하기        
        f = open(saveFile[1], "a");

        write_data = read_data.decode('utf-8');
        read_data = write_data.split("t")
       
        read_data = read_data[1].split("T")
        saveData = str(read_data[0])
       
        read_data = read_data[1].split("S")
        saveData += "," + str(read_data[0])
       
        read_data = read_data[1].split("V")
        saveData += "," + str(read_data[0])
       
        read_data = read_data[1].split("I")
        saveData += "," + str(read_data[0])
       
        read_data = read_data[1].split("B")
        saveData += "," + str(read_data[0])
        h_value = func_h(read_data[0])
       
        read_data = read_data[1].split("\r")
        saveData += "," + str(read_data[0])
       
        saveData += "," + str(h_value[0]) + "," + str(h_value[1]) + "\r"
               
        f.write(saveData);
       
        f.close();
        ##################################################
        #print("read_data => ", str(read_data))
        print(saveData)
       
       
    except Exception as e:
        print(" error => ", e)

    #time.sleep(10)       # 초단위
    time.sleep(sleeptime - ((time.time() - starttime) % sleeptime))

ser.close()

 

댓글목록

등록된 댓글이 없습니다.