Secs/Gem第二講 (基于secs4net項目的ChatGpt介紹)

好的,我們正式進入:


第二講:深入 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.pswp.cn/news/898202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898202.shtml
英文地址,請注明出處:http://en.pswp.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;都可以用它快速驗證接口的正確…

運維工具推薦 -- 寶塔面板:一鍵部署服務器

標題&#xff1a;寶塔面板&#xff1a;一鍵部署服務器&#xff0c;輕松管理你的云端世界 引言 在數字化時代&#xff0c;服務器管理對于個人開發者、中小企業或站長來說既是機遇也是挑戰。手動配置服務器環境耗時費力&#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;并迫使其執行與原始任務性質相同但?標不同的操作…

使用redis客戶端中對于json數據格式的存儲和讀取

代碼背景&#xff1a; 現在有一個json格式的數據&#xff0c;但是由于redis客戶端上面沒辦法直接創建/導入json的數據格式。 故考慮現在redis客戶端上先存儲一個名為"old_order"的string類型的的源數據。 思路&#xff1a; 由于直接使用redisTemplate獲取自動導入…

專題三搜索插入位置

1.題目 題目分析&#xff1a; 給一個目標值&#xff0c;然后要在排序的整數數組中&#xff0c;找到跟目標值一樣的&#xff0c;如果沒有就把這個值插入進去&#xff0c;然后返回插入后的下標。 2.算法原理 根據題目的時間復雜度可以知道要用二分&#xff0c;開始劃分區域&…

Redis監控:從睜眼瞎到千里眼的進化史

各位在Redis迷霧中摸黑的探險家們&#xff01;今天我們要給Redis裝上"天眼系統"——從連自己內存爆了都不知道的睜眼瞎&#xff0c;進化到連每秒哪個鍵被摸了幾次都門兒清的監控狂魔&#xff01;準備好迎接《Redisの楚門世界》了嗎&#xff1f;&#x1f441;? 第一幕…

雙緩沖機制(含原理、優勢、實現方式、應用場景)

雙緩沖機制 一、雙緩沖機制的原理二、雙緩沖的典型應用場景三、雙緩沖的優勢四、雙緩沖的實現方式1. 硬件級雙緩沖2. 軟件級雙緩沖3. 性能提升對比 五、雙緩沖的挑戰與解決方案六、總結 雙緩沖機制是一種通過使用兩個緩沖區&#xff08;Buffer A 和 Buffer B&#xff09;來優化…

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 是內核開發中三個非常重要的工具,它們在結構體管理、內存操作和類型處理中發揮著關鍵作用。本文將詳細探討這三個工具的功能、應用場景及其在內核開發中的重要性。…