def set_value(self): if (settings.debug_mode): send_logger('获取变量:' + self.c_name + ' 值' + str(self.value)) #生产方法 #self.value = libc.UniGetValue(c_ulong(self.hash)) #测试方法 self.value = self.id
def put_value(self): #首先将输出变量约束在阈值范围内 if (self.max_value and self.value > self.max_value): self.value = self.max_value if (self.min_value and self.value < self.min_value): self.value = self.min_value #然后执行写入dll if (settings.debug_mode): send_logger('写入变量:' + self.c_name + ' 值:' + str(self.value))
def finish(): global timer_input global timer_global_entry global running_status global pause_flag send_logger('全部工况执行完毕' + ' 时间 ' + time.strftime('%H:%M:%S', time.localtime(time.time()))) step_end() pause_flag = None stop_flag = False running_status = False timer_input.cancel() timer_input = None timer_global_entry.cancel() timer_global_entry = None
def run(self, pause_flag): if (stop_flag['flag']): send_logger('用户停止工况执行' + ' 时间 ' + time.strftime('%H:%M:%S',time.localtime(time.time()))) return #工况暂停功能,线程挂起 pause_flag.wait() global user_var_output global user_condition global running_status #向前端发送执行通知 send_step(self.con_id, self.id, self.con_name) send_logger('工况 ' + self.con_name + ' 条目id ' + str(self.id) + ' 时间 ' + time.strftime('%H:%M:%S',time.localtime(time.time()))) #执行自定义脚本 if (self.code): exec(self.code) #执行变量赋值语句 if (self.var_entry_list): for temp in self.var_entry_list: #code存在则执行操作 if (temp.get('code')): try: code_str = temp.get('code') #处理赋值语句 if (code_str.startswith('=')): #去除等号 code_str = code_str[1:] #处理正负数赋值 user_var_output[temp.get('var_id')].value = float(code_str) #处理计算语句(直接以加号,减号开始的语句) else: exec("user_var_output[temp.get('var_id')].value = user_var_output[temp.get('var_id')].value" + temp.get('code')) except: send_logger('工况' + self.con_name + ' 条目 ' + str(self.id) + ' 中的变量输入有误,变量ID ' + str(temp.get('var_id')) + ' 变量语句 ' + temp.get('code')) else: user_var_output[temp.get('var_id')].put_value() #消耗执行时间 time.sleep(self.duration) if (self.next_entry): self.next_entry.run(pause_flag) else: send_logger('工况 ' + self.con_name + ' 条目全部执行完毕' + ' 时间 ' + time.strftime('%H:%M:%S',time.localtime(time.time())))
def init_env(): global user_var_input global user_var_output global user_condition global global_entry global timer db = get_db() #加载输入变量 if (settings.debug_mode): send_logger('输入变量清空') user_var_input.clear() if (settings.debug_mode): send_logger('输入变量加载中') input_rows = db.execute( 'SELECT * from user_static_var WHERE is_input = 1').fetchall() for temp in input_rows: user_var_input[temp.get('id')] = User_var_input( temp.get('id'), temp.get('c_name'), temp.get('e_name'), temp.get('code')) if (settings.debug_mode): send_logger('输入变量加载完成') #输入变量开始循环加载 makeTimer() #加载输出变量 if (settings.debug_mode): send_logger('输出变量清空') user_var_output.clear() if (settings.debug_mode): send_logger('输出变量加载中') output_rows = db.execute( 'SELECT * from user_static_var WHERE is_input = 0').fetchall() for temp in output_rows: user_var_output[temp.get('id')] = User_var_output( temp.get('id'), temp.get('c_name'), temp.get('e_name'), temp.get('code'), temp.get('min_value'), temp.get('max_value')) if (settings.debug_mode): send_logger('输出变量加载完成') #变量加载完毕,开始加载全局工况 if (settings.debug_mode): send_logger('全局工况清空') global_entry.clear() if (settings.debug_mode): send_logger('全局工况加载中') global_entry_rows = db.execute( 'SELECT * from user_global_entry WHERE open = 1').fetchall() for temp in global_entry_rows: #如果该时间频率的列表还未创建,则创建相应的列表 if (global_entry.get(temp.get('multiple')) == None): global_entry[temp.get('multiple')] = [] #将全局工况加载入执行列表中 global_entry[temp.get('multiple')].append(temp) if (settings.debug_mode): send_logger('全局工况加载完成') #加载完毕后输出测试 # for key in global_entry: # for temp in global_entry[key]: # send_logger('全局工况名称:' + temp.get('c_name') + ' ,执行频率:' + str(key)) #全局工况开始运行 runGlobalEntry() if (settings.debug_mode): send_logger('全局开始运行') #加载工况及条目 if (settings.debug_mode): send_logger('运行工况清空') user_condition.clear() if (settings.debug_mode): send_logger('运行工况加载中') #首先将工况加载为字典,id作为其主键 output_rows = db.execute('SELECT * FROM user_condition').fetchall() for temp in output_rows: user_condition[temp.get('id')] = User_condition( temp.get('id'), temp.get('c_name')) #循环遍历工况,为每个工况加载条目,在条目中需要加载变量计算code for key in user_condition: #按序加载工况条目,填充进入工况对象 output_rows = db.execute( 'SELECT * from user_condition_entry WHERE con_id = ? ORDER BY seq ASC', (key, )).fetchall() for temp in output_rows: #创建一个条目并填充进入工况中的list temp_entry = User_condition_entry(temp.get('id'), temp.get('con_id'), temp.get('duration'), temp.get('code'), user_condition[key].c_name) #查询条目中的变量计算,并填充进入条目 entry_cal = db.execute( 'SELECT * from user_var_entry WHERE con_id = ? AND entry_id = ?', (key, temp.get('id'))).fetchall() temp_entry.var_entry_list = entry_cal #将entry条目保存至工况 user_condition[key].entry_list.append(temp_entry) #遍历本条工况中的entry_list,为所有条目制定next属性 for x in range(len(user_condition[key].entry_list)): if (x < len(user_condition[key].entry_list) - 1): user_condition[key].entry_list[x].next_entry = user_condition[ key].entry_list[x + 1] if (settings.debug_mode): send_logger('工况 ' + user_condition[key].c_name + ' 加载完成') if (settings.debug_mode): send_logger('运行工况全部加载完成') #刷新前端的step refrash_step()
def run(self, pause_flag): if (self.entry_list): send_logger('执行工况 ' + self.c_name + ' ' + time.strftime('%H:%M:%S',time.localtime(time.time()))) self.entry_list[0].run(pause_flag) else: send_logger('工况 ' + self.c_name + ' 中没有内容,停止运行')