dsh-plc-decode 0.2.0 → 0.2.1

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/README.en.md CHANGED
@@ -24,7 +24,7 @@ Prerequisites:
24
24
  - DSH desktop app (the plugin runs inside DSH; Node version follows DSH);
25
25
  - Python 3.9+ on `PATH` for `.project` / `.dvp` (standard library only, no `pip install`);
26
26
  - Python is not needed for `.smart` / `.smartlib`.
27
- - Compatible with the DSH 0.2.1 line (alpha / rc / stable); 0.3 and later are not guaranteed.
27
+ - Requires DSH >= 0.2.1-alpha.3; verified on 0.2.1-alpha.3 and 0.2.2-rc.1, later versions untested.
28
28
 
29
29
  ```sh
30
30
  dsh plugin --profile web add github:taoziliyouchong/dsh-plc-decode
package/README.md CHANGED
@@ -35,7 +35,7 @@
35
35
  - DSH 桌面端(插件运行在 DSH 内,Node 版本跟随 DSH);
36
36
  - 解码 `.project` / `.dvp` 需要 Python 3.9+ 在 `PATH` 里(只用标准库,无需 pip 安装);
37
37
  - 解码 `.smart` / `.smartlib` 不需要 Python。
38
- - 兼容 DSH 0.2.1 系列(alpha / rc / 正式版均可);0.3 起不保证。
38
+ - 兼容 DSH 0.2.1-alpha.3 ~ 0.2.2-rc.1(本机实际运行验证过的最高版本);更高版本未验证。
39
39
 
40
40
  从 GitHub 安装:
41
41
 
@@ -105,14 +105,8 @@ dsh plugin --profile web add github:taoziliyouchong/dsh-plc-decode
105
105
 
106
106
  ### 改归档地址(不用改代码)
107
107
 
108
- 在 DSH profile 的 `cordis.patch.yml`(`$DSH_HOME/profiles/<profile>/cordis.patch.yml`)末尾加这几行:
108
+ 在 DSH profile 的 `cordis.patch.yml`(`$DSH_HOME/profiles/<profile>/cordis.patch.yml`)末尾给本插件那一行加 config(只写 `archiveDir`:归档根目录):
109
109
 
110
- ```yaml
111
- - id: dsh-plc-decode
112
- name: dsh-plc-decode
113
- config:
114
- archiveDir: D:/plc/解码归档
115
- ```
116
110
 
117
111
  `archiveDir` 是归档**根目录**:相对路径按当前会话工作区解析,绝对路径原样使用;默认 `解码归档`。改完重启 dsh 生效,`/plc-archive` 可随时查看当前生效值;只想改一次就在解码时传 `outDir`。
118
112
 
@@ -18,7 +18,7 @@ FStudio 里画面文字的显示有**两条路**:
18
18
  ## 正确工作流(三步,别多)
19
19
 
20
20
  ### 第 1 步 · 扫(一次扫全,别一页页看)
21
- 插件工具 `zzuser-fstudio-i18n`(或 `zzuser-fstudio-scan-texts` 只看清单)。
21
+ 插件工具 `fstudio-i18n`(或 `fstudio-scan-texts` 只看清单)。
22
22
 
23
23
  - 扫什么:`HMI\Frame\**\*.wcfg` 里**所有**带语种文字的元件,两条路都要收:
24
24
  ① 静态文本:`StaticTextContentInfo` 的 `LanguageSN` + `LabelContent`;
@@ -89,7 +89,7 @@ FStudio 里画面文字的显示有**两条路**:
89
89
 
90
90
 
91
91
  ### 第 3 步 · 出导入表(格式由代码保证)
92
- `zzuser-fstudio-i18n` 直接产出 `文本库导入表.xlsx`,列名与软件导出逐字符一致:
92
+ `fstudio-i18n` 直接产出 `文本库导入表.xlsx`,列名与软件导出逐字符一致:
93
93
 
94
94
  ```
95
95
  Guid | Name | Status | 1-Chinese (Simplified, PRC)-2052 | 2-English (United States)-1033
