营销网站费用/八零云自助建站免费建站平台

营销网站费用,八零云自助建站免费建站平台,护士做兼职的网站,中企动力大连公司咋样好的,我们正式进入: 第二讲:深入 SECS4NET 项目结构——主机程序是怎么搭起来的? 关键词:项目结构、类图、通信类、事件处理、连接生命周期、异步机制 本讲目的 我们从源码入手,一步步搞懂: S…

好的,我们正式进入:


第二讲:深入 SECS4NET 项目结构——主机程序是怎么搭起来的?

关键词:项目结构、类图、通信类、事件处理、连接生命周期、异步机制


本讲目的

我们从源码入手,一步步搞懂:

  1. SECS4NET 主机(Host)是如何设计通信逻辑的
  2. 有哪些关键类,类之间的关系是什么
  3. 通信的生命周期怎么管理
  4. 怎么实现“接收消息”和“主动发送”的功能
  5. 如何集成到你自己的 EAP 或测试程序中

你将不再只是“调 Sample”,而是可以掌控它的主干脉络,甚至模仿它写出你自己的通信程序。


一、SECS4NET 项目的基本结构

这个项目结构很清晰,大致可以分成三大块:

1. 核心库部分

主要是以下几个类和命名空间:

类名 / 接口功能描述
SecsGem主控类,负责建立连接、发送接收消息,是你最常用的接口
SecsMessage表示一条 SECS 报文
SecsItem表示报文内部的数据结构(Item Tree)
SecsGemBuilder构建 SecsGem 的工厂类,负责配置通信参数
HSMSConnectMode枚举,指明是主机模式还是设备模式

这些类都在 Sec4net 命名空间中,是整个通信流程的核心。


2. 样例程序(SampleHost)

这是个完整的 WPF Demo,它通过 UI 来驱动 Host 端的连接、发命令、注册事件等。

你可以从 SampleHost 入手,理解 SECS4NET 是如何实际运作的:

  • 按钮绑定命令(Command)
  • App.xaml.cs 中初始化 Host
  • 有个 GemService 类作为核心逻辑封装

3. 工具与日志

比如:

  • MessageLogViewModel.cs:将 SECS 报文日志格式化输出
  • App.xaml:注册依赖注入,绑定服务层
  • Config 配置项:定义设备地址、端口、模式等参数

二、核心类分析:SecsGem

这是你最常打交道的类,我们来详细拆解一下它的几个核心接口和机制。


1. 初始化过程

var gem = new SecsGemBuilder().UseHsms().ConnectMode(HSMSConnectMode.Active) // 主机模式.DeviceId(0).Host("127.0.0.1")  // 设备 IP.Port(5000)         // 设备端口.Build();

解释知识点:

  • .UseHsms() 表示使用 HSMS 协议(TCP 通信)
  • .ConnectMode() 设为 Active 就是主机,Passive 就是设备
  • .DeviceId() 是主机的设备编号
  • .Host().Port() 指的是连接目标设备的地址和端口
  • .Build() 返回一个 SecsGem 实例

2. 启动连接

await gem.ConnectAsync();

连接过程其实包括 TCP 建立、SECS 建链(S1F13/S1F14)、状态机启动等。

3. 监听接收到的报文

gem.MessageReceived += OnSecsMessageReceived;

你只要写一个回调函数:

private void OnSecsMessageReceived(object sender, SecsMessage e)
{if (e.Stream == 6 && e.Function == 11){var ceid = e.SecsItem[0].GetValue<ushort>();Console.WriteLine($"收到事件:CEID = {ceid}");}
}

报文进来后你可以按 SML 结构解析,把报文打印出来或入库。


4. 发送消息

发送很简单,你只需要构造一个 SecsMessage,比如:

var msg = new SecsMessage(2, 41, true,Item.L(Item.A("START_PROCESS"),Item.L(Item.A("Lot123"), Item.A("Recipe1")))
);
await gem.SendAsync(msg);

这里 2 是 Stream,41 是 Function,true 表示需要对方回应(W bit)。


5. 异步机制

整个 SECS4NET 框架基于 async/await 实现异步通信,这样你就不会阻塞主线程。

比如你在 WPF 程序中接收报文、发送命令,UI 不会卡顿。


6. 生命周期管理

在 SampleHost 项目中,一般是在 App.xaml.cs 启动时初始化 Gem 服务:

GemService.Instance.Init();

关闭时调用 DisconnectAsync(),并释放资源。


