agentworkshop 0.7.15 → 0.7.17

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 (99) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +924 -755
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +924 -755
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/{DMdVWIGz.js → B-E8fXAO.js} +1 -1
  5. package/.output/public/_nuxt/{DyisHHzD.js → BA3XzwiD.js} +1 -1
  6. package/.output/public/_nuxt/{CD1SlCoI.js → BJem8_v5.js} +4 -4
  7. package/.output/public/_nuxt/{6vYobj4F.js → BWC4HQHQ.js} +1 -1
  8. package/.output/public/_nuxt/{kkEthL84.js → Ba7YofCb.js} +1 -1
  9. package/.output/public/_nuxt/{DGVAuScD.js → C_2bTK0C.js} +1 -1
  10. package/.output/public/_nuxt/{B53Mp7lD.js → CgT5wMfz.js} +1 -1
  11. package/.output/public/_nuxt/{DT-Wg8r1.js → D4CLp1hc.js} +1 -1
  12. package/.output/public/_nuxt/{C6m-kenn.js → DAR70Lf5.js} +1 -1
  13. package/.output/public/_nuxt/{B3Psw_sL.js → DBXhDLgl.js} +1 -1
  14. package/.output/public/_nuxt/{Cj6139IM.js → DsOkkMX3.js} +1 -1
  15. package/.output/public/_nuxt/DtM4RX5T.js +1 -0
  16. package/.output/public/_nuxt/{DaE5saZg.js → QT54MQV9.js} +1 -1
  17. package/.output/public/_nuxt/{Bmpvki7M.js → UtviM1bg.js} +1 -1
  18. package/.output/public/_nuxt/_id_.pF-B9O6u.css +1 -0
  19. package/.output/public/_nuxt/builds/latest.json +1 -1
  20. package/.output/public/_nuxt/builds/meta/6a0a88de-639e-4e7b-b7c1-7f4034e04787.json +1 -0
  21. package/.output/server/chunks/_/nitro.mjs +1411 -910
  22. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  23. package/.output/server/chunks/build/{TownView-CunmEMzS.mjs → TownView-ql2eHZOg.mjs} +4 -4
  24. package/.output/server/chunks/build/{TownView-CunmEMzS.mjs.map → TownView-ql2eHZOg.mjs.map} +1 -1
  25. package/.output/server/chunks/build/{_id_-CVnMdSeG.mjs → _id_-CwR5oLu9.mjs} +4 -4
  26. package/.output/server/chunks/build/{_id_-CVnMdSeG.mjs.map → _id_-CwR5oLu9.mjs.map} +1 -1
  27. package/.output/server/chunks/build/{_id_-D265Wh_k.mjs → _id_-DvJZ5Qis.mjs} +168 -120
  28. package/.output/server/chunks/build/_id_-DvJZ5Qis.mjs.map +1 -0
  29. package/.output/server/chunks/build/{_wsId_-eNJmBp05.mjs → _wsId_-B3aB9bIp.mjs} +5 -5
  30. package/.output/server/chunks/build/{_wsId_-eNJmBp05.mjs.map → _wsId_-B3aB9bIp.mjs.map} +1 -1
  31. package/.output/server/chunks/build/{daq-DxaXk_8N.mjs → daq-epWL_sC7.mjs} +5 -5
  32. package/.output/server/chunks/build/{daq-DxaXk_8N.mjs.map → daq-epWL_sC7.mjs.map} +1 -1
  33. package/.output/server/chunks/build/{dcw-B0dtiHFG.mjs → dcw-CBPaFj2f.mjs} +2 -2
  34. package/.output/server/chunks/build/{dcw-B0dtiHFG.mjs.map → dcw-CBPaFj2f.mjs.map} +1 -1
  35. package/.output/server/chunks/build/{logs-UWXeNKy_.mjs → logs-Bz1p6x_5.mjs} +3 -3
  36. package/.output/server/chunks/build/{logs-UWXeNKy_.mjs.map → logs-Bz1p6x_5.mjs.map} +1 -1
  37. package/.output/server/chunks/build/{pages-Aexs6LjD.mjs → pages-Dq7_H4FK.mjs} +3 -3
  38. package/.output/server/chunks/build/{pages-Aexs6LjD.mjs.map → pages-Dq7_H4FK.mjs.map} +1 -1
  39. package/.output/server/chunks/build/{town-BbaR-8io.mjs → town-CstiKxf_.mjs} +5 -5
  40. package/.output/server/chunks/build/{town-BbaR-8io.mjs.map → town-CstiKxf_.mjs.map} +1 -1
  41. package/.output/server/chunks/build/{useDaqStream-BkmyQT06.mjs → useDaqStream-BOOZ-p-l.mjs} +2 -2
  42. package/.output/server/chunks/build/{useDaqStream-BkmyQT06.mjs.map → useDaqStream-BOOZ-p-l.mjs.map} +1 -1
  43. package/.output/server/chunks/build/{useDcwStream-DWVoU96J.mjs → useDcwStream-DyB2ufQI.mjs} +15 -1
  44. package/.output/server/chunks/build/{useDcwStream-DWVoU96J.mjs.map → useDcwStream-DyB2ufQI.mjs.map} +1 -1
  45. package/.output/server/chunks/build/{useDeviceTwins-34WGk9aN.mjs → useDeviceTwins-ZbT86L9O.mjs} +2 -2
  46. package/.output/server/chunks/build/{useDeviceTwins-34WGk9aN.mjs.map → useDeviceTwins-ZbT86L9O.mjs.map} +1 -1
  47. package/.output/server/chunks/build/{useOpsLog-C9zTzYof.mjs → useOpsLog-8HCYFb6n.mjs} +2 -2
  48. package/.output/server/chunks/build/{useOpsLog-C9zTzYof.mjs.map → useOpsLog-8HCYFb6n.mjs.map} +1 -1
  49. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
  50. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  51. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +42 -0
  52. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -0
  53. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +29 -0
  54. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -0
  55. package/.output/server/chunks/routes/api/workshop/dcw/recipes/{_id_.patch.mjs → index.patch.mjs} +11 -6
  56. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -0
  57. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
  58. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  59. package/.output/server/chunks/routes/renderer.mjs +1 -1
  60. package/.output/server/chunks/virtual/entry.mjs +34 -8
  61. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  62. package/.output/server/package.json +1 -1
  63. package/app/composables/workshop/useDcwStream.ts +12 -0
  64. package/app/pages/dcw/[id].vue +165 -1
  65. package/i18n/locales/en.ts +13 -0
  66. package/i18n/locales/zh-CN.ts +13 -0
  67. package/package.json +1 -1
  68. package/scripts/_dbg-opslog-agent-e2e.mjs +191 -0
  69. package/scripts/_dbg-recipe-e2e.mjs +176 -0
  70. package/server/api/workshop/daq/index.post.ts +1 -1
  71. package/server/api/workshop/dcw/lines/index.post.ts +1 -1
  72. package/server/api/workshop/dcw/recipes/{[id].patch.ts → [id]/index.patch.ts} +9 -3
  73. package/server/api/workshop/dcw/recipes/[id]/revert.post.ts +28 -0
  74. package/server/api/workshop/dcw/recipes/[id]/versions.get.ts +14 -0
  75. package/server/data/daqs.json +471 -61
  76. package/server/data/dcw-lines.json +49 -0
  77. package/server/data/dcw-products.json +56 -0
  78. package/server/data/dcw-recipes.json +64 -0
  79. package/server/data/dcw-rollback.json +239 -6
  80. package/server/data/dcw-runs.json +162 -142
  81. package/server/data/dcw-writes.json +132 -0
  82. package/server/data/dcws.json +344 -198
  83. package/server/data/line-runs.json +41 -11
  84. package/server/data/scene-layouts.json +11 -0
  85. package/server/plugins/workshop.ts +9 -0
  86. package/server/services/workshop/agents/agent-badge.ts +38 -0
  87. package/server/services/workshop/agents/host-tool-bridge.ts +642 -612
  88. package/server/services/workshop/agents/industrial-tools.ts +357 -4
  89. package/server/services/workshop/daq/drivers.ts +41 -8
  90. package/server/services/workshop/dcw/dcw-controller.ts +50 -2
  91. package/server/services/workshop/dcw/dcw-recipe.repo.ts +81 -3
  92. package/server/services/workshop/dcw/drivers.ts +2 -2
  93. package/server/services/workshop/dcw/recipe-rollback-manager.ts +8 -6
  94. package/shared/dcw-protocol.ts +14 -2
  95. package/.output/public/_nuxt/Bc3PiGGr.js +0 -1
  96. package/.output/public/_nuxt/_id_.DTvjd6VN.css +0 -1
  97. package/.output/public/_nuxt/builds/meta/65f6bed9-b794-44a4-805a-e22700c10817.json +0 -1
  98. package/.output/server/chunks/build/_id_-D265Wh_k.mjs.map +0 -1
  99. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +0 -1
