agentworkshop 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Dgp2wK2U.js → BkKYf8xY.js} +2 -2
  3. package/.output/public/_nuxt/BuKI8z-5.js +1 -0
  4. package/.output/public/_nuxt/builds/latest.json +1 -1
  5. package/.output/public/_nuxt/builds/meta/4d990d25-ebbb-4fe4-a23b-3d28c7f42fee.json +1 -0
  6. package/.output/public/_nuxt/daq.BXsnevQv.css +1 -0
  7. package/.output/server/chunks/_/nitro.mjs +756 -710
  8. package/.output/server/chunks/build/{daq-D_W59QOe.mjs → daq-CmeM4u5u.mjs} +106 -101
  9. package/.output/server/chunks/build/daq-CmeM4u5u.mjs.map +1 -0
  10. package/.output/server/chunks/routes/renderer.mjs +1 -1
  11. package/.output/server/chunks/virtual/entry.mjs +1 -1
  12. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  13. package/.output/server/package.json +1 -1
  14. package/app/pages/daq/index.vue +2 -0
  15. package/config.yml +1 -1
  16. package/package.json +1 -1
  17. package/scripts/_dbg-plc-agent-loop.ts +102 -0
  18. package/scripts/_dbg-plc-e2e.mjs +171 -0
  19. package/scripts/_lib-plc-sim-child.mjs +28 -0
  20. package/scripts/dev-plc-simulator.mjs +139 -0
  21. package/server/data/daqs.json +107 -17
  22. package/server/data/dcw-lines.json +21 -0
  23. package/server/data/dcw-products.json +21 -0
  24. package/server/data/dcw-recipes.json +84 -0
  25. package/server/data/dcw-rollback.json +78 -1
  26. package/server/data/dcw-runs.json +81 -54
  27. package/server/data/dcw-writes.json +156 -0
  28. package/server/data/dcws.json +98 -98
  29. package/server/data/line-runs.json +30 -0
  30. package/server/services/workshop/daq/daq-node.ts +5 -0
  31. package/server/services/workshop/daq/daq-runtime.ts +6 -2
  32. package/server/services/workshop/daq/drivers.ts +41 -4
  33. package/server/services/workshop/dcw/dcw-runtime.ts +5 -0
  34. package/server/services/workshop/dcw/drivers.ts +10 -10
  35. package/shared/config/engine.mjs +8 -0
  36. package/shared/daq-protocol.ts +2 -0
  37. package/.output/public/_nuxt/DjqcbFBE.js +0 -1
  38. package/.output/public/_nuxt/builds/meta/90ae66f6-f649-4b44-8df9-bcd9e9a957a2.json +0 -1
  39. package/.output/public/_nuxt/daq.m1dxZaD-.css +0 -1
  40. package/.output/server/chunks/build/daq-D_W59QOe.mjs.map +0 -1
@@ -1055,5 +1055,26 @@
1055
1055
  "color": "#3aa0ff",
1056
1056
  "description": "",
1057
1057
  "createdAt": "2026-09-02T13:01:42.876Z"
1058
+ },
1059
+ {
1060
+ "id": "ln-9a60a0cd",
1061
+ "name": "PLC 闭环验证线",
1062
+ "color": "#f4c542",
1063
+ "description": "",
1064
+ "createdAt": "2026-09-03T16:03:27.293Z"
1065
+ },
1066
+ {
1067
+ "id": "ln-b33a3105",
1068
+ "name": "PLC 闭环验证线",
1069
+ "color": "#35e0a0",
1070
+ "description": "",
1071
+ "createdAt": "2026-09-03T16:39:22.953Z"
1072
+ },
1073
+ {
1074
+ "id": "ln-1aedc305",
1075
+ "name": "PLC 闭环验证线",
1076
+ "color": "#41c8f4",
1077
+ "description": "",
1078
+ "createdAt": "2026-09-03T16:44:33.191Z"
1058
1079
  }
1059
1080
  ]
@@ -957,5 +957,26 @@
957
957
  "name": "全功能产品-a7dbly",
958
958
  "description": "",
959
959
  "createdAt": "2026-09-02T13:01:42.906Z"
