agentworkshop 0.7.2 → 0.7.3
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.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/c6c01cdd-762e-4fb8-86e7-753c5185b856.json +1 -0
- package/.output/server/chunks/_/nitro.mjs +676 -676
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +8 -2
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/config.yml +1 -1
- package/package.json +1 -1
- package/server/api/plugins/[name]/[...path].ts +10 -1
- package/server/data/daqs.json +44 -14
- package/server/data/dcw-lines.json +7 -0
- package/server/data/dcw-products.json +7 -0
- package/server/data/dcw-recipes.json +28 -0
- package/server/data/dcw-rollback.json +23 -1
- package/server/data/dcw-runs.json +27 -18
- package/server/data/dcw-writes.json +60 -0
- package/server/data/dcws.json +124 -97
- package/server/data/line-runs.json +10 -0
- package/.output/public/_nuxt/builds/meta/4d990d25-ebbb-4fe4-a23b-3d28c7f42fee.json +0 -1
|
@@ -18,7 +18,7 @@ import 'node:fs/promises';
|
|
|
18
18
|
import 'node:zlib';
|
|
19
19
|
|
|
20
20
|
const ____path_ = defineEventHandler(async (event) => {
|
|
21
|
-
var _a, _b, _c, _d;
|
|
21
|
+
var _a, _b, _c, _d, _e, _f;
|
|
22
22
|
const host = getPluginHost();
|
|
23
23
|
if (!host) throw createError({ statusCode: 503, statusMessage: "plugin host not ready" });
|
|
24
24
|
const name = String((_b = (_a = event.context.params) == null ? void 0 : _a.name) != null ? _b : "");
|
|
@@ -29,7 +29,13 @@ const ____path_ = defineEventHandler(async (event) => {
|
|
|
29
29
|
}
|
|
30
30
|
const awBody = await readBody(event).catch(() => void 0);
|
|
31
31
|
event.awBody = awBody;
|
|
32
|
-
|
|
32
|
+
try {
|
|
33
|
+
return await handler(event);
|
|
34
|
+
} catch (err) {
|
|
35
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
36
|
+
(_f = (_e = host.logger) == null ? void 0 : _e.error) == null ? void 0 : _f.call(_e, `\u63D2\u4EF6\u8DEF\u7531\u5904\u7406\u5931\u8D25 [${name}] ${event.method} /api/plugins/${name}${path}: ${reason}`);
|
|
37
|
+
throw createError({ statusCode: 500, statusMessage: `\u63D2\u4EF6\u8DEF\u7531\u5904\u7406\u5931\u8D25(${name}): ${reason}` });
|
|
38
|
+
}
|
|
33
39
|
});
|
|
34
40
|
|
|
35
41
|
export { ____path_ as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_...path_.mjs","sources":["../../../../../../../server/api/plugins/[name]/[...path].ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"_...path_.mjs","sources":["../../../../../../../server/api/plugins/[name]/[...path].ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AASA,kBAAe,kBAAA,CAAmB,OAAO,KAAA,KAAU;AATnD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAUE,EAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,EAAA,IAAI,CAAC,MAAM,MAAM,WAAA,CAAY,EAAE,UAAA,EAAY,GAAA,EAAK,aAAA,EAAe,uBAAA,EAAyB,CAAA;AACxF,EAAA,MAAM,IAAA,GAAO,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAA,CAAQ,WAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,IAAA,KAAtB,YAA8B,EAAE,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,GAAA,GAAA,CAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,IAAA,KAAtB,IAAA,GAAA,EAAA,GAA8B,EAAA,EAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACxE,EAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAA,EAAM,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC5D,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,WAAA,CAAY,EAAE,UAAA,EAAY,GAAA,EAAK,aAAA,EAAe,CAAA,wBAAA,EAA2B,KAAA,CAAM,MAAM,CAAA,cAAA,EAAiB,IAAI,CAAA,EAAG,IAAI,IAAI,CAAA;AAAA,EAC7H;AAEA,EAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAK,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACzD,EAAC,MAAkC,MAAA,GAAS,MAAA;AAC7C,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,QAAQ,KAAK,CAAA;AAAA,EAC5B,SACO,GAAA,EAAK;AAEV,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,KAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAqB,qDAAa,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,cAAA,EAAiB,IAAI,CAAA,EAAG,IAAI,KAAK,MAAM,CAAA,CAAA,CAAA;AAC9F,IAAA,MAAM,WAAA,CAAY,EAAE,UAAA,EAAY,GAAA,EAAK,aAAA,EAAe,oDAAY,IAAI,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA,EAAI,CAAA;AAAA,EACtF;AACF,CAAC,CAAA;;;;"}
|
package/config.yml
CHANGED
package/package.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* /api/plugins/:name/** —— 插件自注册 API 的转发层(exact-match)。
|
|
3
3
|
* 插件经 ctx.route(method, path, handler) 注册;handler(event) 返回值由 nitro 序列化。
|
|
4
4
|
* 鉴权由插件自行处理(v1 不强制;可经 resolveUser 复用业务鉴权)。
|
|
5
|
+
* 错误隔离:插件 handler 抛错 → 结构化日志(带插件归属)+ 干净 500 信封,不裸传堆栈。
|
|
5
6
|
*/
|
|
6
7
|
import { defineEventHandler, createError, readBody } from 'h3'
|
|
7
8
|
import { getPluginHost } from '@/server/services/workshop/plugins/host.mjs'
|
|
@@ -18,5 +19,13 @@ export default defineEventHandler(async (event) => {
|
|
|
18
19
|
// 预读 body 挂到 event(插件 handler 无 h3 导入能力,经 event.awBody 消费)
|
|
19
20
|
const awBody = await readBody(event).catch(() => undefined)
|
|
20
21
|
;(event as Record<string, unknown>).awBody = awBody
|
|
21
|
-
|
|
22
|
+
try {
|
|
23
|
+
return await handler(event)
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
// 问题日志:插件归属 + 路由 + 原始原因(运维按 name 即可定位到具体插件目录)
|
|
27
|
+
const reason = err instanceof Error ? err.message : String(err)
|
|
28
|
+
host.logger?.error?.(`插件路由处理失败 [${name}] ${event.method} /api/plugins/${name}${path}: ${reason}`)
|
|
29
|
+
throw createError({ statusCode: 500, statusMessage: `插件路由处理失败(${name}): ${reason}` })
|
|
30
|
+
}
|
|
22
31
|
})
|
package/server/data/daqs.json
CHANGED
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
"posX": 1695,
|
|
65
65
|
"posZ": 1135,
|
|
66
66
|
"lineId": "ln-af002514",
|
|
67
|
-
"value":
|
|
67
|
+
"value": 167.3,
|
|
68
68
|
"state": "ok",
|
|
69
|
-
"lastAt": "2026-09-
|
|
69
|
+
"lastAt": "2026-09-03T17:12:29.342Z",
|
|
70
70
|
"createdAt": "2026-08-27T12:39:08.110Z"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
@@ -308,9 +308,9 @@
|
|
|
308
308
|
"deviceBindingId": null,
|
|
309
309
|
"driverConfig": {},
|
|
310
310
|
"lineId": "ln-af002514",
|
|
311
|
-
"value":
|
|
311
|
+
"value": 319,
|
|
312
312
|
"state": "ok",
|
|
313
|
-
"lastAt": "2026-09-
|
|
313
|
+
"lastAt": "2026-09-03T17:12:29.342Z",
|
|
314
314
|
"createdAt": "2026-08-28T09:37:38.518Z"
|
|
315
315
|
},
|
|
316
316
|
{
|
|
@@ -330,9 +330,9 @@
|
|
|
330
330
|
"deviceBindingId": null,
|
|
331
331
|
"driverConfig": {},
|
|
332
332
|
"lineId": "ln-af002514",
|
|
333
|
-
"value":
|
|
333
|
+
"value": 167.5,
|
|
334
334
|
"state": "ok",
|
|
335
|
-
"lastAt": "2026-09-
|
|
335
|
+
"lastAt": "2026-09-03T17:12:29.342Z",
|
|
336
336
|
"createdAt": "2026-08-29T03:30:57.463Z"
|
|
337
337
|
},
|
|
338
338
|
{
|
|
@@ -1012,9 +1012,9 @@
|
|
|
1012
1012
|
"posX": 2395,
|
|
1013
1013
|
"posZ": 1135,
|
|
1014
1014
|
"lineId": "ln-af002514",
|
|
1015
|
-
"value":
|
|
1015
|
+
"value": 168.9,
|
|
1016
1016
|
"state": "ok",
|
|
1017
|
-
"lastAt": "2026-09-
|
|
1017
|
+
"lastAt": "2026-09-03T17:12:29.855Z",
|
|
1018
1018
|
"createdAt": "2026-08-31T04:07:19.038Z"
|
|
1019
1019
|
},
|
|
1020
1020
|
{
|
|
@@ -3026,9 +3026,9 @@
|
|
|
3026
3026
|
"posX": 120,
|
|
3027
3027
|
"posZ": 120,
|
|
3028
3028
|
"lineId": "ln-af002514",
|
|
3029
|
-
"value":
|
|
3029
|
+
"value": 0.9894,
|
|
3030
3030
|
"state": "alarm",
|
|
3031
|
-
"lastAt": "2026-09-
|
|
3031
|
+
"lastAt": "2026-09-03T17:12:29.342Z",
|
|
3032
3032
|
"createdAt": "2026-09-03T10:17:59.182Z"
|
|
3033
3033
|
},
|
|
3034
3034
|
{
|
|
@@ -3050,9 +3050,9 @@
|
|
|
3050
3050
|
"posX": 120,
|
|
3051
3051
|
"posZ": 120,
|
|
3052
3052
|
"lineId": "ln-af002514",
|
|
3053
|
-
"value": 0.
|
|
3053
|
+
"value": 0.9544,
|
|
3054
3054
|
"state": "alarm",
|
|
3055
|
-
"lastAt": "2026-09-
|
|
3055
|
+
"lastAt": "2026-09-03T17:12:29.342Z",
|
|
3056
3056
|
"createdAt": "2026-09-03T11:18:01.401Z"
|
|
3057
3057
|
},
|
|
3058
3058
|
{
|
|
@@ -3072,9 +3072,9 @@
|
|
|
3072
3072
|
"deviceBindingId": "dev-mthzr991-ujuad",
|
|
3073
3073
|
"driverConfig": {},
|
|
3074
3074
|
"lineId": "ln-af002514",
|
|
3075
|
-
"value":
|
|
3075
|
+
"value": 0.9924,
|
|
3076
3076
|
"state": "alarm",
|
|
3077
|
-
"lastAt": "2026-09-
|
|
3077
|
+
"lastAt": "2026-09-03T17:12:29.342Z",
|
|
3078
3078
|
"createdAt": "2026-09-03T11:34:59.332Z"
|
|
3079
3079
|
},
|
|
3080
3080
|
{
|
|
@@ -3166,5 +3166,35 @@
|
|
|
3166
3166
|
"state": "offline",
|
|
3167
3167
|
"lastAt": null,
|
|
3168
3168
|
"createdAt": "2026-09-03T16:44:33.194Z"
|
|
3169
|
+
},
|
|
3170
|
+
{
|
|
3171
|
+
"id": "dn-dee06516",
|
|
3172
|
+
"templateRef": "daq-temp-tc",
|
|
3173
|
+
"name": "烘箱温度PV",
|
|
3174
|
+
"driver": "modbus-tcp",
|
|
3175
|
+
"enabled": true,
|
|
3176
|
+
"intervalMs": null,
|
|
3177
|
+
"publishIntervalMs": null,
|
|
3178
|
+
"unit": "℃",
|
|
3179
|
+
"decimals": 1,
|
|
3180
|
+
"min": 150,
|
|
3181
|
+
"max": 185,
|
|
3182
|
+
"warnLow": 152.8,
|
|
3183
|
+
"warnHigh": 182.2,
|
|
3184
|
+
"deviceBindingId": null,
|
|
3185
|
+
"driverConfig": {
|
|
3186
|
+
"host": "127.0.0.1",
|
|
3187
|
+
"port": 15041,
|
|
3188
|
+
"unitId": 1,
|
|
3189
|
+
"register": 40001,
|
|
3190
|
+
"registerType": "holding",
|
|
3191
|
+
"dataType": "float32",
|
|
3192
|
+
"byteOrder": "big"
|
|
3193
|
+
},
|
|
3194
|
+
"lineId": "ln-758658dc",
|
|
3195
|
+
"value": null,
|
|
3196
|
+
"state": "offline",
|
|
3197
|
+
"lastAt": null,
|
|
3198
|
+
"createdAt": "2026-09-03T17:12:52.201Z"
|
|
3169
3199
|
}
|
|
3170
3200
|
]
|
|
@@ -1076,5 +1076,12 @@
|
|
|
1076
1076
|
"color": "#41c8f4",
|
|
1077
1077
|
"description": "",
|
|
1078
1078
|
"createdAt": "2026-09-03T16:44:33.191Z"
|
|
1079
|
+
},
|
|
1080
|
+
{
|
|
1081
|
+
"id": "ln-758658dc",
|
|
1082
|
+
"name": "PLC 闭环验证线",
|
|
1083
|
+
"color": "#b58cff",
|
|
1084
|
+
"description": "",
|
|
1085
|
+
"createdAt": "2026-09-03T17:12:52.197Z"
|
|
1079
1086
|
}
|
|
1080
1087
|
]
|
|
@@ -978,5 +978,12 @@
|
|
|
978
978
|
"name": "闭环验证产品",
|
|
979
979
|
"description": "",
|
|
980
980
|
"createdAt": "2026-09-03T16:44:33.192Z"
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"id": "pd-835aed90",
|
|
984
|
+
"lineId": "ln-758658dc",
|
|
985
|
+
"name": "闭环验证产品",
|
|
986
|
+
"description": "",
|
|
987
|
+
"createdAt": "2026-09-03T17:12:52.198Z"
|
|
981
988
|
}
|
|
982
989
|
]
|
|
@@ -1998,5 +1998,33 @@
|
|
|
1998
1998
|
"lastGoodRunId": null,
|
|
1999
1999
|
"createdAt": "2026-09-03T16:44:33.196Z",
|
|
2000
2000
|
"updatedAt": "2026-09-03T16:44:33.196Z"
|
|
2001
|
+
},
|
|
2002
|
+
{
|
|
2003
|
+
"id": "rc-6acb6e12",
|
|
2004
|
+
"productId": "pd-835aed90",
|
|
2005
|
+
"lineId": "ln-758658dc",
|
|
2006
|
+
"name": "A-闭环工艺",
|
|
2007
|
+
"description": "",
|
|
2008
|
+
"params": [
|
|
2009
|
+
{
|
|
2010
|
+
"nodeId": "dw-8fb89e02",
|
|
2011
|
+
"templateRef": "dcw-temp-sp",
|
|
2012
|
+
"value": 160,
|
|
2013
|
+
"min": 100,
|
|
2014
|
+
"max": 200
|
|
2015
|
+
}
|
|
2016
|
+
],
|
|
2017
|
+
"daqWindows": [
|
|
2018
|
+
{
|
|
2019
|
+
"nodeId": "dn-dee06516",
|
|
2020
|
+
"min": 0,
|
|
2021
|
+
"max": 400
|
|
2022
|
+
}
|
|
2023
|
+
],
|
|
2024
|
+
"version": 1,
|
|
2025
|
+
"paramsHistory": [],
|
|
2026
|
+
"lastGoodRunId": null,
|
|
2027
|
+
"createdAt": "2026-09-03T17:12:52.203Z",
|
|
2028
|
+
"updatedAt": "2026-09-03T17:12:52.203Z"
|
|
2001
2029
|
}
|
|
2002
2030
|
]
|
|
@@ -3425,6 +3425,28 @@
|
|
|
3425
3425
|
"recipeRunId": null,
|
|
3426
3426
|
"id": "anc-d64116cc",
|
|
3427
3427
|
"at": "2026-09-03T16:38:55.561Z"
|
|
3428
|
+
},
|
|
3429
|
+
{
|
|
3430
|
+
"lineId": "ln-af002514",
|
|
3431
|
+
"nodeId": "dw-2a906dea",
|
|
3432
|
+
"prevValue": null,
|
|
3433
|
+
"newValue": 170,
|
|
3434
|
+
"source": "manual",
|
|
3435
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3436
|
+
"recipeRunId": null,
|
|
3437
|
+
"id": "anc-1b81095f",
|
|
3438
|
+
"at": "2026-09-03T17:11:31.133Z"
|
|
3439
|
+
},
|
|
3440
|
+
{
|
|
3441
|
+
"lineId": "",
|
|
3442
|
+
"nodeId": "dw-8277e370",
|
|
3443
|
+
"prevValue": null,
|
|
3444
|
+
"newValue": 160,
|
|
3445
|
+
"source": "manual",
|
|
3446
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3447
|
+
"recipeRunId": null,
|
|
3448
|
+
"id": "anc-38e1341a",
|
|
3449
|
+
"at": "2026-09-03T17:12:25.776Z"
|
|
3428
3450
|
}
|
|
3429
3451
|
],
|
|
3430
3452
|
"records": [
|
|
@@ -3816,7 +3838,7 @@
|
|
|
3816
3838
|
"channels": [],
|
|
3817
3839
|
"degraded": true
|
|
3818
3840
|
},
|
|
3819
|
-
"evaluatedAt": "2026-09-
|
|
3841
|
+
"evaluatedAt": "2026-09-03T17:16:59.443Z",
|
|
3820
3842
|
"windowAgg": {
|
|
3821
3843
|
"at": "2026-08-31T16:25:17.398Z",
|
|
3822
3844
|
"fromMs": 1788193396897,
|
|
@@ -1,22 +1,4 @@
|
|
|
1
1
|
[
|
|
2
|
-
{
|
|
3
|
-
"id": "rr-842bf8f2",
|
|
4
|
-
"recipeId": "rc-441a308a",
|
|
5
|
-
"recipeName": "工具审计配方",
|
|
6
|
-
"productId": "pd-6d5b56d9",
|
|
7
|
-
"lineId": "ln-2d9ddcdd",
|
|
8
|
-
"startedAt": "2026-08-30T02:07:36.105Z",
|
|
9
|
-
"endedAt": "2026-08-30T02:07:49.656Z",
|
|
10
|
-
"results": [
|
|
11
|
-
{
|
|
12
|
-
"templateRef": "dcw-temp-sp",
|
|
13
|
-
"nodeId": "dw-33200617",
|
|
14
|
-
"ok": true,
|
|
15
|
-
"message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
|
|
16
|
-
"value": 180
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
2
|
{
|
|
21
3
|
"id": "rr-7bd50f54",
|
|
22
4
|
"recipeId": "rc-c1cc9555",
|
|
@@ -5507,5 +5489,32 @@
|
|
|
5507
5489
|
"max": 200
|
|
5508
5490
|
}
|
|
5509
5491
|
]
|
|
5492
|
+
},
|
|
5493
|
+
{
|
|
5494
|
+
"id": "rr-c66a150f",
|
|
5495
|
+
"recipeId": "rc-6acb6e12",
|
|
5496
|
+
"recipeName": "A-闭环工艺",
|
|
5497
|
+
"productId": "pd-835aed90",
|
|
5498
|
+
"lineId": "ln-758658dc",
|
|
5499
|
+
"startedAt": "2026-09-03T17:12:52.205Z",
|
|
5500
|
+
"endedAt": null,
|
|
5501
|
+
"results": [
|
|
5502
|
+
{
|
|
5503
|
+
"templateRef": "dcw-temp-sp",
|
|
5504
|
+
"nodeId": "dw-8fb89e02",
|
|
5505
|
+
"ok": true,
|
|
5506
|
+
"message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
|
|
5507
|
+
"value": 160
|
|
5508
|
+
}
|
|
5509
|
+
],
|
|
5510
|
+
"paramsSnapshot": [
|
|
5511
|
+
{
|
|
5512
|
+
"nodeId": "dw-8fb89e02",
|
|
5513
|
+
"templateRef": "dcw-temp-sp",
|
|
5514
|
+
"value": 160,
|
|
5515
|
+
"min": 100,
|
|
5516
|
+
"max": 200
|
|
5517
|
+
}
|
|
5518
|
+
]
|
|
5510
5519
|
}
|
|
5511
5520
|
]
|
|
@@ -11158,5 +11158,65 @@
|
|
|
11158
11158
|
"message": "写入并回读一致:180 → raw 180,回读 180(标定后物理值 180)",
|
|
11159
11159
|
"recipeRunId": null,
|
|
11160
11160
|
"at": "2026-09-03T16:45:06.388Z"
|
|
11161
|
+
},
|
|
11162
|
+
{
|
|
11163
|
+
"id": "wh-1e5c08cc",
|
|
11164
|
+
"nodeId": "dw-2a906dea",
|
|
11165
|
+
"nodeName": "PLC闭环·温度SP",
|
|
11166
|
+
"param": "烘箱温度设定",
|
|
11167
|
+
"eng": 170,
|
|
11168
|
+
"raw": 170,
|
|
11169
|
+
"ok": true,
|
|
11170
|
+
"message": "写入并回读一致:170 → raw 170,回读 170(标定后物理值 170)",
|
|
11171
|
+
"recipeRunId": null,
|
|
11172
|
+
"at": "2026-09-03T17:11:31.114Z"
|
|
11173
|
+
},
|
|
11174
|
+
{
|
|
11175
|
+
"id": "wh-ee6ac446",
|
|
11176
|
+
"nodeId": "dw-8277e370",
|
|
11177
|
+
"nodeName": "PLC闭环·标定×10",
|
|
11178
|
+
"param": "烘箱温度设定",
|
|
11179
|
+
"eng": 160,
|
|
11180
|
+
"raw": 16,
|
|
11181
|
+
"ok": true,
|
|
11182
|
+
"message": "写入并回读一致:16 → raw 16,回读 16(标定后物理值 160)",
|
|
11183
|
+
"recipeRunId": null,
|
|
11184
|
+
"at": "2026-09-03T17:12:25.745Z"
|
|
11185
|
+
},
|
|
11186
|
+
{
|
|
11187
|
+
"id": "wh-9251f06c",
|
|
11188
|
+
"nodeId": "dw-ab6426b2",
|
|
11189
|
+
"nodeName": "PLC闭环·故障注入",
|
|
11190
|
+
"param": "烘箱温度设定",
|
|
11191
|
+
"eng": 170,
|
|
11192
|
+
"raw": null,
|
|
11193
|
+
"ok": false,
|
|
11194
|
+
"message": "Modbus 写入失败: 无法建立连接——检查 PLC 电源/IP/端口与防火墙(connect ECONNREFUSED 127.0.0.1:15199)",
|
|
11195
|
+
"recipeRunId": null,
|
|
11196
|
+
"at": "2026-09-03T17:12:25.824Z"
|
|
11197
|
+
},
|
|
11198
|
+
{
|
|
11199
|
+
"id": "wh-454e2627",
|
|
11200
|
+
"nodeId": "dw-8fb89e02",
|
|
11201
|
+
"nodeName": "烘箱温度设定",
|
|
11202
|
+
"param": "烘箱温度设定",
|
|
11203
|
+
"eng": 160,
|
|
11204
|
+
"raw": 160,
|
|
11205
|
+
"ok": true,
|
|
11206
|
+
"message": "写入并回读一致:160 → raw 160,回读 160(标定后物理值 160)",
|
|
11207
|
+
"recipeRunId": "rr-c66a150f",
|
|
11208
|
+
"at": "2026-09-03T17:12:52.208Z"
|
|
11209
|
+
},
|
|
11210
|
+
{
|
|
11211
|
+
"id": "wh-6ceab2a9",
|
|
11212
|
+
"nodeId": "dw-8fb89e02",
|
|
11213
|
+
"nodeName": "烘箱温度设定",
|
|
11214
|
+
"param": "烘箱温度设定",
|
|
11215
|
+
"eng": 180,
|
|
11216
|
+
"raw": 180,
|
|
11217
|
+
"ok": true,
|
|
11218
|
+
"message": "写入并回读一致:180 → raw 180,回读 180(标定后物理值 180)",
|
|
11219
|
+
"recipeRunId": null,
|
|
11220
|
+
"at": "2026-09-03T17:13:25.417Z"
|
|
11161
11221
|
}
|
|
11162
11222
|
]
|