4 Commits

Author SHA1 Message Date
340d48876b 10. [APIs: all]: 添加了 logger.setLevel(INFO),只有添加这个,单个模块内才生效 2024-08-01 19:15:08 +08:00
60726d9d07 7. [APIs: btn_functions.py]: 重写了告警输出函数,从日志中拿数据
8. [APIs: aio.py]: 将日志框输出的内容,也保存至日志文件
9. [APIs: do_brake.py]
   - 修改获取初始速度的逻辑,只获取configs文件中配置的时间内的速度
   - 新增 configs 参数 single_brake,可针对特定条件做测试
2024-08-01 17:11:12 +08:00
e713485d00 fix merge 2024-07-31 16:14:41 +08:00
a7984a613d v0.2.0.4(2024/07/30)
1. [APIs: do_brake.py]: 修复制动数据处理过程中,只取曲线的最后 240 个数据
2. [APIs: aio.py]: 判定版本处,删除 self.destroy(),因为该语句会导致异常发生
2024-07-30 12:30:37 +08:00
13 changed files with 78 additions and 37 deletions

View File

@ -558,6 +558,12 @@ v0.2.0.3(2024/07/27)
2. [APIs: do_current.py]: 精简程序,解决 OOM 问题
3. [APIs: factory_test.py]: 精简程序,解决 OOM 问题
4. [APIsL openapi.py]
- 心跳修改为 1 s因为 OOM 问题的解决依赖于长久的打开曲线开关,此时对于 hr.c_msg 的定时清理是个挑战,将心跳缩短,有利于清理日志后,避免丢失心跳
- 新增 diagnosis.save 命令,但是执行时,有问题,待解决
v0.2.0.4(2024/07/30)
1. [APIs: do_brake.py]: 修复制动数据处理过程中,只取曲线的最后 240 个数据
2. [APIs: aio.py]: 判定版本处,删除 self.destroy(),因为该语句会导致异常发生
- 心跳修改为 1s因为 OOM 问题的解决依赖于长久的打开曲线开关,此时对于 hr.c_msg 的定时清理是个挑战,将心跳缩短,有利于清理日志后,避免丢失心跳
- 新增 diagnosis.save 命令,但是执行时,有问题,待解决
@ -584,5 +590,9 @@ v0.2.0.5(2024/07/31)
- 保持电流,只取最后 15s
- 优化 ssh 输入密码的部分
6. [t_change_ui: all the part]: 引入 commons 包,并定制了 logging 输出,后续持续优化
7. [APIs: btn_functions.py]: 重写了告警输出函数,从日志中拿数据
8. [APIs: aio.py]: 将日志框输出的内容,也保存至日志文件
9. [APIs: do_brake.py]
- 修改获取初始速度的逻辑只获取configs文件中配置的时间内的速度
- 新增 configs 参数 single_brake可针对特定条件做测试
10. [APIs: all]: 添加了 logger.setLevel(INFO),只有添加这个,单个模块内才生效

Binary file not shown.

View File

@ -14,7 +14,7 @@ from commons import openapi, clibs
from matplotlib.pyplot import rcParams, figure, subplots_adjust, close
from matplotlib import use
from pandas import DataFrame, read_excel
import logging
from logging import getLogger, INFO
with open(clibs.log_data, 'w') as _:
for i in range(1, 11):
@ -22,7 +22,8 @@ with open(clibs.log_data, 'w') as _:
remove(f'{clibs.log_data}.{i}')
except FileNotFoundError:
pass
logger = logging.getLogger(__file__)
logger = getLogger(__file__)
logger.setLevel(INFO)
logger.info("日志文件初始化完成...")
use('Agg')
@ -449,6 +450,7 @@ class App(customtkinter.CTk):
self.textbox.tag_add(color, 'insert', 'end')
self.textbox.tag_config(tagName=color, foreground=color)
tab_name_cur = self.tabview.get()
logger.info(text)
if tab_name == tab_name_cur:
if wait != 0:

View File

@ -1,10 +1,11 @@
from json import loads
from sys import argv
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
tab_name = clibs.tab_names['at']
logger = getLogger(__file__)
logger.setLevel(INFO)
def trigger_estop(md, w2t):
@ -38,12 +39,15 @@ def get_state(hr, w2t):
def warning_info(hr, w2t):
for msg in hr.c_msg:
if 'alarm' in msg.lower():
w2t(str(loads(msg)), tab_name=tab_name)
for msg in hr.c_msg_xs:
if 'alarm' in msg.lower():
w2t(str(loads(msg)), tab_name=tab_name)
for postfix in ['', '.2', '.3', '.4', '.5', '.6', '.7', '.8', '.9', '.10']:
log_name = clibs.log_data + postfix
try:
with open(log_name, 'r', encoding='utf-8') as f_log:
for line in f_log:
if 'alarm' in line:
w2t(line.strip(), tab_name=tab_name)
except FileNotFoundError:
pass
def main(hr, md, func, w2t):