960
+ },
961
+ {
962
+ "id": "pd-e712875d",
963
+ "lineId": "ln-9a60a0cd",
964
+ "name": "闭环验证产品",
965
+ "description": "",
966
+ "createdAt": "2026-09-03T16:03:27.295Z"
967
+ },
968
+ {
969
+ "id": "pd-16eecb35",
970
+ "lineId": "ln-b33a3105",
971
+ "name": "闭环验证产品",
972
+ "description": "",
973
+ "createdAt": "2026-09-03T16:39:22.955Z"
974
+ },
975
+ {
976
+ "id": "pd-9c755781",
977
+ "lineId": "ln-1aedc305",
978
+ "name": "闭环验证产品",
979
+ "description": "",
980
+ "createdAt": "2026-09-03T16:44:33.192Z"
960
981
  }
961
982
  ]
@@ -1914,5 +1914,89 @@
1914
1914
  "lastGoodRunId": null,
1915
1915
  "createdAt": "2026-09-02T11:55:28.651Z",
1916
1916
  "updatedAt": "2026-09-02T11:55:28.651Z"
1917
+ },
1918
+ {
1919
+ "id": "rc-552c0488",
1920
+ "productId": "pd-e712875d",
1921
+ "lineId": "ln-9a60a0cd",
1922
+ "name": "A-闭环工艺",
1923
+ "description": "",
1924
+ "params": [
1925
+ {
1926
+ "nodeId": "dw-f944538c",
1927
+ "templateRef": "dcw-temp-sp",
1928
+ "value": 160,
1929
+ "min": 100,
1930
+ "max": 200
1931
+ }
1932
+ ],
1933
+ "daqWindows": [
1934
+ {
1935
+ "nodeId": "dn-5c4cffd9",
1936
+ "min": 0,
1937
+ "max": 400
1938
+ }
1939
+ ],
1940
+ "version": 1,
1941
+ "paramsHistory": [],
1942
+ "lastGoodRunId": null,
1943
+ "createdAt": "2026-09-03T16:03:27.302Z",
1944
+ "updatedAt": "2026-09-03T16:03:27.302Z"
1945
+ },
1946
+ {
1947
+ "id": "rc-0d3b58f7",
1948
+ "productId": "pd-16eecb35",
1949
+ "lineId": "ln-b33a3105",
1950
+ "name": "A-闭环工艺",
1951
+ "description": "",
1952
+ "params": [
1953
+ {
1954
+ "nodeId": "dw-0188c6c4",
1955
+ "templateRef": "dcw-temp-sp",
1956
+ "value": 160,
1957
+ "min": 100,
1958
+ "max": 200
1959
+ }
1960
+ ],
1961
+ "daqWindows": [
1962
+ {
1963
+ "nodeId": "dn-0ee0fb27",
1964
+ "min": 0,
1965
+ "max": 400
1966
+ }
1967
+ ],
1968
+ "version": 1,
1969
+ "paramsHistory": [],
1970
+ "lastGoodRunId": null,
1971
+ "createdAt": "2026-09-03T16:39:22.959Z",
1972
+ "updatedAt": "2026-09-03T16:39:22.959Z"
1973
+ },
1974
+ {
1975
+ "id": "rc-2961fd43",
1976
+ "productId": "pd-9c755781",
1977
+ "lineId": "ln-1aedc305",
1978
+ "name": "A-闭环工艺",
1979
+ "description": "",
1980
+ "params": [
1981
+ {
1982
+ "nodeId": "dw-097f1e6a",
1983
+ "templateRef": "dcw-temp-sp",
1984
+ "value": 160,
1985
+ "min": 100,
1986
+ "max": 200
1987
+ }
1988
+ ],
1989
+ "daqWindows": [
1990
+ {
1991
+ "nodeId": "dn-73cde6ce",
1992
+ "min": 0,
1993
+ "max": 400
1994
+ }
1995
+ ],
1996
+ "version": 1,
1997
+ "paramsHistory": [],
1998
+ "lastGoodRunId": null,
1999
+ "createdAt": "2026-09-03T16:44:33.196Z",
2000
+ "updatedAt": "2026-09-03T16:44:33.196Z"
1917
2001
  }
