# mamimiGo **Repository Path**: sdssaa/mamimiGo ## Basic Information - **Project Name**: mamimiGo - **Description**: mamimi三菱纯净GO语言版本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-07 - **Last Updated**: 2026-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mamimiGo Java SECS/HSMS 设备端网关(mamimi14)的 Go 语言等价重写。 ## 简介 mamimiGo 是工业半导体设备通信网关,桥接 Host(HSMS/SECS-II)与 PLC(三菱 MC / 倍福 ADS / 汇川 OPC UA),并提供 Web 管理后台。完整移植自 Java 版 mamimi14,配置文件零改造复用。 ## 功能模块 | 模块 | 说明 | 对应 Java 包 | |---|---|---| | 配置层 | 文件型持久化,复用 `DB/PERSIST_ENTITY_*.json` | secs.main.Config / PersistEntity | | SECS-II 编解码 | List/ASCII/U1-4/I1-4/F4/F8/Bool/Bin | secs.dt | | HSMS 传输 | 被动 TCP 服务端,14 字节帧,Select/LinkTest | secs.main.SocketHandle / tools | | SxFy 处理器 | S1/S2/S5/S6/S7/S9/S10 各流 | secs.readdatahandle.* | | PLC 通信 | MC(gomcprotocol)/ ADS(ads-go)/ OPC UA(gopcua) | mcprol / mcprol.bk / opcServer | | Web 后台 | Gin REST + JWT,端口 9813 | secs.web.ctrl.* | | 授权 | 软授权(默认)+ 真实加密狗(`-tags dongle`) | softkey / DongleDetection / Gatekeeper | | 日志 | zap + 按日 SECS 报文日志 + PLC CSV | logback / SLog / CSVLog | ## 快速开始 ### 编译 ```bash cd mamimiGo # 默认(软授权后端,纯 Go,无需 CGO/gcc,跨平台) go build -o mamimi ./cmd/mamimi # 硬件加密狗后端(需 CGO + MinGW gcc,仅 Windows) # 已安装 llvm-mingw 到 C:\llvm-mingw-20260602-ucrt-x86_64(已加入 PATH) CGO_ENABLED=1 go build -tags dongle -o mamimi ./cmd/mamimi ``` ### 运行 ```bash # 复用现有 Java 版的 DB/ 配置目录 mamimi -db ../DB -log logs # 开发模式(关闭软授权,仅 SoftBackend 生效) AUTHZ_DISABLE=1 mamimi -db ../DB -log logs ``` ### 授权后端 | 模式 | 后端 | 行为 | |---|---|---| | 默认 | SoftBackend | `AUTHZ_DISABLE=1` 关闭检查;`AUTHZ_LICENSE_KEY` 授权码校验;都不设→启动即放行 | | `-tags dongle` | DongleBackend | 启动时 `FindPort(0)` 探测加密狗,在场→Granted;未找到→30 分钟宽限期(对应 Java Gatekeeper);运行期每 10 秒重新探测,狗拔出/恢复自动切换 | 环境变量: - `AUTHZ_DISABLE=1` — 关闭软授权(仅 SoftBackend) - `AUTHZ_LICENSE_KEY=xxx` — 软授权码(仅 SoftBackend) - `AUTHZ_GRACE_MINUTES=30` — 宽限期分钟 ### 默认端口 - HSMS 被动服务端:从 `PERSIST_ENTITY_hsmsConf.json` 的 port(原项目 5030/10001) - Web 管理后台:9813 - 默认账号:`admin` / `admin` ## 目录结构 ``` mamimiGo/ ├── cmd/mamimi/ # 入口 ├── internal/ │ ├── config/ # 配置层 + 状态机 + 持久化 + GEM 实体 │ ├── secs/ │ │ ├── dt/ # SECS-II 数据类型 │ │ ├── hsms/ # HSMS 帧编解码 + 被动服务端 │ │ ├── handler/ # 各 SxFy 处理器(s1-s10) │ │ └── secslog/ # SECS 报文日志 │ ├── plc/ # PLC 通信抽象 │ │ ├── mc/ # 三菱 MC 协议 │ │ ├── ads/ # 倍福 ADS 协议 │ │ └── opcua/ # 汇川 OPC UA │ ├── web/ # Gin REST 后台 │ │ ├── auth/ # JWT 鉴权 │ │ └── controller/ # 各 REST 控制器 │ ├── authz/ # 软授权 │ ├── logx/ # 日志封装 │ ├── runtime/ # 守护任务(心跳/watchdog) │ └── service/ # PLC service 接口(防循环导入) └── go.mod ``` ## 配置兼容 直接读取 Java 版的配置文件,无需迁移: - `DB/PERSIST_ENTITY_*.json` — HSMS/网络/PLC/GEM 配置 - `DB/SVIDs.json` / `Alarms.json` / `ECIDs.json` 等 — GEM 实体 ## 关键依赖 | 库 | 用途 | |---|---| | github.com/moge800/gomcprotocol | 三菱 MC 协议(3E Binary/Ascii) | | github.com/jarmocluyse/ads-go | 倍福 ADS 协议 | | github.com/gopcua/opcua | OPC UA(汇川) | | github.com/gin-gonic/gin | Web 框架 | | github.com/golang-jwt/jwt/v5 | JWT 鉴权 | | go.uber.org/zap | 结构化日志 | ## 与 Java 版差异 - **加密狗**:Go 版通过 `-tags dongle` 启用真实加密狗支持(基于 go.hid + hidapi,替代 Java 的 JNI/DLL);默认编译走软授权 - **PLC 通信**:Java 用 HslCommunication(商业库);Go 用开源 MC/ADS/OPCUA 库 - **持久化**:均用文件型 JSON(伪 Redis),Go 直接复用现有文件 - **未移植**:智能停车遗留(Constant.java)、加密货币回测(exchange/)等与 SECS 无关模块 - **Modbus**:按要求不实现(项目不使用) ## 测试 ```bash go test ./... ``` 覆盖 SECS-II 编解码(dt)与 HSMS 帧编解码(hsms)的往返测试。