View File

@ -5,11 +5,12 @@ from paramiko import SSHClient, AutoAddPolicy
from json import loads
from openpyxl import load_workbook
from pandas import DataFrame, concat
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
tab_name = clibs.tab_names['at']
logger = getLogger(__file__)
logger.setLevel(INFO)
def check_files(path, loadsel, data_dirs, data_files, w2t):
@ -61,7 +62,7 @@ def gen_result_file(path, curve_data, axis, _reach, _load, _speed, count):
_d2d_vel = {'hw_joint_vel_feedback': []}
_d2d_trq = {'device_servo_trq_feedback': []}
_d2d_stop = {'device_safety_estop': []}
for data in curve_data[-240:]:
for data in curve_data[-240:]: # 保留最后12s的数据
dict_results = data['data']
for item in dict_results:
try:
@ -85,6 +86,7 @@ def gen_result_file(path, curve_data, axis, _reach, _load, _speed, count):
def run_rl(path, loadsel, hr, md, config_file, result_dirs, w2t):
_count = 0
_total = 63
display_pdo_params = [
{"name": "hw_joint_vel_feedback", "channel": 0},
{"name": "hw_joint_vel_feedback", "channel": 1},
@ -104,6 +106,8 @@ def run_rl(path, loadsel, hr, md, config_file, result_dirs, w2t):
ws = wb['Target']
write_diagnosis = float(ws.cell(row=3, column=10).value)
get_init_speed = float(ws.cell(row=4, column=10).value)
single_brake = str(ws.cell(row=5, column=10).value)
if ws.cell(row=1, column=1).value == 'positive':
md.write_pon(1)
elif ws.cell(row=1, column=1).value == 'negative':
@ -118,7 +122,19 @@ def run_rl(path, loadsel, hr, md, config_file, result_dirs, w2t):
_load = condition.split('_')[1].removeprefix('load')
_speed = condition.split('_')[2].removeprefix('speed')
# for single condition test
_single_axis = 0
if single_brake != '0':
_total = 3
_single_axis = int(single_brake.split('-')[0])
if _reach != single_brake.split('-')[1] or _load != single_brake.split('-')[2] or _speed != single_brake.split('-')[3]:
continue
for axis in range(1, 4):
# for single condition test
if _single_axis != 0 and _single_axis != axis:
continue
md.write_axis(axis)
speed_max = 0
if axis == 3 and _reach != '100':
@ -130,7 +146,7 @@ def run_rl(path, loadsel, hr, md, config_file, result_dirs, w2t):
_count += 1
this_time = strftime("%Y-%m-%d %H:%M:%S", localtime(time()))
prj_path = 'target/_build/target.prj'
w2t(f"[{this_time} | {_count}/63] 正在执行 {axis}{condition} 的第 {count} 次制动测试...", 0, 0, 'purple', tab_name)
w2t(f"[{this_time} | {_count}/{_total}] 正在执行 {axis}{condition} 的第 {count} 次制动测试...", 0, 0, 'purple', tab_name)
# 1. 关闭诊断曲线,触发软急停,并解除,目的是让可能正在运行着的机器停下来,切手动模式并下电
md.trigger_estop()
@ -180,13 +196,17 @@ def run_rl(path, loadsel, hr, md, config_file, result_dirs, w2t):
w2t("20s内未收到机器人的运行信号需要确认RL程序编写正确并正常执行...", 0, 111, 'red', tab_name)
else:
sleep(1)
# 4. 打开诊断曲线,并执行采集,之后触发软急停,关闭曲线采集,找出最大速度传递给RL程序最后清除相关记录
sleep(get_init_speed) # 获取实际最大速度可通过configs.xlsx配置
# 4. 找出最大速度传递给RL程序最后清除相关记录
sleep(get_init_speed+5) # 冗余5s指定时间后获取实际【正|负】方向的最大速度可通过configs.xlsx配置
clibs.execution('rl_task.stop', hr, w2t, tab_name, tasks=['brake'])
# 找出最大速度
_c_msg = hr.c_msg.copy()
_number = 0
for _msg in _c_msg:
if _number > get_init_speed*20: # 最开始回零点的时候,二轴速度可以达到最大值,实际摆动时,某一方向可能达不到
break
if 'diagnosis.result' in _msg:
_number += 1
dict_results = loads(_msg)['data']
for item in dict_results:
if item.get('channel', None) == axis-1 and item.get('name', None) == 'hw_joint_vel_feedback':
@ -195,7 +215,7 @@ def run_rl(path, loadsel, hr, md, config_file, result_dirs, w2t):
speed_max = max(_, speed_max)
elif ws.cell(row=1, column=1).value == 'negative':
speed_max = min(_, speed_max)
print(f"speed max = {speed_max}")
logger.info(f"speed max = {speed_max}")
speed_max = abs(speed_max)
speed_target = float(ws.cell(row=3, column=axis+1).value) * float(_speed) / 100
if speed_max < speed_target*0.95 or speed_max > speed_target*1.05:

View File

@ -4,10 +4,12 @@ from sys import argv
from paramiko import SSHClient, AutoAddPolicy
from json import loads
from pandas import DataFrame, concat
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
logger = getLogger(__file__)
logger.setLevel(INFO)
tab_name = clibs.tab_names['at']
display_pdo_params = [
{"name": "hw_joint_vel_feedback", "channel": 0},
@ -64,7 +66,7 @@ def data_proc_regular(path, filename, channel, scenario_time):
lines = f_obj.readlines()
_d2d_vel = {'hw_joint_vel_feedback': []}
_d2d_trq = {'device_servo_trq_feedback': []}
for line in lines:
for line in lines[-500:]: # 保留最后25s的数据
data = eval(line.strip())['data']
for item in data:
try:
@ -168,7 +170,7 @@ def data_proc_regular(path, filename, channel, scenario_time):
lines = f_obj.readlines()
_d2d_vel = {'hw_joint_vel_feedback': []}
_d2d_trq = {'device_servo_trq_feedback': []}
for line in lines[-300:]:
for line in lines[-300:]: # 保留最后15s的数据
data = eval(line.strip())['data']
for item in data:
try:

View File

@ -38,21 +38,16 @@ durable_data_current_max = {
'axis6': [0 for _ in range(18)],
}
fmt = Formatter('%(asctime)s # %(levelname)s-%(filename)s-%(funcName)s # %(message)s')
# file_handler = logging.FileHandler(log_data)
# file_handler = RotatingFileHandler(filename=log_data, backupCount=10, maxBytes=50*1024*1024, encoding='utf-8')
file_handler = ConcurrentRotatingFileHandler(filename=log_data, backupCount=10, maxBytes=50*1024*1024, encoding='utf-8')
file_handler.setFormatter(fmt)
file_handler.setLevel(INFO)
console_handler = StreamHandler()
console_handler.setFormatter(fmt)
console_handler.setLevel(ERROR)
console_handler.setLevel(WARNING)
# basicConfig(level=WARNING, # for product
basicConfig(level=WARNING,
basicConfig( # level=INFO,
datefmt='%Y-%m-%dT%H:%M:%S',
# handlers=[file_handler]) # for product
handlers=[file_handler, console_handler])
format='%(asctime)s # %(levelname)s-%(filename)s-%(funcName)s # %(message)s',
handlers=[file_handler, console_handler],
)
class GetThreadResult(Thread):

View File

@ -6,10 +6,12 @@ from time import time, sleep
from pymodbus.client.tcp import ModbusTcpClient
from pymodbus.payload import BinaryPayloadDecoder, BinaryPayloadBuilder
from pymodbus.constants import Endian
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
logger = getLogger(__file__)
logger.setLevel(INFO)
class ModbusRequest(object):
def __init__(self, w2t):
@ -261,7 +263,7 @@ class HmiRequest(object):
def msg_storage(self, response, flag=0):
# response是解码后的字符串
messages = self.c_msg if flag == 0 else self.c_msg_xs
logger.warning(f"{loads(response)}")
logger.info(f"{loads(response)}")
if 'move.monitor' in response:
pass
elif len(messages) < 10000:

View File

@ -5,10 +5,11 @@ from openpyxl import load_workbook
from time import time, sleep, strftime, localtime
from threading import Thread
from pandas import read_csv
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
logger = getLogger(__file__)
logger.setLevel(INFO)
def check_files(path, raw_data_dirs, result_files, w2t):

View File

@ -5,10 +5,11 @@ from re import match
from threading import Thread
from time import sleep
from csv import reader, writer
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
logger = getLogger(__file__)
logger.setLevel(INFO)
def w2t_local(msg, wait, w2t):

View File

@ -3,10 +3,11 @@ import pdfplumber
from openpyxl import load_workbook
from os import remove
from sys import argv
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
logger = getLogger(__file__)
logger.setLevel(INFO)
def p_iso(file, p_files, ws, tmpfile):

View File

@ -2,10 +2,11 @@ from pandas import read_csv
from csv import reader
from sys import argv
from openpyxl import Workbook
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
logger = getLogger(__file__)
logger.setLevel(INFO)
def find_point(bof, step, pos, data_file, flag, df, row, w2t):

View File

@ -6,10 +6,12 @@ from openpyxl import load_workbook
from math import sqrt
from numpy import power
from csv import writer
from logging import getLogger
from logging import getLogger, INFO
from commons import clibs
logger = getLogger(__file__)
logger.setLevel(INFO)
tab_name = clibs.tab_names['da']
count = 0
display_pdo_params = [