1918
2002
  ]
@@ -3348,6 +3348,83 @@
3348
3348
  "recipeRunId": null,
3349
3349
  "id": "anc-5ac6a74f",
3350
3350
  "at": "2026-09-03T13:34:25.211Z"
3351
+ },
3352
+ {
3353
+ "lineId": "ln-af002514",
3354
+ "nodeId": "dw-bbc5b970",
3355
+ "prevValue": null,
3356
+ "newValue": 170,
3357
+ "source": "manual",
3358
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3359
+ "recipeRunId": null,
3360
+ "id": "anc-59cb87f1",
3361
+ "at": "2026-09-03T14:42:40.779Z"
3362
+ },
3363
+ {
3364
+ "lineId": "ln-af002514",
3365
+ "nodeId": "dw-f653f978",
3366
+ "prevValue": null,
3367
+ "newValue": 170,
3368
+ "source": "manual",
3369
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3370
+ "recipeRunId": null,
3371
+ "id": "anc-fa7c9d40",
3372
+ "at": "2026-09-03T15:08:44.479Z"
3373
+ },
3374
+ {
3375
+ "lineId": "ln-af002514",
3376
+ "nodeId": "dw-b9f17a5b",
3377
+ "prevValue": null,
3378
+ "newValue": 170,
3379
+ "source": "manual",
3380
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3381
+ "recipeRunId": null,
3382
+ "id": "anc-0c5adbdf",
3383
+ "at": "2026-09-03T15:10:19.644Z"
3384
+ },
3385
+ {
3386
+ "lineId": "ln-af002514",
3387
+ "nodeId": "dw-fc6b2e28",
3388
+ "prevValue": null,
3389
+ "newValue": 170,
3390
+ "source": "manual",
3391
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3392
+ "recipeRunId": null,
3393
+ "id": "anc-044f7ceb",
3394
+ "at": "2026-09-03T15:58:15.437Z"
3395
+ },
3396
+ {
3397
+ "lineId": "ln-af002514",
3398
+ "nodeId": "dw-3b1bda21",
3399
+ "prevValue": null,
3400
+ "newValue": 170,
3401
+ "source": "manual",
3402
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3403
+ "recipeRunId": null,
3404
+ "id": "anc-774e7651",
3405
+ "at": "2026-09-03T16:20:52.860Z"
3406
+ },
3407
+ {
3408
+ "lineId": "ln-af002514",
3409
+ "nodeId": "dw-b2388794",
3410
+ "prevValue": null,
3411
+ "newValue": 170,
3412
+ "source": "manual",
3413
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3414
+ "recipeRunId": null,
3415
+ "id": "anc-10cc28f5",
3416
+ "at": "2026-09-03T16:38:00.943Z"
3417
+ },
3418
+ {
3419
+ "lineId": "",
3420
+ "nodeId": "dw-6244c6d8",
3421
+ "prevValue": null,
3422
+ "newValue": 160,
3423
+ "source": "manual",
3424
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3425
+ "recipeRunId": null,
3426
+ "id": "anc-d64116cc",
3427
+ "at": "2026-09-03T16:38:55.561Z"
3351
3428
  }
3352
3429
  ],
3353
3430
  "records": [
@@ -3739,7 +3816,7 @@
3739
3816
  "channels": [],
3740
3817
  "degraded": true
3741
3818
  },