总结一句话:

SecsGem 就是你跟设备之间的“翻译官”,你通过它说话(Send),也通过它接收设备的回应(MessageReceived)。

你只需要:

  • 创建实例;
  • 连上设备;
  • 发出命令;
  • 处理回应。

这个封装非常适合你这种以业务逻辑为主的开发者。


我们先到这里告一段落。总结如下:


第二讲 · 小结

你已经掌握了:

  • SECS4NET 项目的整体结构;
  • 如何用 SecsGem 建立连接;
  • 如何发出报文;
  • 如何接收报文;
  • 如何用异步方式处理通信逻辑;
  • 如何把它嵌入你自己的程序框架中。

如果你觉得节奏 OK,就可以告诉我:“继续”,我们就进入《第三讲:如何从零构建一个 Host 主机端程序》
那一讲会更实战,我们会一步步搭一个“小型主机”,来收发真正的事件和指令。

你来决定节奏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

压测实战 | 微信小程序商城 “双 11” 的压测实践

背景 某全球知名珠宝品牌&#xff0c;始终以创新驱动零售变革。随着全渠道战略的深化&#xff0c;其小程序官方商城逐渐成为品牌私域流量的核心阵地&#xff0c;不仅承载了线上销售、会员运营等功能&#xff0c;同时还与其内部系统打通&#xff0c;如会员管理系统、人力资源系…

垃圾分类--环境配置

写在前面&#xff1a; 如果你们打这届比赛时&#xff0c;还有我们所保留的内存卡&#xff0c;那么插上即可运行&#xff08;因为内存卡里我们已经配置好所有的环境&#xff09; 本文提供两种环境的配置 一种是基于yolov8&#xff1a;YOLOv8 - Ultralytics YOLO Docshttps://d…

工具(十二):Java导出MySQL数据库表结构信息到excel

一、背景 遇到需求&#xff1a;将指定数据库表设计&#xff0c;统一导出到一个Excel中&#xff0c;存档查看。 如果一个一个弄&#xff0c;很复杂&#xff0c;耗时长。 二、写一个工具导出下 废话少絮&#xff0c;上码&#xff1a; 2.1 pom导入 <dependency><grou…

Postman 新手入门指南:从零开始掌握 API 测试

Postman 新手入门指南&#xff1a;从零开始掌握 API 测试 一、Postman 是什么&#xff1f; Postman 是一款功能强大的 API 开发与测试工具&#xff0c;支持 HTTP 请求调试、自动化测试、团队协作等功能。无论是开发人员还是测试工程师&#xff0c;都可以用它快速验证接口的正确…

【软件工程】03_软件需求分析

