pyren/pyren3/scen_ecri_fap5.py

272 lines
7.4 KiB
Python
Executable File

#!/usr/bin/env python3
'''
Scenarium usage example
Name of this script should be exactly the same as in scenaruim URL but with '.py' extension
URL - scm:scen_ecri_fap5#scen_ecri_fap5_xxxxx.xml
'run' procedure will be executed by pyren script
'''
import os
import sys
import re
import time
import mod_globals
import mod_utils
import mod_ecu
import mod_db_manager
from mod_utils import pyren_encode
from mod_utils import clearScreen
from mod_utils import KBHit
import xml.dom.minidom
#def get_message( value ):
# if value.isdigit() and value in mod_globals.language_dict.keys():
# value = pyren_encode( mod_globals.language_dict[value] )
# print value
def run( elm, ecu, command, data ):
'''
MAIN function of scenarium
Parameters:
elm - refernce to adapter class
ecu - reference to ecu class
command - refernce to the command this scenarium belongs to
data - name of xml file with parameters from scenarium URL
'''
clearScreen()
header = '['+command.codeMR+'] '+command.label
ScmSet = {}
ScmParam = {}
def get_message( msg ):
if msg in list(ScmParam.keys()):
value = ScmParam[msg]
else:
value = msg
if value.isdigit() and value in list(mod_globals.language_dict.keys()):
value = pyren_encode( mod_globals.language_dict[value] )
return value
def get_message_by_id( id ):
if id.isdigit() and id in list(mod_globals.language_dict.keys()):
value = pyren_encode( mod_globals.language_dict[id] )
return value
#
# Data file parsing
#
DOMTree = xml.dom.minidom.parse(mod_db_manager.get_file_from_clip(data))
ScmRoom = DOMTree.documentElement
ScmParams = ScmRoom.getElementsByTagName("ScmParam")
for Param in ScmParams:
name = pyren_encode( Param.getAttribute("name") )
value = pyren_encode( Param.getAttribute("value") )
ScmParam[name] = value
ScmSets = ScmRoom.getElementsByTagName("ScmSet")
for Set in ScmSets:
setname = pyren_encode(mod_globals.language_dict[Set.getAttribute("name")])
ScmParams = Set.getElementsByTagName("ScmParam")
for Param in ScmParams:
name = pyren_encode( Param.getAttribute("name") )
value = pyren_encode( Param.getAttribute("value") )
ScmSet[setname]= value
ScmParam[name] = value
#
# Renew info about min/max values
#
GenPow = ecu.get_ref_pr(ScmParam['Param7']) #Generator power
GenPow.min = ScmParam['AltValueMin']
GenPow.max = ScmParam['AltValueMax']
PartMass = ecu.get_ref_pr(ScmParam['Param6']) #Particle mass
PartMass.min = ScmParam['s_masse_suie_actif']
PartMass.max = ScmParam['s_masse_suie_max']
#
# Important information
#
clearScreen()
print(pyren_encode(header))
print()
print(get_message('SCMTitle'))
print()
print(get_message('Informations'))
print()
print('*'*80)
print()
print(get_message_by_id('1144'))
print()
print(get_message_by_id('1145'))
print()
print(get_message_by_id('1146'))
print()
ch = input('Press ENTER to continue')
clearScreen()
print(pyren_encode(header))
print()
print(get_message('SCMTitle'))
print()
print('*'*80)
print()
print(get_message_by_id('1147'))
print()
print(get_message_by_id('1148'))
print()
ch = input('Press ENTER to continue')
#
# Check conditions
#
State1_ref = ecu.get_ref_st(ScmParam['State1']) #Engine state
value7, datastr7 = ecu.get_st(ScmParam['State1'])
kb = KBHit()
while pyren_encode(value7) != pyren_encode( mod_globals.language_dict[ScmParam['TOURNANT']]):
value7, datastr7 = ecu.get_st(ScmParam['State1'])
value5, datastr5 = ecu.get_pr(ScmParam['Param6'])
value6, datastr6 = ecu.get_pr(ScmParam['Param7'])
clearScreen()
print(pyren_encode(header))
print()
print(get_message('SCMTitle'))
print()
print('\tCHECK CONDITIONS')
print()
print('*'*90)
print(pyren_encode(datastr7))
print(pyren_encode(datastr5))
print(pyren_encode(datastr6))
print('*'*90)
print(get_message_by_id('1149'))
print()
print('Strat the engine and press ENTER to continue')
print('Q to exit or A to continue anyway')
if kb.kbhit():
c = kb.getch()
if len(c)!=1: continue
if c=='q' or c=='Q':
kb.set_normal_term()
return
elif c=='a' or c=='A':
kb.set_normal_term()
break
time.sleep( 0.2 )
#
# Ask permission to start
#
clearScreen()
print(pyren_encode(header))
print()
ch = input('Are you ready to start regeneration? <yes/no>:')
if ch.lower()!='yes': return
#
# Start regeneration
#
responce = ecu.run_cmd(ScmParam['Cmde1'])
#
# Main cycle
#
begin_time = time.time()
Phase_state = ecu.get_ref_st(ScmParam['State2'])
Result_state = ecu.get_ref_st(ScmParam['State3'])
kb = KBHit()
pfe = 0
while( 1 ):
# get all values before showing them for avoid screen flickering
value0, datastr0 = ecu.get_pr(ScmParam['Param1'])
value1, datastr1 = ecu.get_pr(ScmParam['Param2'])
value2, datastr2 = ecu.get_pr(ScmParam['Param3'])
value3, datastr3 = ecu.get_pr(ScmParam['Param4'])
value4, datastr4 = ecu.get_pr(ScmParam['Param5'])
value5, datastr5 = ecu.get_pr(ScmParam['Param6'])
value6, datastr6 = ecu.get_pr(ScmParam['Param7'])
value7, datastr7 = ecu.get_st(ScmParam['State1'])
value8, datastr8 = ecu.get_st(ScmParam['State2']) # Phase
value9, datastr9 = ecu.get_st(ScmParam['State3']) # Result status
valuea, datastra = ecu.get_st(ScmParam['State4'])
#test
#value8 = 6
#value9 = 3
current_time = time.time()
elapsed = int(current_time-begin_time)
minutes, seconds = divmod(elapsed, 60)
hours, minutes = divmod(minutes, 60)
#
# Check phase
#
etat = pyren_encode(value8)
if etat == get_message('ETAT1'): phase = get_message('Phase1'); pfe = 0
elif etat == get_message('ETAT2'): phase = get_message('Phase2'); pfe = 0
elif etat == get_message('ETAT3'): phase = get_message('Phase3'); pfe = 0
elif etat == get_message('ETAT4'): phase = get_message('Phase4'); pfe = 0
elif etat == get_message('ETAT5'): phase = get_message('Phase5'); pfe = 1
elif etat == get_message('ETAT6'): phase = get_message('Phase6'); pfe = 2
else: phase = etat
#
# Check result
#
rescode = pyren_encode(value9)
result = pyren_encode( mod_globals.language_dict[ScmSet[rescode]])
clearScreen()
print(pyren_encode(header))
print('\tTime - ',"{hours:02d}:{minutes:02d}:{seconds:02d}".format(**vars()))
print('\tPhase - ', phase)
#print '\tResult - ', result
print('*'*90)
print(pyren_encode(datastr0))
print(pyren_encode(datastr1))
print(pyren_encode(datastr2))
print(pyren_encode(datastr3))
print(pyren_encode(datastr4))
print(pyren_encode(datastr5))
print(pyren_encode(datastr6))
print(pyren_encode(datastr7))
print(pyren_encode(datastr8))
print(pyren_encode(datastr9))
print(pyren_encode(datastra))
print('*'*90)
if pfe: break
print('Press Q to emergency exit')
if kb.kbhit():
c = kb.getch()
if len(c)!=1: continue
if c=='q' or c=='Q':
kb.set_normal_term()
responce = ecu.run_cmd(ScmParam['Cmde2'])
break
time.sleep( 0.2 )
if pfe:
print('\tPhase - ', phase)
print('\tResult - ', result)
print('*'*90)
ch = input('Press ENTER to exit')