3742
- "evaluatedAt": "2026-09-03T13:40:24.088Z",
3819
+ "evaluatedAt": "2026-09-03T16:46:02.898Z",
3743
3820
  "windowAgg": {
3744
3821
  "at": "2026-08-31T16:25:17.398Z",
3745
3822
  "fromMs": 1788193396897,
@@ -1,58 +1,4 @@
1
1
  [
2
- {
3
- "id": "rr-0662ccf4",
4
- "recipeId": "rc-a53fbadc",
5
- "recipeName": "控制终审Y线配方",
6
- "productId": "pd-244c32c7",
7
- "lineId": "ln-897079d9",
8
- "startedAt": "2026-08-30T01:57:25.226Z",
9
- "endedAt": "2026-08-30T01:57:30.009Z",
10
- "results": [
11
- {
12
- "templateRef": "dcw-temp-sp",
13
- "nodeId": "dw-5719899b",
14
- "ok": true,
15
- "message": "Mock PLC 写入成功:165 → raw 165,回读一致(标定后物理值 165)",
16
- "value": 165
17
- }
18
- ]
19
- },
20
- {
21
- "id": "rr-2c7c87ad",
22
- "recipeId": "rc-d9bd7a3c",
23
- "recipeName": "终审配方B",
24
- "productId": "pd-a868e666",
25
- "lineId": "ln-42378318",
26
- "startedAt": "2026-08-30T01:57:30.363Z",
27
- "endedAt": "2026-08-30T02:02:31.372Z",
28
- "results": [
29
- {
30
- "templateRef": "dcw-temp-sp",
31
- "nodeId": "dw-ff58ea65",
32
- "ok": true,
33
- "message": "写入并回读一致:180 → raw 1200,回读 180(标定后物理值 180)",
34
- "value": 180
35
- }
36
- ]
37
- },
38
- {
39
- "id": "rr-3adc1ebd",
40
- "recipeId": "rc-e35aa723",
41
- "recipeName": "全链路审计配方",
42
- "productId": "pd-abf2ce75",
43
- "lineId": "ln-342ebb35",
44
- "startedAt": "2026-08-30T02:02:31.578Z",
45
- "endedAt": "2026-08-30T02:05:37.740Z",
46
- "results": [
47
- {
48
- "templateRef": "dcw-temp-sp",
49
- "nodeId": "dw-f5fb94ca",
50
- "ok": true,
51
- "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
52
- "value": 180
53
- }
54
- ]
55
- },
56
2
  {
57
3
  "id": "rr-842bf8f2",
58
4
  "recipeId": "rc-441a308a",
@@ -5480,5 +5426,86 @@
5480
5426
  "max": 1
5481
5427
  }
5482
5428
  ]
5429
+ },
5430
+ {
5431
+ "id": "rr-2238155d",
5432
+ "recipeId": "rc-552c0488",
5433
+ "recipeName": "A-闭环工艺",
5434
+ "productId": "pd-e712875d",
5435
+ "lineId": "ln-9a60a0cd",
5436
+ "startedAt": "2026-09-03T16:03:27.304Z",
5437
+ "endedAt": null,
5438
+ "results": [
5439
+ {
5440
+ "templateRef": "dcw-temp-sp",
5441
+ "nodeId": "dw-f944538c",
5442
+ "ok": true,
5443
+ "message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
5444
+ "value": 160
5445
+ }
5446
+ ],
5447
+ "paramsSnapshot": [
5448
+ {
5449
+ "nodeId": "dw-f944538c",
5450
+ "templateRef": "dcw-temp-sp",
5451
+ "value": 160,
5452
+ "min": 100,
5453
+ "max": 200
5454
+ }
5455
+ ]
5456
+ },
5457
+ {
5458
+ "id": "rr-9d5070a1",
5459
+ "recipeId": "rc-0d3b58f7",
5460
+ "recipeName": "A-闭环工艺",
5461
+ "productId": "pd-16eecb35",
5462
+ "lineId": "ln-b33a3105",
5463
+ "startedAt": "2026-09-03T16:39:22.962Z",
5464
+ "endedAt": null,
5465
+ "results": [
5466
+ {
5467
+ "templateRef": "dcw-temp-sp",
5468
+ "nodeId": "dw-0188c6c4",
5469
+ "ok": true,
5470
+ "message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
5471
+ "value": 160
5472
+ }
5473
+ ],
5474
+ "paramsSnapshot": [
5475
+ {
5476
+ "nodeId": "dw-0188c6c4",
5477
+ "templateRef": "dcw-temp-sp",
5478
+ "value": 160,
5479
+ "min": 100,
5480
+ "max": 200
5481
+ }
5482
+ ]
5483
+ },
5484
+ {
5485
+ "id": "rr-a86971ae",
5486
+ "recipeId": "rc-2961fd43",
5487
+ "recipeName": "A-闭环工艺",
5488
+ "productId": "pd-9c755781",
5489
+ "lineId": "ln-1aedc305",
5490
+ "startedAt": "2026-09-03T16:44:33.199Z",
5491
+ "endedAt": null,
5492
+ "results": [
5493
+ {
5494
+ "templateRef": "dcw-temp-sp",
5495
+ "nodeId": "dw-097f1e6a",
5496
+ "ok": true,
5497
+ "message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
5498
+ "value": 160
5499
+ }
5500
+ ],
5501
+ "paramsSnapshot": [
5502
+ {
5503
+ "nodeId": "dw-097f1e6a",
5504
+ "templateRef": "dcw-temp-sp",
5505
+ "value": 160,
5506
+ "min": 100,
5507
+ "max": 200
5508
+ }
5509
+ ]
5483
5510
  }