@@ -1,146 +1,4 @@
1
1
  [
2
- {
3
- "id": "rr-b1ab97b5",
4
- "recipeId": "rc-7bf584db",
5
- "recipeName": "A-标准工艺",
6
- "productId": "pd-6348a595",
7
- "lineId": "ln-af002514",
8
- "startedAt": "2026-08-31T05:52:15.607Z",
9
- "endedAt": "2026-08-31T15:40:26.251Z",
10
- "results": [
11
- {
12
- "templateRef": "dcw-temp-sp",
13
- "nodeId": "dw-322b1978",
14
- "ok": true,
15
- "message": "Mock PLC 写入成功:182 → raw 182,回读一致(标定后物理值 182)",
16
- "value": 182
17
- },
18
- {
19
- "templateRef": "dcw-pressure-sp",
20
- "nodeId": "dw-e92bb0e7",
21
- "ok": true,
22
- "message": "Mock PLC 写入成功:0.92 → raw 0.92,回读一致(标定后物理值 0.92)",
23
- "value": 0.92
24
- }
25
- ]
26
- },
27
- {
28
- "id": "rr-8788a81c",
29
- "recipeId": "rc-f62239b2",
30
- "recipeName": "语义验证配方",
31
- "productId": "pd-2308e253",
32
- "lineId": "ln-feef6e4d",
33
- "startedAt": "2026-08-31T14:26:24.122Z",
34
- "endedAt": null,
35
- "results": [
36
- {
37
- "templateRef": "dcw-temp-sp",
38
- "nodeId": "dw-b1c4bbb2",
39
- "ok": false,
40
- "message": "Modbus 写入失败: connect ECONNREFUSED 127.0.0.1:1502",
41
- "value": 182
42
- }
43
- ]
44
- },
45
- {
46
- "id": "rr-d3d7635c",
47
- "recipeId": "rc-89031e11",
48
- "recipeName": "全功能配方-m20gm8",
49
- "productId": "pd-510edc1b",
50
- "lineId": "ln-3aff4d75",
51
- "startedAt": "2026-08-31T15:01:17.249Z",
52
- "endedAt": "2026-08-31T15:05:19.626Z",
53
- "results": [
54
- {
55
- "templateRef": "dcw-temp-sp",
56
- "nodeId": "dw-aff8c1f5",
57
- "ok": true,
58
- "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
59
- "value": 180
60
- }
61
- ]
62
- },
63
- {
64
- "id": "rr-38f7f364",
65
- "recipeId": "rc-9326681e",
66
- "recipeName": "快照配方-prmthfeolm",
67
- "productId": "pd-a580ad4f",
68
- "lineId": "ln-35e3626b",
69
- "startedAt": "2026-08-31T16:01:42.442Z",
70
- "endedAt": "2026-08-31T16:03:19.310Z",
71
- "results": [
72
- {
73
- "templateRef": "dcw-temp-sp",
74
- "nodeId": "dw-a4205751",
75
- "ok": true,
76
- "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
77
- "value": 180
78
- }
79
- ],
80
- "paramsSnapshot": [
81
- {
82
- "nodeId": "dw-a4205751",
83
- "templateRef": "dcw-temp-sp",
84
- "value": 180,
85
- "min": 176,
86
- "max": 188
87
- }
88
- ]
89
- },
90
- {
91
- "id": "rr-51ed0c51",
92
- "recipeId": "rc-d6ce6aca",
93
- "recipeName": "快照配方-prmthffidc",
94
- "productId": "pd-7335ba73",
95
- "lineId": "ln-c31cf75d",
96
- "startedAt": "2026-08-31T16:02:20.957Z",
97
- "endedAt": "2026-08-31T16:02:45.415Z",
98
- "results": [
99
- {
100
- "templateRef": "dcw-temp-sp",
101
- "nodeId": "dw-47a397c1",
102
- "ok": true,
103
- "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
104
- "value": 180
105
- }
106
- ],
107
- "paramsSnapshot": [
108
- {
109
- "nodeId": "dw-47a397c1",
110
- "templateRef": "dcw-temp-sp",
111
- "value": 180,
112
- "min": 176,
113
- "max": 188
114
- }
115
- ]
116
- },
117
- {
118
- "id": "rr-dce5ebb4",
119
- "recipeId": "rc-ccbbbad7",
120
- "recipeName": "独立性配方-ndmthfmq46",
121
- "productId": "pd-91ac8f36",
122
- "lineId": "ln-f4b89912",
123
- "startedAt": "2026-08-31T16:07:57.515Z",
124
- "endedAt": "2026-08-31T16:08:38.507Z",
125
- "results": [
126
- {
127
- "templateRef": "dcw-temp-sp",
128
- "nodeId": "dw-c0743b62",
129
- "ok": true,
130
- "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
131
- "value": 180
132
- }
133
- ],
134
- "paramsSnapshot": [
135
- {
136
- "nodeId": "dw-c0743b62",
137
- "templateRef": "dcw-temp-sp",
138
- "value": 180,
139
- "min": 176,
140
- "max": 188
141
- }
142
- ]
143
- },
144
2
  {
145
3
  "id": "rr-3166887e",
146
4
  "recipeId": "rc-249c45ce",
@@ -5876,5 +5734,167 @@
5876
5734
  "max": 188
5877
5735
  }
5878
5736
  ]
