Compare commits
14 Commits
Author | SHA1 | Date |
---|---|---|
support.sampyo | 61e7c3d4b7 | |
support.sampyo | 5297824869 | |
support.sampyo | 50a6bf2373 | |
support.sampyo | 5c1d08ee98 | |
support.sampyo | 95921c49b8 | |
support.sampyo | 44c6a224c2 | |
support.sampyo | 797816a6f5 | |
support.sampyo | 5c41e0664d | |
support.sampyo | f54f9e7fb5 | |
support.sampyo | ad62a2f89e | |
support.sampyo | c566b4070e | |
support.sampyo | 4239597f8a | |
support.sampyo | a47d7c2bd9 | |
support.sampyo | 1a6344fccf |
42
control.json
42
control.json
|
@ -1,31 +1,29 @@
|
|||
{
|
||||
"device": {
|
||||
"setzero": {
|
||||
"enter": {
|
||||
"action": "Off"
|
||||
},
|
||||
"main": {
|
||||
"action": "Off",
|
||||
"duration": 4
|
||||
},
|
||||
"measure": {
|
||||
"action": "On",
|
||||
"duration": 20
|
||||
"action": "On"
|
||||
},
|
||||
"mixed": {
|
||||
"action": "Off",
|
||||
"duration": 7
|
||||
"action": "Off"
|
||||
},
|
||||
"motor": {
|
||||
"action": "Off"
|
||||
},
|
||||
"pure": {
|
||||
"action": "Off",
|
||||
"duration": 9,
|
||||
"holding": 7
|
||||
"duration": 4
|
||||
},
|
||||
"enter":{
|
||||
"action": "Off",
|
||||
"duration": 5
|
||||
"setzero": {
|
||||
"action": "Off"
|
||||
},
|
||||
"vent": {
|
||||
"action": "On",
|
||||
"duration": 20,
|
||||
"holding": 7
|
||||
},
|
||||
"motor": {
|
||||
"action": "Off"
|
||||
}
|
||||
},
|
||||
|
@ -35,5 +33,17 @@
|
|||
"time": 25
|
||||
}
|
||||
},
|
||||
"type": "manual"
|
||||
"type": "manual",
|
||||
"working-time": {
|
||||
"step0": 5,
|
||||
"step1": 10,
|
||||
"step2": 0.5,
|
||||
"step3": 4,
|
||||
"step4": 20,
|
||||
"step5": 20,
|
||||
"step6": 0.5,
|
||||
"step7": 15,
|
||||
"step8": 10,
|
||||
"step9": 140
|
||||
}
|
||||
}
|
|
@ -7,5 +7,5 @@ spec:
|
|||
virtualEnv: base # 사용할 가상환경 이름입니다.
|
||||
package: requirements.txt # 설치할 Python 패키지 정보 파일입니다.(기본 값은 requirement.txt 입니다.)
|
||||
stackbase:
|
||||
tagName: v0.0.37 # Stackbase(gitea)에 릴리즈 태그명 입니다.
|
||||
tagName: v0.0.51 # Stackbase(gitea)에 릴리즈 태그명 입니다.
|
||||
repoName: sampyo-dio # Stackbase(gitea)에 저장될 저장소 이릅니다.
|
||||
|
|
293
main.py
293
main.py
|
@ -1,6 +1,5 @@
|
|||
import json
|
||||
import time
|
||||
import argparse
|
||||
import sys, signal
|
||||
import gpiod
|
||||
from pymodbus.client import ModbusTcpClient
|
||||
|
@ -10,6 +9,8 @@ import pytz
|
|||
from datetime import datetime
|
||||
import threading, socket
|
||||
import uuid
|
||||
import logging
|
||||
from logging.handlers import RotatingFileHandler
|
||||
|
||||
def Motor(chip, status, action):
|
||||
if action == 'On':
|
||||
|
@ -35,15 +36,101 @@ def Valve_MixedWater(chip, status, action):
|
|||
|
||||
chip.set_values(status)
|
||||
|
||||
def Valve_PureWater(chip, status, action):
|
||||
if action == 'On':
|
||||
status[3] = 1
|
||||
else: # action == 'Off'
|
||||
def Valve_PureWater(chip, status, action, duration=7):
|
||||
global pure_valve_status
|
||||
|
||||
status[2] = 0
|
||||
status[3] = 0
|
||||
|
||||
chip.set_values(status)
|
||||
time.sleep(0.05)
|
||||
|
||||
if pure_valve_status != 0 and action == 'Off':
|
||||
status[2] = 0
|
||||
status[3] = 1
|
||||
chip.set_values(status)
|
||||
time.sleep(7)
|
||||
pure_valve_status = 0
|
||||
elif pure_valve_status == 0 and action == 'On':
|
||||
status[2] = 1
|
||||
status[3] = 0
|
||||
chip.set_values(status)
|
||||
time.sleep(duration)
|
||||
if duration >= 7:
|
||||
pure_valve_status = 2
|
||||
elif duration < 7:
|
||||
pure_valve_status = 1
|
||||
|
||||
status[2] = 0
|
||||
status[3] = 0
|
||||
chip.set_values(status)
|
||||
time.sleep(0.05)
|
||||
|
||||
# def Valve_EnterWater(chip, status, action):
|
||||
def Valve_EnterWater(chip, status, action, duration=7):
|
||||
# if action == 'On':
|
||||
# status[4] = 1
|
||||
# else: # action == 'Off'
|
||||
# status[4] = 0
|
||||
|
||||
# chip.set_values(status)
|
||||
global main_valve_status
|
||||
|
||||
status[5] = 0
|
||||
status[6] = 0
|
||||
chip.set_values(status)
|
||||
time.sleep(0.05)
|
||||
|
||||
if main_valve_status != 0 and action == 'Off':
|
||||
status[5] = 0
|
||||
status[6] = 1
|
||||
chip.set_values(status)
|
||||
time.sleep(7)
|
||||
main_valve_status = 0
|
||||
elif main_valve_status == 0 and action == 'On':
|
||||
status[5] = 1
|
||||
status[6] = 0
|
||||
chip.set_values(status)
|
||||
time.sleep(duration)
|
||||
if duration >= 7:
|
||||
main_valve_status = 2
|
||||
elif duration < 7:
|
||||
main_valve_status = 1
|
||||
|
||||
status[5] = 0
|
||||
status[6] = 0
|
||||
chip.set_values(status)
|
||||
time.sleep(0.05)
|
||||
|
||||
# def Valve_MainWater(chip, status, action, duration=7):
|
||||
def Valve_MainWater(chip, status, action):
|
||||
global main_valve_status
|
||||
|
||||
# status[5] = 0
|
||||
# status[6] = 0
|
||||
# chip.set_values(status)
|
||||
# time.sleep(0.05)
|
||||
|
||||
# if main_valve_status != 0 and action == 'Off':
|
||||
# status[5] = 0
|
||||
# status[6] = 1
|
||||
# chip.set_values(status)
|
||||
# time.sleep(7)
|
||||
# main_valve_status = 0
|
||||
# elif main_valve_status == 0 and action == 'On':
|
||||
# status[5] = 1
|
||||
# status[6] = 0
|
||||
# chip.set_values(status)
|
||||
# time.sleep(duration)
|
||||
# if duration >= 7:
|
||||
# main_valve_status = 2
|
||||
# elif duration < 7:
|
||||
# main_valve_status = 1
|
||||
|
||||
# status[5] = 0
|
||||
# status[6] = 0
|
||||
# chip.set_values(status)
|
||||
# time.sleep(0.05)
|
||||
|
||||
def Valve_EnterWater(chip, status, action):
|
||||
if action == 'On':
|
||||
status[4] = 1
|
||||
else: # action == 'Off'
|
||||
|
@ -75,106 +162,143 @@ def Calculate_Concentration(weight):
|
|||
result = (float(weight) * volume_water * 128.5) - 126.11 # 1000 / 531 = 1.883239171
|
||||
data['data']['concentration'] = result
|
||||
# print(f'{weight}, {result}')
|
||||
return result
|
||||
|
||||
def Set_Zero(client):
|
||||
client.write_coil(1, 1)
|
||||
|
||||
def Command_Read():
|
||||
global client
|
||||
global client, main_valve_status, logger
|
||||
|
||||
with open('./control.json', 'r') as f:
|
||||
cmd = json.load(f)
|
||||
|
||||
if cmd['type'] == 'auto':
|
||||
main_duration = float(cmd['device']['main']['duration'])
|
||||
pure_duration = float(cmd['device']['pure']['duration'])
|
||||
step0_duration = float(cmd['working-time']['step0'])
|
||||
step1_duration = float(cmd['working-time']['step1'])
|
||||
step2_duration = float(cmd['working-time']['step2'])
|
||||
step3_duration = float(cmd['working-time']['step3'])
|
||||
step4_duration = float(cmd['working-time']['step4'])
|
||||
step5_duration = float(cmd['working-time']['step5'])
|
||||
step6_duration = float(cmd['working-time']['step6'])
|
||||
step7_duration = float(cmd['working-time']['step7'])
|
||||
step8_duration = float(cmd['working-time']['step8'])
|
||||
step9_duration = float(cmd['working-time']['step9'])
|
||||
|
||||
Valve_Vent(chip=output_lines, status=status, action='Off')
|
||||
Motor(chip=output_lines, status=status, action='Off')
|
||||
|
||||
mixed_duration = int(cmd['device']['mixed']['duration'])
|
||||
pure_duration = int(cmd['device']['pure']['duration'])
|
||||
pure_holding = int(cmd['device']['pure']['holding'])
|
||||
vent_duration = int(cmd['device']['vent']['duration'])
|
||||
vent_holding = int(cmd['device']['vent']['holding'])
|
||||
measure_duration = int(cmd['device']['measure']['duration'])
|
||||
enter_duration = int(cmd['device']['enter']['duration'])
|
||||
|
||||
time.sleep(5)
|
||||
# Step 0. Mesure init weight before starting the sequence
|
||||
time.sleep(step0_duration)
|
||||
start = Measure_Weight(client=client)
|
||||
|
||||
Valve_MixedWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='On')
|
||||
# Step 1. Vent pured water before input mixed water
|
||||
# Target valve status: [Motor: Off, Vent: On, Pure: Off, Enter: On, Main: On]
|
||||
# Valve_EnterWater(chip=output_lines, status=status, action='On')
|
||||
Valve_MainWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
Valve_Vent(chip=output_lines, status=status, action='On')
|
||||
time.sleep(vent_holding)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(vent_holding)
|
||||
time.sleep(0.5)
|
||||
# Valve_MainWater(chip=output_lines, status=status, action='On', duration=main_duration)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='On', duration=main_duration)
|
||||
time.sleep(step1_duration)
|
||||
|
||||
# Step 2. Empty the remaining pure water
|
||||
# Target valve status: [Motor: Off, Vent: On, Pure: Off, Enter: Off, Main: On]
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(step2_duration)
|
||||
|
||||
# Step 3. Input the mixed water
|
||||
# Target valve status: [Motor: Off, Vent: Off, Pure: Off, Enter: On, Main: On]
|
||||
Valve_Vent(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(mixed_duration)
|
||||
# Valve_EnterWater(chip=output_lines, status=status, action='On')
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='On', duration=main_duration)
|
||||
time.sleep(step3_duration)
|
||||
|
||||
Valve_MixedWater(chip=output_lines, status=status, action='Off')
|
||||
# Step 4. Mesure the weight
|
||||
# Target valve status: [Motor: Off, Vent: Off, Pure: Off, Enter: Off, Main: Off]
|
||||
Valve_MainWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(measure_duration)
|
||||
time.sleep(step4_duration)
|
||||
|
||||
|
||||
# measure weight
|
||||
end = Measure_Weight(client=client)
|
||||
time.sleep(1)
|
||||
|
||||
Calculate_Concentration(weight=(float(end)-float(start)))
|
||||
res = Calculate_Concentration(weight=(float(end)-float(start)))
|
||||
|
||||
logger.debug(f'[auto] weight: {end - start} concentration: {res:.3f}')
|
||||
|
||||
Motor(chip=output_lines, status=status, action='On')
|
||||
# Step 5. Drain the mixed water and add pure water.
|
||||
# Target valve status: [Motor: Off, Vent: On, Pure: On, Enter: On, Main: Off]
|
||||
Valve_Vent(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
|
||||
Valve_PureWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
# Valve_PureWater(chip=output_lines, status=status, action='On', duration=pure_duration)
|
||||
Valve_PureWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(step5_duration)
|
||||
|
||||
Valve_Vent(chip=output_lines, status=status, action='On')
|
||||
time.sleep(vent_duration)
|
||||
# Step 6. Drain mixed water
|
||||
# Target valve status: [Motor: Off, Vent: On, Pure: On, Enter: Off, Main: Off]
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(step6_duration)
|
||||
|
||||
# Step 7. Input pure water and clean
|
||||
# Target valve status: [Motor: On, Vent: Off, Pure: On, Enter: On, Main: Off]
|
||||
Valve_Vent(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
|
||||
# 2) Input Pure Water
|
||||
Valve_PureWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(pure_duration)
|
||||
time.sleep(0.5)
|
||||
Motor(chip=output_lines, status=status, action='On')
|
||||
time.sleep(step7_duration)
|
||||
|
||||
Valve_PureWater(chip=output_lines, status=status, action='Off')
|
||||
# Step 8. Drain pure Water
|
||||
# Target valve status: [Motor: On, Vent: On, Pure: Off, Enter: Off, Main: Off]
|
||||
Valve_Vent(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
Valve_PureWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(step8_duration)
|
||||
|
||||
# 4) Wait until empty
|
||||
Valve_Vent(chip=output_lines, status=status, action='On')
|
||||
time.sleep(vent_duration)
|
||||
time.sleep(0.5)
|
||||
|
||||
# 5) Motor Off and Vent close
|
||||
# Step 9. Stop moter
|
||||
# Target valve status: [Motor: Off, Vent: On, Pure: Off, Enter: Off, Main: Off]
|
||||
Motor(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
Valve_Vent(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
time.sleep(step9_duration)
|
||||
|
||||
return 1
|
||||
|
||||
elif cmd['type'] == 'clean':
|
||||
logger.debug(f"[clean] duration: {int(cmd['maintenance']['clean']['duration'])}")
|
||||
clean_system()
|
||||
time.sleep(3)
|
||||
|
||||
else: # cmd['type'] == 'manual'
|
||||
Motor(chip=output_lines, status=status, action=cmd['device']['motor']['action'])
|
||||
Valve_Vent(chip=output_lines, status=status, action=cmd['device']['vent']['action'])
|
||||
Valve_MixedWater(chip=output_lines, status=status, action=cmd['device']['mixed']['action'])
|
||||
# Valve_MixedWater(chip=output_lines, status=status, action=cmd['device']['mixed']['action'])
|
||||
# Valve_PureWater(chip=output_lines, status=status, action=cmd['device']['pure']['action'])
|
||||
# Valve_EnterWater(chip=output_lines, status=status, action=cmd['device']['enter']['action'])
|
||||
Valve_MainWater(chip=output_lines, status=status, action=cmd['device']['main']['action'])
|
||||
|
||||
if cmd['device']['pure']['duration'] == 0:
|
||||
Valve_PureWater(chip=output_lines, status=status, action=cmd['device']['pure']['action'])
|
||||
else:
|
||||
Valve_PureWater(chip=output_lines, status=status, action=cmd['device']['pure']['action'], duration=cmd['device']['pure']['duration'])
|
||||
|
||||
# if cmd['device']['main']['duration'] == 0:
|
||||
# Valve_MainWater(chip=output_lines, status=status, action=cmd['device']['main']['action'])
|
||||
# else:
|
||||
# Valve_MainWater(chip=output_lines, status=status, action=cmd['device']['main']['action'], duration=cmd['device']['main']['duration'])
|
||||
|
||||
if cmd['device']['main']['duration'] == 0:
|
||||
Valve_EnterWater(chip=output_lines, status=status, action=cmd['device']['enter']['action'])
|
||||
else:
|
||||
Valve_EnterWater(chip=output_lines, status=status, action=cmd['device']['enter']['action'], duration=cmd['device']['main']['duration'])
|
||||
|
||||
|
||||
if cmd['device']['measure']['action'] == 'On':
|
||||
result = Measure_Weight(client=client)
|
||||
|
@ -187,6 +311,7 @@ def Command_Read():
|
|||
return 0
|
||||
|
||||
def clean_system():
|
||||
global main_valve_status
|
||||
with open('./control.json', 'r') as f:
|
||||
cmd = json.load(f)
|
||||
|
||||
|
@ -195,15 +320,26 @@ def clean_system():
|
|||
if cmd['type'] == 'clean':
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
Valve_PureWater(chip=output_lines, status=status, action='On')
|
||||
|
||||
Valve_MainWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
Valve_MixedWater(chip=output_lines, status=status, action='On')
|
||||
Valve_PureWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(clean_duration)
|
||||
|
||||
Valve_MainWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='On')
|
||||
time.sleep(0.5)
|
||||
Valve_Vent(chip=output_lines, status=status, action='On')
|
||||
time.sleep(clean_duration)
|
||||
|
||||
Valve_PureWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
Valve_MixedWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(6)
|
||||
Valve_Vent(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
time.sleep(0.5)
|
||||
|
||||
def runAction():
|
||||
# Write the app's actions in the "runAction" function.
|
||||
|
@ -266,7 +402,7 @@ def runAction():
|
|||
time.sleep(3 - diff)
|
||||
|
||||
def handle_client(conn, ip, port):
|
||||
global data
|
||||
global data, logger
|
||||
while True:
|
||||
try:
|
||||
recv = conn.recv(100)
|
||||
|
@ -289,6 +425,8 @@ def handle_client(conn, ip, port):
|
|||
data_weight = '{:.3f}'.format(h_weight)
|
||||
data_concent = '{:.3f}'.format(h_concentration)
|
||||
|
||||
logger.debug(f'TCP [R:Transfer data] weight: {data_weight}, concent: {data_concent}')
|
||||
|
||||
send_msg = 'STX' + time_str + '|' + data_weight + '|' + data_concent + 'ETX'
|
||||
|
||||
try:
|
||||
|
@ -306,6 +444,7 @@ def handle_client(conn, ip, port):
|
|||
conn.sendall(err_msg.encode("utf8"))
|
||||
|
||||
elif message[3] == 'S': # Start measurement
|
||||
logger.debug(f'TCP [S:Start measurement]')
|
||||
try:
|
||||
with open('./control.json', 'r') as f:
|
||||
cmd = json.load(f)
|
||||
|
@ -322,6 +461,7 @@ def handle_client(conn, ip, port):
|
|||
conn.sendall(err_msg.encode("utf8"))
|
||||
|
||||
elif message[3] == 'C': # Clean sequence
|
||||
logger.debug(f'TCP [C:Clean sequence]')
|
||||
try:
|
||||
with open('./control.json', 'r') as f:
|
||||
cmd = json.load(f)
|
||||
|
@ -329,7 +469,8 @@ def handle_client(conn, ip, port):
|
|||
cmd['type'] = 'clean'
|
||||
|
||||
with open('./control.json', 'w') as f:
|
||||
json.dunp(cmd, f, indent=4)
|
||||
json.dump(cmd, f, indent=4)
|
||||
|
||||
send_msg = 'STXOKETX'
|
||||
conn.sendall(send_msg.encode("utf8"))
|
||||
except Exception as e:
|
||||
|
@ -337,6 +478,7 @@ def handle_client(conn, ip, port):
|
|||
conn.sendall(err_msg.encode("utf8"))
|
||||
|
||||
elif message[3] == 'T': # Stop measurement
|
||||
logger.debug(f'TCP [T:Stop measurement]')
|
||||
try:
|
||||
with open('./control.json', 'r') as f:
|
||||
cmd = json.load(f)
|
||||
|
@ -386,18 +528,25 @@ def start_server(addr, port):
|
|||
|
||||
soc.close()
|
||||
|
||||
def seoul_time(*args):
|
||||
utc_dt = datetime.now()
|
||||
seoul_tz = pytz.timezone('Asia/Seoul')
|
||||
return utc_dt.replace(tzinfo=pytz.utc).astimezone(seoul_tz).timetuple()
|
||||
|
||||
def exit_handler(signum, frame):
|
||||
Motor(chip=output_lines, status=status, action='Off')
|
||||
Valve_Vent(chip=output_lines, status=status, action='Off')
|
||||
Valve_MixedWater(chip=output_lines, status=status, action='Off')
|
||||
# Valve_MixedWater(chip=output_lines, status=status, action='Off')
|
||||
Valve_PureWater(chip=output_lines, status=status, action='Off')
|
||||
Valve_EnterWater(chip=output_lines, status=status, action='Off')
|
||||
Valve_MainWater(chip=output_lines, status=status, action='Off')
|
||||
|
||||
client.close()
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Set GPIO
|
||||
output_chip = gpiod.chip('gpiochip11')
|
||||
config = gpiod.line_request()
|
||||
config.consumer = 'output'
|
||||
|
@ -408,18 +557,40 @@ if __name__ == "__main__":
|
|||
|
||||
status = [0, 0, 0, 0, 0, 0, 0, 0]
|
||||
|
||||
# When forced to terminate
|
||||
signal.signal(signal.SIGINT, exit_handler)
|
||||
|
||||
# Set the logger
|
||||
logger = logging.getLogger('sampyo_dio')
|
||||
logger.setLevel(logging.DEBUG)
|
||||
handler = RotatingFileHandler('/home/root/working.log', maxBytes=1024*1024, backupCount=3)
|
||||
handler.setLevel(logging.DEBUG)
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
formatter.converter = seoul_time
|
||||
handler.setFormatter(formatter)
|
||||
logger.addHandler(handler)
|
||||
|
||||
# Initialized valves
|
||||
main_valve_status = 0
|
||||
pure_valve_status = 0
|
||||
|
||||
Valve_MainWater(chip=output_lines, status=status, action='Off')
|
||||
Valve_PureWater(chip=output_lines, status=status, action='Off')
|
||||
|
||||
# Read config file
|
||||
with open('./config.json', encoding='UTF-8') as f:
|
||||
jsonData = json.load(f)
|
||||
|
||||
# Set the weight of water in the chamber
|
||||
volume_water = 1000.0 / float(jsonData['volume-water'])
|
||||
|
||||
# Set the IP address and port of NodeQ RS-232 module and activate TCP Client
|
||||
modbus_addr = jsonData['modbus-server']['address']
|
||||
modbus_port = jsonData['modbus-server']['port']
|
||||
|
||||
client = ModbusTcpClient(modbus_addr, modbus_port)
|
||||
|
||||
# Define the default data format
|
||||
data = {
|
||||
"timestamp": 0,
|
||||
"data":{
|
||||
|
|
Loading…
Reference in New Issue