feat: add AS status feedback for both HMI sizes with verified v2.7 release

This commit is contained in:
shenlefengnai-rgb
2026-10-07 16:32:42 +08:00
parent dba8aa5ea9
commit e6556fc218
245 changed files with 21470 additions and 159 deletions
@@ -0,0 +1,35 @@
from pathlib import Path
import sys,time,json
sys.path.insert(0,'D:/YMR/AMI/tmp')
import migrate_hmi as h
R=Path('D:/YMR/AMI');O=R/'docs/evidence/2026-10-07/small-as-status'
large=(R/'scripts/hmi/TJC8048X370_011/dash-status-render.txt').read_text(encoding='utf-8')
ascode=large[large.index('if(as_state!=shown_as)'):].replace('330,379,174,53,4,','194,215,108,30,0,').replace('Manual Driving','有人驾驶')
renderer=(R/'scripts/hmi/dash-status-render.txt').read_text(encoding='utf-8')
if 'if(as_state!=shown_as)' not in renderer:renderer=renderer.rstrip()+'\n'+ascode
(R/'scripts/hmi/dash-status-render.txt').write_text(renderer,encoding='utf-8')
post='shown_task=-1\nshown_lock=-1\nshown_ebs=-1\nshown_as=-1\n'+renderer
(R/'scripts/hmi/dash-postinit.txt').write_text(post,encoding='utf-8')
h.N.set_focus();h.page(0);h.select('sd(文本)')
(O/'lock-before.json').write_text(json.dumps(h.props(),ensure_ascii=False,indent=2),encoding='utf-8')
for k,v in [('x',126),('w',66)]:
h.G.element_info.element.SetFocus();h.pg.hotkey('ctrl','end');time.sleep(.4);h.refresh_cells()
cell=h.CELL_MAP[k];r=cell.rectangle();h.pg.doubleClick((r.left+r.right)//2,(r.top+r.bottom)//2,interval=.1);time.sleep(.4);h.pg.hotkey('ctrl','a');h.pg.write(str(v));h.pg.press('enter');time.sleep(.2)
h.refresh_cells();assert h.props()[k]==str(v),(k,h.props())
(O/'lock-after.json').write_text(json.dumps(h.props(),ensure_ascii=False,indent=2),encoding='utf-8')
for item,tab,code in [('dash(页面)',1550,post),('tm0(定时器)',1330,renderer)]:
h.select(item);actual=h.event_text(tab,code);assert ''.join(actual.split())==''.join(code.split())
h.W.child_window(title='Program.s',control_type='Button').click_input();time.sleep(.3)
code=(R/'scripts/hmi/Program.s').read_text(encoding='utf-8')
h.pg.click(1100,600);h.pg.hotkey('ctrl','a');h.clipset(code.replace('\n','\r\n'));h.pg.hotkey('ctrl','v');time.sleep(.5)
h.pg.hotkey('ctrl','a');h.clipset('__PENDING__');h.pg.hotkey('ctrl','c');time.sleep(.3)
h.win32clipboard.OpenClipboard()
try:actual=h.win32clipboard.GetClipboardData(h.win32clipboard.CF_UNICODETEXT)
finally:h.win32clipboard.CloseClipboard()
assert ''.join(actual.split())==''.join(code.split())
h.W.child_window(title='保存',control_type='Button').click_input();time.sleep(.5)
h.W.child_window(title='编译',control_type='Button').click_input();time.sleep(3)
logs='\n'.join(c.window_text() for c in h.N.descendants() if 'RichEdit' in c.class_name() and '编译' in c.window_text())
(O/'compile.log').write_text(logs,encoding='utf-8');print(logs[-1800:])
h.W.child_window(title='调试',control_type='Button').click_input();time.sleep(4)
h.pg.screenshot().save(str(R/'tmp/small-simulator.png'))