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

본문
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()
- 이전글read_holding_registers 예제 22.11.23
- 다음글wellpro 3082 - 릴레이 데이타 읽고 쓰기 22.11.23
댓글목록
등록된 댓글이 없습니다.