1. 搭建SECS/GEM开发环境

搭建SECS/GEM开发环境 学习卡片

任务目标

本案例完成SECS/GEM开发环境的最小可复现搭建:安装开源的SECS/GEM通信库(采用Python的secsgem库,其底层支持SECS-I与HSMS),创建基础项目结构,并编写一个最小程序验证HSMS通信链路能够建立连接。

环境与依赖

  • 操作系统:Windows 10/11 或 Linux(本文以通用命令示例)
  • Python版本:3.9+
  • 安装依赖:pip install secsgem

项目结构

secs_gem_demo/
├── main.py          # 主程序:启动HSMS连接并验证链路
└── requirements.txt # 依赖清单

requirements.txt内容:

secsgem==0.4.0

关键完整代码

以下main.py实现一个完整的HSMS-SS(主动连接)通信链路验证:作为主动端连接被动端,建立TCP连接后发送并接收一条AreYouThere(S1F1)消息,若收到回复则证明链路可用。


import time
from secsgem.hsms import HsmsSettings, HsmsConnection
from secsgem.hsms.handler import HsmsHandler
from secsgem.secs import SecsMessage, StreamFunction

# 1. 配置HSMS连接参数(主动端)
settings = HsmsSettings(
    device_id=0,          # 设备ID,默认0
    ip_address="127.0.0.1",  # 被动端IP(本机测试)
    port=5000,            # 被动端监听端口
    connect_mode="active" # 主动连接模式
)

# 2. 创建连接对象
conn = HsmsConnection(settings)

# 3. 定义消息处理器:收到S1F2(AreYouThere回复)时打印
class MyHandler(HsmsHandler):
    def on_message(self, message: SecsMessage):
        if message.stream == 1 and message.function == 2:
            print(f"[链路验证成功] 收到S1F2回复: {message}")
        return True

handler = MyHandler(conn)

# 4. 建立连接
conn.connect()
print("正在连接HSMS被动端 127.0.0.1:5000 ...")
time.sleep(1)  # 等待连接建立

# 5. 发送S1F1(AreYouThere)查询
s1f1 = SecsMessage(stream=1, function=1)
conn.send_message(s1f1)
print("已发送S1F1 (AreYouThere) 查询")

# 6. 等待回复(最多5秒)
time.sleep(5)

# 7. 关闭连接
conn.disconnect()
print("连接已关闭")

运行与验证

第一步:启动被动端(模拟设备)
在另一个终端中运行以下Python脚本作为HSMS被动端(监听5000端口):


from secsgem.hsms import HsmsSettings, HsmsConnection
from secsgem.hsms.handler import HsmsHandler
from secsgem.secs import SecsMessage

settings = HsmsSettings(
    device_id=0,
    ip_address="127.0.0.1",
    port=5000,
    connect_mode="passive"  # 被动监听模式
)
conn = HsmsConnection(settings)

class PassiveHandler(HsmsHandler):
    def on_message(self, message: SecsMessage):
        if message.stream == 1 and message.function == 1:
            # 收到S1F1,回复S1F2
            reply = SecsMessage(stream=1, function=2)
            conn.send_message(reply)
            print("被动端:收到S1F1,已回复S1F2")
        return True

handler = PassiveHandler(conn)
conn.connect()
print("被动端已启动,监听端口5000 ...")
import time
time.sleep(30)  # 保持30秒
conn.disconnect()

第二步:运行主动端验证程序
在项目目录下执行:

python main.py

通过判定标准:

  • 主动端控制台输出正在连接HSMS被动端...后无连接异常;
  • 被动端控制台显示被动端:收到S1F1,已回复S1F2;
  • 主动端控制台显示[链路验证成功] 收到S1F2回复。

满足以上三点即表示HSMS通信链路已成功建立并完成消息收发验证。

常见问题

  • 连接失败(Connection refused):确认被动端已先启动并处于监听状态,且端口未被防火墙拦截。
  • 收不到回复:检查两端device_id是否一致;确认被动端脚本仍在运行(30秒超时后需重启)。
  • 库版本差异:若API报错,请确认安装版本为0.4.0(pip show secsgem可查)。