3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行性分析(Feasibility …

WD5202L超低成本 Buck 电源芯片的特性与应用电路解析, 将市电转换为 5V 电压

WD5202L&#xff1a;超低成本 Buck 电源芯片的特性与应用电路解析 在现代电子设备的小型化、低成本化趋势下&#xff0c;对电源管理芯片的性能、成本和尺寸提出了严苛要求。WD5202L 作为一款超低成本的 Buck 电源芯片&#xff0c;凭借其独特的特性&#xff0c;在众多应用场景中…

UART转AHB模块ModelSim仿真

一、简介 UART转AHB模块用于实现一种简单的通过上位机控制FPGA内部寄存器的方式。上位机通过串口助手发送读写寄存器的指令&#xff0c;UART转AHB模块接收指令后解析出地址&#xff0c;命令&#xff0c;数据信息&#xff0c;然后转成AHB总线格式输出。这时UART转AHB模块相当于A…

Qt5.15.2实现Qt for WebAssembly与示例

目录 1.什么是Qt for WebAssembly&#xff1f; 1.1 什么是 WebAssembly&#xff1f; 1.2 WebAssembly 的优势 1.3 什么是 Qt for WebAssembly&#xff1f; 1.4 Qt for WebAssembly 的特点 1.5 编译过程 1.6 运行时环境 注意&#xff01;&#xff01;&#xff01;注意&am…

AGI大模型(8):提示词的安全与防护

1 前言 著名的「奶奶漏洞」&#xff0c;⽤套路把 AI 绕懵。 2 常⻅的提示词攻击技术 2.1 同类型⽬标劫持 同类⽬标劫持攻击&#xff0c;特别是在同类型任务的背景下&#xff0c;涉及到攻击者通过⾮法⼿段控制模型&#xff0c;并迫使其执行与原始任务性质相同但⽬标不同的操作…

专题三搜索插入位置

1.题目 题目分析&#xff1a; 给一个目标值&#xff0c;然后要在排序的整数数组中&#xff0c;找到跟目标值一样的&#xff0c;如果没有就把这个值插入进去&#xff0c;然后返回插入后的下标。 2.算法原理 根据题目的时间复杂度可以知道要用二分&#xff0c;开始划分区域&…

Linux 进程的创建、终止、等待与程序替换函数 保姆级讲解

目录 一、 进程创建 fork函数 二、进程的终止&#xff1a; 1. 想明白&#xff1a;终止是在做什么&#xff1f; 2.进程终止的3种情况&#xff1f; a.退出码是什么&#xff1f;存在原因&#xff1f;为什么int main&#xff08;&#xff09;return 0? b.第三种进程终止的情况…

深入了解Linux —— git三板斧

版本控制器git 为了我们方便管理不同版本的文件&#xff0c;就有了版本控制器&#xff1b; 所谓的版本控制器&#xff0c;就是能够了解到一个文件的历史记录&#xff08;修改记录&#xff09;&#xff1b;简单来说就是记录每一次的改动和版本迭代的一个管理系统&#xff0c;同…

STM32---FreeRTOS事件标志组

一、简介 事件标志位&#xff1a;用一个位&#xff0c;来表示事件是否发生 事件标志组&#xff1a;一组事件标志位的集合&#xff0c;可以简单的理解时间标志组&#xff0c;就是一个整体。 事件标志租的特点&#xff1a; 它的每一个位表示一个时间&#xff08;高8位不算&…

在centOS Linux系统搭建自动化构建工具Jenkins

前言 在工作中发现公司使用Jenkins实现自动化部署项目方案&#xff0c;于是闲着自己也捣鼓一下&#xff0c;网上查阅相关部署资料&#xff0c;顺便记录操作步骤&#xff0c;所以有了下面这篇的文章。 部署完之后&#xff0c;安装前端项目所需环境&#xff0c;比如node环境&am…

Git下载安装(保姆教程)

目录 1、Git下载 2、Git安装&#xff08;windows版&#xff09; &#xff08;1&#xff09;启动安装程序 &#xff08;2&#xff09;阅读许可协议 &#xff08;3&#xff09;选择安装路径 &#xff08;4&#xff09;选择组件 &#xff08;5&#xff09;选择开始菜单文件夹…

深入理解嵌入式开发中的三个重要工具:零长度数组、container_of 和 typeof

在嵌入式开发中,内核开发者经常需要处理复杂的数据结构和动态内存分配。零长度数组、container_of 宏和 typeof 是内核开发中三个非常重要的工具,它们在结构体管理、内存操作和类型处理中发挥着关键作用。本文将详细探讨这三个工具的功能、应用场景及其在内核开发中的重要性。…

TSB - AD 解读 — 迈向可靠、透明的 TSAD 任务

目录 一 文章动机 二 TSAD 领域内的两类缺陷 三 数据集的构建 四 实验结果及结论 项目宣传链接&#xff1a;TSB-AD 代码链接&#xff1a; TheDatumOrg/TSB-AD: TSB-AD: Towards A Reliable Time-Series Anomaly Detection Benchmark 原作者解读&#xff1a;NeurIPS 2…

DNS主从服务器

1.1环境准备 作用系统IP主机名web 服务器redhat9.5192.168.33.8webDNS 主服务器redhat9.5192.168.33.18dns1DNS 从服务器redhat9.5192.168.33.28dns2客户端redhat9.5192.168.33.7client 1.2修改主机名和IP地址 web服务器 [rootweb-8 ~]# hostnamectl hostname web [rootweb-8…

第一个vue项目

项目目录 启动vue项目 npm run serve 1.vue.config.js文件 (CLI通过vue-cli-serve启动项目&#xff0c;解析配置配置文件vue-condig-js&#xff09; // vue.config.js //引入path板块&#xff0c;这是Node.js的一个内置模块&#xff0c;用于处理文件路径&#xff0c;这里引用…

QT中读取QSetting文件

1.ini文件的格式 头文件 #include <QSettings> #include <QStringList> #include <QtCore> #include <QDebug>2.读文件 //ini文件的读取 void iniTest::readIniFile(QString filePath) {//1.打开ini文件QSettings m_iniFile(filePath, QSettings::I…