5737
+ },
5738
+ {
5739
+ "id": "rr-bf3fea0a",
5740
+ "recipeId": "rc-e894bd69",
5741
+ "recipeName": "模拟器配方-mtpsdote",
5742
+ "productId": "pd-f0436841",
5743
+ "lineId": "ln-24dedf82",
5744
+ "startedAt": "2026-09-06T20:27:23.270+08:00",
5745
+ "endedAt": null,
5746
+ "results": [
5747
+ {
5748
+ "templateRef": "dcw-temp-sp",
5749
+ "nodeId": "dw-fa14445c",
5750
+ "ok": true,
5751
+ "message": "写入并回读一致:180 → raw 180,回读 180(标定后物理值 180)",
5752
+ "value": 180
5753
+ }
5754
+ ],
5755
+ "paramsSnapshot": [
5756
+ {
5757
+ "nodeId": "dw-fa14445c",
5758
+ "templateRef": "dcw-temp-sp",
5759
+ "value": 180,
5760
+ "min": 176,
5761
+ "max": 188
5762
+ }
5763
+ ]
5764
+ },
5765
+ {
5766
+ "id": "rr-6f3d8953",
5767
+ "recipeId": "rc-ef40c1d0",
5768
+ "recipeName": "opsrecipe-ol5tw4",
5769
+ "productId": "pd-7c0d33db",
5770
+ "lineId": "ln-f4f4a86d",
5771
+ "startedAt": "2026-09-06T20:46:04.719+08:00",
5772
+ "endedAt": null,
5773
+ "results": [
5774
+ {
5775
+ "templateRef": "temp-sp",
5776
+ "nodeId": "dw-2f84c49c",
5777
+ "ok": true,
5778
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
5779
+ "value": 42
5780
+ }
5781
+ ],
5782
+ "paramsSnapshot": [
5783
+ {
5784
+ "nodeId": "dw-2f84c49c",
5785
+ "templateRef": "temp-sp",
5786
+ "value": 42,
5787
+ "min": 0,
5788
+ "max": 100
5789
+ }
5790
+ ]
5791
+ },
5792
+ {
5793
+ "id": "rr-0b7e9783",
5794
+ "recipeId": "rc-4525e1f2",
5795
+ "recipeName": "opsrecipe-ollmkv",
5796
+ "productId": "pd-caccd56c",
5797
+ "lineId": "ln-42ee4dd9",
5798
+ "startedAt": "2026-09-06T20:48:42.929+08:00",
5799
+ "endedAt": null,
5800
+ "results": [
5801
+ {
5802
+ "templateRef": "temp-sp",
5803
+ "nodeId": "dw-ce1a81fb",
5804
+ "ok": true,
5805
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
5806
+ "value": 42
5807
+ }
5808
+ ],
5809
+ "paramsSnapshot": [
5810
+ {
5811
+ "nodeId": "dw-ce1a81fb",
5812
+ "templateRef": "temp-sp",
5813
+ "value": 42,
5814
+ "min": 0,
5815
+ "max": 100
5816
+ }
5817
+ ]
5818
+ },
5819
+ {
5820
+ "id": "rr-0589a4f4",
5821
+ "recipeId": "rc-79babe43",
5822
+ "recipeName": "opsrecipe-ol4mpd",
5823
+ "productId": "pd-ef575218",
5824
+ "lineId": "ln-22c819b9",
5825
+ "startedAt": "2026-09-06T21:02:01.386+08:00",
5826
+ "endedAt": null,
5827
+ "results": [
5828
+ {
5829
+ "templateRef": "temp-sp",
5830
+ "nodeId": "dw-e2a2d7c5",
5831
+ "ok": true,
5832
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
5833
+ "value": 42
5834
+ }
5835
+ ],
5836
+ "paramsSnapshot": [
5837
+ {
5838
+ "nodeId": "dw-e2a2d7c5",
5839
+ "templateRef": "temp-sp",
5840
+ "value": 42,
5841
+ "min": 0,
5842
+ "max": 100
5843
+ }
5844
+ ]
5845
+ },
5846
+ {
5847
+ "id": "rr-94cba6da",
5848
+ "recipeId": "rc-7d3c1ac9",
5849
+ "recipeName": "opsrecipe-olaogx",
5850
+ "productId": "pd-dbdc7e13",
5851
+ "lineId": "ln-1fd5f147",
5852
+ "startedAt": "2026-09-06T21:16:39.845+08:00",
5853
+ "endedAt": null,
5854
+ "results": [
5855
+ {
5856
+ "templateRef": "temp-sp",
5857
+ "nodeId": "dw-49b16681",
5858
+ "ok": true,
5859
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
5860
+ "value": 42
5861
+ }
5862
+ ],
5863
+ "paramsSnapshot": [
5864
+ {
5865
+ "nodeId": "dw-49b16681",
5866
+ "templateRef": "temp-sp",
5867
+ "value": 42,
5868
+ "min": 0,
5869
+ "max": 100
5870
+ }
5871
+ ]
5872
+ },
5873
+ {
5874
+ "id": "rr-57340705",
5875
+ "recipeId": "rc-afaf9ac1",
5876
+ "recipeName": "opsrecipe-olxa06",
5877
+ "productId": "pd-1732a017",
5878
+ "lineId": "ln-5b2f7bdd",
5879
+ "startedAt": "2026-09-06T21:25:39.987+08:00",
5880
+ "endedAt": null,
5881
+ "results": [
5882
+ {
5883
+ "templateRef": "temp-sp",
5884
+ "nodeId": "dw-51d80e38",
5885
+ "ok": true,
5886
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
5887
+ "value": 42
5888
+ }
5889
+ ],
5890
+ "paramsSnapshot": [
5891
+ {
5892
+ "nodeId": "dw-51d80e38",
5893
+ "templateRef": "temp-sp",
5894
+ "value": 42,
5895
+ "min": 0,
5896
+ "max": 100
5897
+ }
5898
+ ]
5879
5899
  }
