Compare commits

...

12 Commits

Author SHA1 Message Date
support.sampyo 50a6bf2373 Commit message 2024-07-30 05:22:35 +00:00
support.sampyo 5c1d08ee98 Commit message 2024-07-30 04:55:55 +00:00
support.sampyo 95921c49b8 Commit message 2024-07-30 04:50:07 +00:00
support.sampyo 44c6a224c2 Commit message 2024-07-04 06:19:55 +00:00
support.sampyo 797816a6f5 Commit message 2024-07-04 06:14:16 +00:00
support.sampyo 5c41e0664d Commit message 2024-07-04 05:50:25 +00:00
support.sampyo f54f9e7fb5 Commit message 2024-07-04 05:45:11 +00:00
support.sampyo ad62a2f89e Commit message 2024-07-04 05:26:04 +00:00
support.sampyo c566b4070e Commit message 2024-07-04 05:12:08 +00:00
support.sampyo 4239597f8a Commit message 2024-06-12 05:25:29 +00:00
support.sampyo a47d7c2bd9 Commit message 2024-06-12 05:16:08 +00:00
support.sampyo 1a6344fccf Commit message 2024-05-31 01:41:55 +00:00
3 changed files with 197 additions and 94 deletions

View File

@ -4,31 +4,41 @@
"action": "Off" "action": "Off"
}, },
"measure": { "measure": {
"action": "On", "action": "On"
"duration": 20
}, },
"mixed": { "mixed": {
"action": "Off", "action": "Off"
"duration": 7
}, },
"pure": { "pure": {
"action": "Off", "action": "Off",
"duration": 9, "duration": 1.5
"holding": 7
}, },
"enter":{ "enter":{
"action": "Off", "action": "Off"
"duration": 5
}, },
"vent": { "vent": {
"action": "On", "action": "On"
"duration": 20,
"holding": 7
}, },
"motor": { "motor": {
"action": "Off" "action": "Off"
},
"main": {
"action": "Off",
"duration": 1.5
} }
}, },
"working-time":{
"step0": 5,
"step1": 10,
"step2": 6,
"step3": 7,
"step4": 20,
"step5": 10,
"step6": 6,
"step7": 6,
"step8": 10,
"step9": 0.5
},
"maintenance": { "maintenance": {
"clean": { "clean": {
"duration": 20, "duration": 20,

View File

@ -7,5 +7,5 @@ spec:
virtualEnv: base # 사용할 가상환경 이름입니다. virtualEnv: base # 사용할 가상환경 이름입니다.
package: requirements.txt # 설치할 Python 패키지 정보 파일입니다.(기본 값은 requirement.txt 입니다.) package: requirements.txt # 설치할 Python 패키지 정보 파일입니다.(기본 값은 requirement.txt 입니다.)
stackbase: stackbase:
tagName: v0.0.37 # Stackbase(gitea)에 릴리즈 태그명 입니다. tagName: v0.0.49 # Stackbase(gitea)에 릴리즈 태그명 입니다.
repoName: sampyo-dio # Stackbase(gitea)에 저장될 저장소 이릅니다. repoName: sampyo-dio # Stackbase(gitea)에 저장될 저장소 이릅니다.

211
main.py
View File

@ -35,13 +35,34 @@ def Valve_MixedWater(chip, status, action):
chip.set_values(status) chip.set_values(status)
def Valve_PureWater(chip, status, action): def Valve_PureWater(chip, status, action, duration=7):
if action == 'On': global pure_valve_status
status[3] = 1
else: # action == 'Off'
status[3] = 0
status[2] = 0
status[3] = 0
chip.set_values(status) 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):
if action == 'On': if action == 'On':
@ -51,6 +72,35 @@ def Valve_EnterWater(chip, status, action):
chip.set_values(status) chip.set_values(status)
def Valve_MainWater(chip, status, action, duration=7):
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 Measure_Weight(client): def Measure_Weight(client):
# print('in') # print('in')
val = 0 val = 0
@ -80,102 +130,125 @@ def Set_Zero(client):
client.write_coil(1, 1) client.write_coil(1, 1)
def Command_Read(): def Command_Read():
global client global client, main_valve_status
with open('./control.json', 'r') as f: with open('./control.json', 'r') as f:
cmd = json.load(f) cmd = json.load(f)
if cmd['type'] == 'auto': 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']) # Step 0. Mesure init weight before starting the sequence
pure_duration = int(cmd['device']['pure']['duration']) time.sleep(step0_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)
start = Measure_Weight(client=client) start = Measure_Weight(client=client)
Valve_MixedWater(chip=output_lines, status=status, action='On') # Step 1. Vent pured water before input mixed water
time.sleep(0.5) # Target valve status: [Motor: Off, Vent: On, Pure: Off, Enter: On, Main: On]
Valve_EnterWater(chip=output_lines, status=status, action='On') Valve_EnterWater(chip=output_lines, status=status, action='On')
time.sleep(0.5) time.sleep(0.5)
Valve_Vent(chip=output_lines, status=status, action='On') Valve_Vent(chip=output_lines, status=status, action='On')
time.sleep(vent_holding) time.sleep(0.5)
Valve_EnterWater(chip=output_lines, status=status, action='Off') Valve_MainWater(chip=output_lines, status=status, action='On', duration=main_duration)
time.sleep(vent_holding) 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') Valve_Vent(chip=output_lines, status=status, action='Off')
time.sleep(0.5) time.sleep(0.5)
Valve_EnterWater(chip=output_lines, status=status, action='On') Valve_EnterWater(chip=output_lines, status=status, action='On')
time.sleep(mixed_duration) time.sleep(step3_duration)
Valve_MixedWater(chip=output_lines, status=status, action='Off') # Step 4. Mesure the weight
time.sleep(0.5) # Target valve status: [Motor: Off, Vent: Off, Pure: Off, Enter: Off, Main: Off]
Valve_EnterWater(chip=output_lines, status=status, action='Off') Valve_EnterWater(chip=output_lines, status=status, action='Off')
time.sleep(measure_duration) time.sleep(0.5)
Valve_MainWater(chip=output_lines, status=status, action='Off')
# measure weight time.sleep(step4_duration)
end = Measure_Weight(client=client) end = Measure_Weight(client=client)
time.sleep(1) time.sleep(1)
Calculate_Concentration(weight=(float(end)-float(start))) Calculate_Concentration(weight=(float(end)-float(start)))
# Step 5. Drain the mixed water and add pure water.
Motor(chip=output_lines, status=status, action='On') # Target valve status: [Motor: Off, Vent: On, Pure: On, Enter: On, Main: Off]
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') Valve_EnterWater(chip=output_lines, status=status, action='On')
time.sleep(0.5) time.sleep(0.5)
Valve_Vent(chip=output_lines, status=status, action='On') Valve_Vent(chip=output_lines, status=status, action='On')
time.sleep(vent_duration) time.sleep(0.5)
Valve_PureWater(chip=output_lines, status=status, action='On', duration=pure_duration)
time.sleep(step5_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_EnterWater(chip=output_lines, status=status, action='On')
time.sleep(0.5)
Valve_Vent(chip=output_lines, status=status, action='Off') Valve_Vent(chip=output_lines, status=status, action='Off')
time.sleep(0.5) time.sleep(0.5)
Motor(chip=output_lines, status=status, action='On')
time.sleep(step7_duration)
# 2) Input Pure Water # Step 8. Drain pure Water
Valve_PureWater(chip=output_lines, status=status, action='On') # Target valve status: [Motor: On, Vent: On, Pure: Off, Enter: Off, Main: Off]
time.sleep(0.5)
Valve_EnterWater(chip=output_lines, status=status, action='On')
time.sleep(pure_duration)
Valve_PureWater(chip=output_lines, status=status, action='Off')
time.sleep(0.5)
Valve_EnterWater(chip=output_lines, status=status, action='Off') Valve_EnterWater(chip=output_lines, status=status, action='Off')
time.sleep(0.5) time.sleep(0.5)
# 4) Wait until empty
Valve_Vent(chip=output_lines, status=status, action='On') Valve_Vent(chip=output_lines, status=status, action='On')
time.sleep(vent_duration)
time.sleep(0.5) time.sleep(0.5)
Valve_PureWater(chip=output_lines, status=status, action='Off')
time.sleep(step8_duration)
# 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') Motor(chip=output_lines, status=status, action='Off')
time.sleep(0.5) time.sleep(step9_duration)
Valve_Vent(chip=output_lines, status=status, action='Off')
time.sleep(0.5)
return 1 return 1
elif cmd['type'] == 'clean': elif cmd['type'] == 'clean':
clean_system() clean_system()
time.sleep(3)
else: # cmd['type'] == 'manual' else: # cmd['type'] == 'manual'
Motor(chip=output_lines, status=status, action=cmd['device']['motor']['action']) Motor(chip=output_lines, status=status, action=cmd['device']['motor']['action'])
Valve_Vent(chip=output_lines, status=status, action=cmd['device']['vent']['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_PureWater(chip=output_lines, status=status, action=cmd['device']['pure']['action'])
Valve_EnterWater(chip=output_lines, status=status, action=cmd['device']['enter']['action']) Valve_EnterWater(chip=output_lines, status=status, action=cmd['device']['enter']['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']['measure']['action'] == 'On': if cmd['device']['measure']['action'] == 'On':
result = Measure_Weight(client=client) result = Measure_Weight(client=client)
Calculate_Concentration(result) Calculate_Concentration(result)
@ -187,6 +260,7 @@ def Command_Read():
return 0 return 0
def clean_system(): def clean_system():
global main_valve_status
with open('./control.json', 'r') as f: with open('./control.json', 'r') as f:
cmd = json.load(f) cmd = json.load(f)
@ -195,15 +269,26 @@ def clean_system():
if cmd['type'] == 'clean': if cmd['type'] == 'clean':
Valve_EnterWater(chip=output_lines, status=status, action='Off') Valve_EnterWater(chip=output_lines, status=status, action='Off')
time.sleep(0.5) 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) 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) time.sleep(clean_duration)
Valve_PureWater(chip=output_lines, status=status, action='Off') Valve_PureWater(chip=output_lines, status=status, action='Off')
time.sleep(0.5) time.sleep(0.5)
Valve_MixedWater(chip=output_lines, status=status, action='Off') Valve_Vent(chip=output_lines, status=status, action='Off')
time.sleep(6) time.sleep(0.5)
Valve_EnterWater(chip=output_lines, status=status, action='Off')
time.sleep(0.5)
def runAction(): def runAction():
# Write the app's actions in the "runAction" function. # Write the app's actions in the "runAction" function.
@ -329,7 +414,8 @@ def handle_client(conn, ip, port):
cmd['type'] = 'clean' cmd['type'] = 'clean'
with open('./control.json', 'w') as f: with open('./control.json', 'w') as f:
json.dunp(cmd, f, indent=4) json.dump(cmd, f, indent=4)
send_msg = 'STXOKETX' send_msg = 'STXOKETX'
conn.sendall(send_msg.encode("utf8")) conn.sendall(send_msg.encode("utf8"))
except Exception as e: except Exception as e:
@ -389,9 +475,10 @@ def start_server(addr, port):
def exit_handler(signum, frame): def exit_handler(signum, frame):
Motor(chip=output_lines, status=status, action='Off') Motor(chip=output_lines, status=status, action='Off')
Valve_Vent(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_PureWater(chip=output_lines, status=status, action='Off')
Valve_EnterWater(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() client.close()
@ -410,6 +497,12 @@ if __name__ == "__main__":
signal.signal(signal.SIGINT, exit_handler) signal.signal(signal.SIGINT, exit_handler)
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')
with open('./config.json', encoding='UTF-8') as f: with open('./config.json', encoding='UTF-8') as f:
jsonData = json.load(f) jsonData = json.load(f)