5484
5511
  ]
@@ -11002,5 +11002,161 @@
11002
11002
  "message": "写入并回读一致:2.71828 → raw 2.71828,回读 2.7183(标定后物理值 2.7)",
11003
11003
  "recipeRunId": null,
11004
11004
  "at": "2026-09-03T13:34:25.182Z"
11005
+ },
11006
+ {
11007
+ "id": "wh-03b05124",
11008
+ "nodeId": "dw-bbc5b970",
11009
+ "nodeName": "PLC闭环·温度SP",
11010
+ "param": "烘箱温度设定",
11011
+ "eng": 170,
11012
+ "raw": 170,
11013
+ "ok": true,
11014
+ "message": "写入并回读一致:170 → raw 170,回读 170(标定后物理值 170)",
11015
+ "recipeRunId": null,
11016
+ "at": "2026-09-03T14:42:40.757Z"
11017
+ },
11018
+ {
11019
+ "id": "wh-3abfe87d",
11020
+ "nodeId": "dw-f653f978",
11021
+ "nodeName": "PLC诊断·SP",
11022
+ "param": "烘箱温度设定",
11023
+ "eng": 170,
11024
+ "raw": 170,
11025
+ "ok": true,
11026
+ "message": "写入并回读一致:170 → raw 170,回读 170(标定后物理值 170)",
11027
+ "recipeRunId": null,
11028
+ "at": "2026-09-03T15:08:44.452Z"
11029
+ },
11030
+ {
11031
+ "id": "wh-8045ffa9",
11032
+ "nodeId": "dw-b9f17a5b",
11033
+ "nodeName": "PLC闭环·温度SP",
11034
+ "param": "烘箱温度设定",
11035
+ "eng": 170,
11036
+ "raw": 170,
11037
+ "ok": true,
11038
+ "message": "写入并回读一致:170 → raw 170,回读 170(标定后物理值 170)",
11039
+ "recipeRunId": null,
11040
+ "at": "2026-09-03T15:10:19.624Z"
11041
+ },
11042
+ {
11043
+ "id": "wh-fc6e1f04",
11044
+ "nodeId": "dw-fc6b2e28",
11045
+ "nodeName": "PLC闭环·温度SP",
11046
+ "param": "烘箱温度设定",
11047
+ "eng": 170,
11048
+ "raw": 170,
11049
+ "ok": true,
11050
+ "message": "写入并回读一致:170 → raw 170,回读 170(标定后物理值 170)",
11051
+ "recipeRunId": null,
11052
+ "at": "2026-09-03T15:58:15.414Z"
11053
+ },
11054
+ {
11055
+ "id": "wh-fbe33fdd",
11056
+ "nodeId": "dw-f944538c",
11057
+ "nodeName": "烘箱温度设定",
11058
+ "param": "烘箱温度设定",
11059
+ "eng": 160,
11060
+ "raw": 160,
11061
+ "ok": true,
11062
+ "message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
11063
+ "recipeRunId": "rr-2238155d",
11064
+ "at": "2026-09-03T16:03:27.308Z"
11065
+ },
11066
+ {
11067
+ "id": "wh-72a72cba",
11068
+ "nodeId": "dw-3b1bda21",
11069
+ "nodeName": "PLC闭环·温度SP",
11070
+ "param": "烘箱温度设定",
11071
+ "eng": 170,
11072
+ "raw": 170,
11073
+ "ok": true,
11074
+ "message": "写入并回读一致:170 → raw 170,回读 170(标定后物理值 170)",
11075
+ "recipeRunId": null,
11076
+ "at": "2026-09-03T16:20:52.838Z"
11077
+ },
11078
+ {
11079
+ "id": "wh-d5666bb2",
11080
+ "nodeId": "dw-b2388794",
11081
+ "nodeName": "PLC闭环·温度SP",
11082
+ "param": "烘箱温度设定",
11083
+ "eng": 170,
11084
+ "raw": 170,
11085
+ "ok": true,
11086
+ "message": "写入并回读一致:170 → raw 170,回读 170(标定后物理值 170)",
11087
+ "recipeRunId": null,
11088
+ "at": "2026-09-03T16:38:00.915Z"
11089
+ },
11090
+ {
11091
+ "id": "wh-f9572015",
11092
+ "nodeId": "dw-6244c6d8",
11093
+ "nodeName": "PLC闭环·标定×10",
11094
+ "param": "烘箱温度设定",
11095
+ "eng": 160,
11096
+ "raw": 16,
11097
+ "ok": true,
11098
+ "message": "写入并回读一致:16 → raw 16,回读 16(标定后物理值 160)",
11099
+ "recipeRunId": null,
11100
+ "at": "2026-09-03T16:38:55.541Z"
11101
+ },
11102
+ {
11103
+ "id": "wh-1a77ae8b",
11104
+ "nodeId": "dw-62d26b6c",
11105
+ "nodeName": "PLC闭环·故障注入",
11106
+ "param": "烘箱温度设定",
11107
+ "eng": 170,
11108
+ "raw": null,
11109
+ "ok": false,
11110
+ "message": "Modbus 写入失败: 无法建立连接——检查 PLC 电源/IP/端口与防火墙(connect ECONNREFUSED 127.0.0.1:15199)",
11111
+ "recipeRunId": null,
11112
+ "at": "2026-09-03T16:38:55.601Z"
11113
+ },
11114
+ {
11115
+ "id": "wh-0a20d508",
11116
+ "nodeId": "dw-0188c6c4",
11117
+ "nodeName": "烘箱温度设定",
11118
+ "param": "烘箱温度设定",
11119
+ "eng": 160,
11120
+ "raw": 160,
11121
+ "ok": true,
11122
+ "message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
11123
+ "recipeRunId": "rr-9d5070a1",
11124
+ "at": "2026-09-03T16:39:22.964Z"
11125
+ },
11126
+ {
11127
+ "id": "wh-41124e7a",
11128
+ "nodeId": "dw-0188c6c4",
11129
+ "nodeName": "烘箱温度设定",
11130
+ "param": "烘箱温度设定",
11131
+ "eng": 180,
11132
+ "raw": 180,
11133
+ "ok": true,
11134
+ "message": "写入并回读一致:180 → raw 180,回读 180(标定后物理值 180)",
11135
+ "recipeRunId": null,
11136
+ "at": "2026-09-03T16:40:53.229Z"
11137
+ },
11138
+ {
11139
+ "id": "wh-4c112aa4",
11140
+ "nodeId": "dw-097f1e6a",
11141
+ "nodeName": "烘箱温度设定",
11142
+ "param": "烘箱温度设定",
11143
+ "eng": 160,
11144
+ "raw": 160,
11145
+ "ok": true,
11146
+ "message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
11147
+ "recipeRunId": "rr-a86971ae",
11148
+ "at": "2026-09-03T16:44:33.202Z"
11149
+ },
11150
+ {
11151
+ "id": "wh-8f7a721d",
11152
+ "nodeId": "dw-097f1e6a",
11153
+ "nodeName": "烘箱温度设定",
11154
+ "param": "烘箱温度设定",
11155
+ "eng": 180,
11156
+ "raw": 180,
11157
+ "ok": true,
11158
+ "message": "写入并回读一致:180 → raw 180,回读 180(标定后物理值 180)",
11159
+ "recipeRunId": null,
11160
+ "at": "2026-09-03T16:45:06.388Z"
11005
11161
  }
11006
11162
  ]