@@ -107,7 +107,7 @@ Guid | Name | Status | 1-Chinese (Simplified, PRC)-2052 | 2-English (United Stat
107
107
 
108
108
  ```
109
109
  python <插件>/assets/fstudio_i18n.py retag <导出的TextLib表.xls> <输出.xlsx> <词典.json> pt 2
110
- # 或工具/命令:zzuser-fstudio-retag <源表> <词典.json> [输出.xlsx] [语种键] [最少状态数]
110
+ # 或工具/命令:fstudio-retag <源表> <词典.json> [输出.xlsx] [语种键] [最少状态数]
111
111
  # ↑ 写 2 = 状态不够的条目补到 2 状态
112
112
  ```
113
113
 
@@ -162,4 +162,4 @@ LONG_PT = {}
162
162
  {"en": {"启动1": "Start 1"}, "pt": {"启动1": "Partida 1"}}
163
163
  ```
164
164
 
165
- 再用 `zzuser-fstudio-i18n` / `zzuser-fstudio-retag` 的 `dict` 参数传入。
165
+ 再用 `fstudio-i18n` / `fstudio-retag` 的 `dict` 参数传入。
@@ -1,15 +1,15 @@
1
- # zzuser-hmi-decode-workflow —— 触摸屏工程读取工作流
1
+ # hmi-decode-workflow —— 触摸屏工程读取工作流
2
2
 
3
- 触摸屏(HMI)工程走**本入口**,与 PLC 分开:PLC 工程(`.project` / `.dvp` / `.smart` / `.smartlib`)用 `zzuser-plc-decode`,屏工程用 `zzuser-hmi-decode`。
3
+ 触摸屏(HMI)工程走**本入口**,与 PLC 分开:PLC 工程(`.project` / `.dvp` / `.smart` / `.smartlib`)用 `plc-decode`,屏工程用 `hmi-decode`。
4
4
 
5
5
  ## 一、先认类型(别拿错工具)
6
6
 
7
7
  | 文件 | 是什么 | 用哪个 |
8
8
  |---|---|---|
9
- | `.hmismart` | 西门子 WinCC flexible SMART 触摸屏工程(Smart Line 屏) | 工具 `zzuser-hmi-decode`(解码)/`zzuser-hmi-diff-project`(新旧对比) |
10
- | `.fsprj` 或含 `HMI\Frame` 的目录 | 繁易 FStudio / Flexem 触摸屏工程 | 工具 `zzuser-hmi-decode`(扫文本)/`zzuser-fstudio-scan-texts`/`zzuser-fstudio-i18n`(多语言出表) |
9
+ | `.hmismart` | 西门子 WinCC flexible SMART 触摸屏工程(Smart Line 屏) | 工具 `hmi-decode`(解码)/`hmi-diff-project`(新旧对比) |
10
+ | `.fsprj` 或含 `HMI\Frame` 的目录 | 繁易 FStudio / Flexem 触摸屏工程 | 工具 `hmi-decode`(扫文本)/`fstudio-scan-texts`/`fstudio-i18n`(多语言出表) |
11
11
  | `<工程名>.设备_1.srt`(同目录) | 项目文本侧的序列化存储 | 主文件被锁时的旁路,见第三节 |
12
- | `Screens.xls` / `Others.xls` / `Messages.xls` | WinCC flexible「项目文本」导出成的 Excel 三件套 | 工具 `zzuser-wincc-text-i18n`(分型/回写/自检),流程见技能 `zzuser-wincc-text-i18n-workflow` |
12
+ | `Screens.xls` / `Others.xls` / `Messages.xls` | WinCC flexible「项目文本」导出成的 Excel 三件套 | 工具 `wincc-text-i18n`(分型/回写/自检),流程见技能 `wincc-text-i18n-workflow` |
13
13
 
14
14
  **第一原则与 PLC 侧相同:先要"软件里能导出的东西"**。触摸屏这边对应的是:画面清单/变量表(软件里能导 CSV 或看变量表)——导出来对账,比在工程里挖快一个数量级。
15
15
 
@@ -22,7 +22,7 @@
22
22
  - **压缩块**:gzip 头 + **裸 deflate,没有 CRC/ISIZE 尾部**——标准 `gunzip` 只能解出一小部分,必须 `inflateRaw`。解出的内容是「属性名 + 属性值」序列与软件自带的多语言系统消息。
23
23
  - **内嵌 DDL**:`Hmi*` 表的建表脚本明文可读(HmiScreenTable / HmiTagTable / HmiConnectionTable / HmiScreenItemTable …),即工程数据的逻辑模型——**查某张表有哪些字段,先看它**。
24
24
  - **一次跑完**:`assets/hmismart-decode.mjs`(原始产物)+ `assets/hmismart-report.mjs`(人读报告),产物落 `<工作区>\解码归档\<工程名>\HMI解码\`,只读源文件。
25
- - **新旧差异**:`assets/hmismart-diff.mjs`(工具 `zzuser-hmi-diff-project`)——比 ①起始画面配置 ②画面表记录 ③画面名清单 ④配套文件差异。**"重启后跳到别的画面"先看第 1 节**:`StartScreenId` 指向 `Deleted=true` 的画面时,面板启动找不到它就退到列表里的其它画面。
25
+ - **新旧差异**:`assets/hmismart-diff.mjs`(工具 `hmi-diff-project`)——比 ①起始画面配置 ②画面表记录 ③画面名清单 ④配套文件差异。**"重启后跳到别的画面"先看第 1 节**:`StartScreenId` 指向 `Deleted=true` 的画面时,面板启动找不到它就退到列表里的其它画面。
26
26
  - **查某个地址/变量时别做大范围 grep**:含压缩块原文的几份产物里宽 pattern(如 `VW`)会刷出几百行垃圾、把上下文冲掉;要查就用具体串。另:**地址表里出现 ≠ 画面绑定**,要知道挂在哪个控件上,得回对象记录再查一层。
27
27
 
28
28
  ### 两台软件同时唱着的时候:直接读旁系 `.data`(省一次解锁)
@@ -43,11 +43,11 @@
43
43
 
44
44
  ## 四、繁易 FStudio(多语言另见专篇)
45
45
 
46
- - 工具:`zzuser-hmi-decode`(读工程→扫元件文本)、`zzuser-fstudio-scan-texts`(只看要翻什么)、`zzuser-fstudio-i18n`(出对照表 + 可导入文本库的表)。
47
- - 方法与踩坑见同插件技能 **`zzuser-fstudio-i18n-workflow`**:列名逐字符一致、元件文字常写死不走文本库、原工程英文槽常是错填。
46
+ - 工具:`hmi-decode`(读工程→扫元件文本)、`fstudio-scan-texts`(只看要翻什么)、`fstudio-i18n`(出对照表 + 可导入文本库的表)。
47
+ - 方法与踩坑见同插件技能 **`fstudio-i18n-workflow`**:列名逐字符一致、元件文字常写死不走文本库、原工程英文槽常是错填。
48
48
 
49
49
  ## 五、交付与边界
50
50
 
51
51
  - 产物约定:`.hmismart` 写 `<工作区>\解码归档\<工程名>\HMI解码\`;FStudio 写 `<工程目录>\多语言产出\`。**不写系统临时目录、不污染工程目录**。
52
52
  - 只读源工程;`解码归档` 里的报告是某个版本的快照,拿旧报告对账前先比源文件的**大小 + 修改时间**。
53
- - 屏上地址为什么长成"不是西门子那种格式"(M 区名、Modbus 号、命名习惯):见 PLC 侧技能 `zzuser-codesys-teach-workflow` §5——那是工程地址面的事,不在这里重复。
53
+ - 屏上地址为什么长成"不是西门子那种格式"(M 区名、Modbus 号、命名习惯):见 PLC 侧技能 `codesys-teach-workflow` §5——那是工程地址面的事,不在这里重复。
@@ -88,6 +88,6 @@
88
88
  ## 八、改文件
89
89
 
90
90
  - 只改数据行第 3、4 列(英文、第三语种),中文列与全部结构行原样;写回 UTF-16LE+BOM、LF。
91
- - 改前备份原件(`E:\chajian\_backup\<日期>-<主题>\` 保留原相对路径)。
91
+ - 改前先把原件备份到独立目录(保留原相对路径),再动导出表。
92
92
  - 目标 xlsx 正被 Excel 打开时:用 COM 连活动实例(`Get-ActiveObject`),**先查 `Saved=True`** 再改;
93
93
  有未保存改动就不动,问用户。改完 `Workbook.Save()`,不要 `Quit`。
@@ -1,4 +1,4 @@
1
- # zzuser-wincc-text-i18n-workflow —— 西门子触摸屏项目文本翻译
1
+ # wincc-text-i18n-workflow —— 西门子触摸屏项目文本翻译
2
2
 
3
3
  `Screens.xls / Others.xls / Messages.xls` 是 WinCC flexible(SMART)把工程文字按「画面 / 其它 / 报警」三处导出成的 Excel。英文列多半是半成品:有的空着,有的还是中文,更多是**串位**——这类表不能当成"填空",得当校对。
4
4
 
@@ -16,11 +16,11 @@
16
16
  3. `apply`:回写目标列,出**同扩展名**.xls。
17
17
  4. `check`:键列没动、没有未译、没有残留 `$_ignore`、没有串位(源无中文而译文更长)、没有一源多译。
18
18
 
19
- 工具:`zzuser-wincc-text-i18n`,`action=scan | apply | check`。
19
+ 工具:`wincc-text-i18n`,`action=scan | apply | check`。
20
20
 
21
21
  ## 三、分型只解决一半
22
22
 
23
- scan 判得出来的是:空译、中文残留、`$_ignore`、非中文同形(编号/日期格式)、**编号行挂词**——源文本不含中文(纯编号/代号)而译文更长的行,例如 `Q10` 对 `Q10 top box`、`Q23` 对 `Q3 Reject`。这一类就是串位:别行的功能词落到这一行了,按「源只有编号,译文也只留编号」处理;日期格式串(`yyyy-M-d H:mm:ss`)两列本来就不一样,不算。
23
+ scan 判得出来的是:空译、中文残留、`$_ignore`、非中文同形(编号/日期格式)、**编号行挂词**——源文本不含中文(纯编号/代号)而译文更长的行。这一类就是串位:别行的功能词落到这一行了,按「源只有编号,译文也只留编号」处理;日期格式串(`yyyy-M-d H:mm:ss`)两列本来就不一样,不算。
24
24
 
25
25
  判不出来的仍是错译:中文对得上、译文却是另一个意思的那种,必须逐行看一遍。错译常见的三种样子:
26
26
 
package/hmi.js CHANGED
@@ -274,19 +274,19 @@ async function retagFstudio(ctx, src, outArg, dict, lang, minStatus, exec) {
274
274
 
275
275
  const SKILLS = [
276
276
  {
277
- name: 'zzuser-hmi-decode-workflow',
277
+ name: 'hmi-decode-workflow',
278
278
  description: '触摸屏工程读取工作流:.hmismart 全解(画面/变量/连接)与新旧差异、.srt 项目文本旁路读法、FStudio 多语言入口。接触摸屏(HMI)工程任务时加载。',
279
- file: 'zzuser-hmi-decode-workflow.md',
279
+ file: 'hmi-decode-workflow.md',
280
280
  },
281
281
  {
282
- name: 'zzuser-fstudio-i18n-workflow',
282
+ name: 'fstudio-i18n-workflow',
283
283
  description: 'FStudio/Flexem 触摸屏多语言翻译的正确工作流:三步(扫元件文本→出对照表→出可导入表)与踩坑清单(列名逐字符一致、元件文字写死不走文本库、原工程英文槽常是错填)。接多语言/翻译类触摸屏任务时加载。',
284
- file: 'zzuser-fstudio-i18n-workflow.md',
284
+ file: 'fstudio-i18n-workflow.md',
285
285
  },
286
286
  {
287
- name: 'zzuser-wincc-text-i18n-workflow',
287
+ name: 'wincc-text-i18n-workflow',
288
288
  description: '西门子 WinCC flexible/SMART 项目文本(Screens/Others/Messages 三件套 xls)翻译流程:格式契约(第 1 列是匹配键、换行是真换行、$_ignore 不许动)、分型判据、错译串位的识别、一源一译、术语表与出 .xls 的写法。接「触摸屏项目文本翻译/英文没填/导回英文」类任务时加载。',
289
- file: 'zzuser-wincc-text-i18n-workflow.md',
289
+ file: 'wincc-text-i18n-workflow.md',
290
290
  },
291
291
  ]
292
292
 
package/index.js CHANGED
@@ -3234,11 +3234,7 @@ export function apply(ctx, config = {}) {
3234
3234
  `解析方式: ${isAbsolute(ARCHIVE_ROOT) ? '绝对路径,原样使用' : `相对路径,按会话工作区解析(本进程 cwd = ${process.cwd()})`}`,
3235
3235
  '默认落点: <归档根>\\<工程文件所在文件夹名>\\(同一文件夹里有多个工程文件时用 <文件夹名>_<文件名>)',
3236
3236
  '',
3237
- '改配置(改完重启 dsh 生效):在 DSH profile 的 cordis.patch.yml 里给本插件那行加 config:',
3238
- ' - id: dsh-plc-decode',
3239
- ' name: dsh-plc-decode',
3240
- ' config:',
3241
- ' archiveDir: D:/plc/解码归档',
3237
+ '改配置(改完重启 dsh 生效):在 DSH profile 的 cordis.patch.yml 里给本插件那行加 config,只写 archiveDir(归档根目录)。',
3242
3238
  '',
3243
3239
  '只改这一次、不写配置:解码时传 outDir 参数(工具参数或 /plc-decode 的第二个参数)。',
3244
3240
  ].join('\n'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plc-decode",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "在 DSH 里读工控工程文件:PLC(CoDeSys、台达、西门子 SMART)与触摸屏(西门子 WinCC flexible SMART、繁易 FStudio、欧姆龙 NB、昆仑通态 MCGS)里的程序、画面、控件、变量与地址,读成能查的报告与表。",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "engines": {
24
24
  "node": "^22.19.0 || >=24.0.0",
25
- "dsh": ">=0.2.1-0 <0.3.0-0"
25
+ "dsh": ">=0.2.1-0"
26
26
  },
27
27
  "dsh": {
28
28
  "bundle": {