1. 搭建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可查)。