5880
5900
  ]
@@ -12790,5 +12790,137 @@
12790
12790
  "message": "Mock PLC 写入成功:170 → raw 170,回读一致(标定后物理值 170)",
12791
12791
  "recipeRunId": null,
12792
12792
  "at": "2026-09-06T19:25:01.709+08:00"
12793
+ },
12794
+ {
12795
+ "id": "wh-6b8f2d7d",
12796
+ "nodeId": "dw-322b1978",
12797
+ "nodeName": "温度设定器(示例)",
12798
+ "param": "烘箱温度设定",
12799
+ "eng": 180,
12800
+ "raw": 180,
12801
+ "ok": true,
12802
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
12803
+ "recipeRunId": null,
12804
+ "at": "2026-09-06T20:05:39.439+08:00"
12805
+ },
12806
+ {
12807
+ "id": "wh-0d583175",
12808
+ "nodeId": "dw-fa14445c",
12809
+ "nodeName": "plcsp-mtpsdote",
12810
+ "param": "烘箱温度设定",
12811
+ "eng": 180,
12812
+ "raw": 180,
12813
+ "ok": true,
12814
+ "message": "写入并回读一致:180 → raw 180,回读 180(标定后物理值 180)",
12815
+ "recipeRunId": "rr-bf3fea0a",
12816
+ "at": "2026-09-06T20:27:23.273+08:00"
12817
+ },
12818
+ {
12819
+ "id": "wh-cd249064",
12820
+ "nodeId": "dw-fa14445c",
12821
+ "nodeName": "plcsp-mtpsdote",
12822
+ "param": "烘箱温度设定",
12823
+ "eng": 182,
12824
+ "raw": 182,
12825
+ "ok": true,
12826
+ "message": "写入并回读一致:182 → raw 182,回读 182(标定后物理值 182)",
12827
+ "recipeRunId": null,
12828
+ "at": "2026-09-06T20:27:32.399+08:00"
12829
+ },
12830
+ {
12831
+ "id": "wh-d10beedd",
12832
+ "nodeId": "dw-2f84c49c",
12833
+ "nodeName": "opsnode-ol5tw4",
12834
+ "param": "烘箱温度设定",
12835
+ "eng": 42,
12836
+ "raw": 42,
12837
+ "ok": true,
12838
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
12839
+ "recipeRunId": "rr-6f3d8953",
12840
+ "at": "2026-09-06T20:46:04.722+08:00"
12841
+ },
12842
+ {
12843
+ "id": "wh-32b112c1",
12844
+ "nodeId": "dw-ce1a81fb",
12845
+ "nodeName": "opsnode-ollmkv",
12846
+ "param": "烘箱温度设定",
12847
+ "eng": 42,
12848
+ "raw": 42,
12849
+ "ok": true,
12850
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
12851
+ "recipeRunId": "rr-0b7e9783",
12852
+ "at": "2026-09-06T20:48:42.931+08:00"
12853
+ },
12854
+ {
12855
+ "id": "wh-09accc4e",
12856
+ "nodeId": "dw-e2a2d7c5",
12857
+ "nodeName": "opsnode-ol4mpd",
12858
+ "param": "烘箱温度设定",
12859
+ "eng": 42,
12860
+ "raw": 42,
12861
+ "ok": true,
12862
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
12863
+ "recipeRunId": "rr-0589a4f4",
12864
+ "at": "2026-09-06T21:02:01.389+08:00"
12865
+ },
12866
+ {
12867
+ "id": "wh-7bcdfb7e",
12868
+ "nodeId": "dw-e2a2d7c5",
12869
+ "nodeName": "opsnode-ol4mpd",
12870
+ "param": "烘箱温度设定",
12871
+ "eng": 55,
12872
+ "raw": 55,
12873
+ "ok": true,
12874
+ "message": "Mock PLC 写入成功:55 → raw 55,回读一致(标定后物理值 55)",
12875
+ "recipeRunId": null,
12876
+ "at": "2026-09-06T21:02:01.927+08:00"
12877
+ },
12878
+ {
12879
+ "id": "wh-1c46a6fe",
12880
+ "nodeId": "dw-49b16681",
12881
+ "nodeName": "opsnode-olaogx",
12882
+ "param": "烘箱温度设定",
12883
+ "eng": 42,
12884
+ "raw": 42,
12885
+ "ok": true,
12886
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
12887
+ "recipeRunId": "rr-94cba6da",
12888
+ "at": "2026-09-06T21:16:39.847+08:00"
12889
+ },
12890
+ {
12891
+ "id": "wh-d6983f39",
12892
+ "nodeId": "dw-49b16681",
12893
+ "nodeName": "opsnode-olaogx",
12894
+ "param": "烘箱温度设定",
12895
+ "eng": 55,
12896
+ "raw": 55,
12897
+ "ok": true,
12898
+ "message": "Mock PLC 写入成功:55 → raw 55,回读一致(标定后物理值 55)",
12899
+ "recipeRunId": null,
12900
+ "at": "2026-09-06T21:16:40.387+08:00"
12901
+ },
12902
+ {
12903
+ "id": "wh-bf3a38f5",
12904
+ "nodeId": "dw-51d80e38",
12905
+ "nodeName": "opsnode-olxa06",
12906
+ "param": "烘箱温度设定",
12907
+ "eng": 42,
12908
+ "raw": 42,
12909
+ "ok": true,
12910
+ "message": "Mock PLC 写入成功:42 → raw 42,回读一致(标定后物理值 42)",
12911
+ "recipeRunId": "rr-57340705",
12912
+ "at": "2026-09-06T21:25:39.989+08:00"
12913
+ },
12914
+ {
12915
+ "id": "wh-684c7960",
12916
+ "nodeId": "dw-51d80e38",
12917
+ "nodeName": "opsnode-olxa06",
12918
+ "param": "烘箱温度设定",
12919
+ "eng": 55,
12920
+ "raw": 55,
12921
+ "ok": true,
12922
+ "message": "Mock PLC 写入成功:55 → raw 55,回读一致(标定后物理值 55)",
12923
+ "recipeRunId": null,
12924
+ "at": "2026-09-06T21:25:40.575+08:00"
12793
12925
  }
12794
12926
  ]