C#实现 SECS/GEM通讯协议 信息交互 个人记录

       SECS/GEM协议的基本概念可以有很多资料,大家可以自行了解一下。

在强调一个概念。

TCP/IP 设置

由于 HSMS 协议是从 TCP/IP 派生的,因此主机(客户端)和设备(服务器)都需要以下设置:

连接模式:主动/被动模式。 ACTIVE 模式通常在主机端,而 被动模式(监听)在设备端。但是,反之亦然使用它没有限制。

总结:

设备:服务器、被动模式、Passived
主机:客户端、主动模式、Actioned

接下来,看一下结果吧。

虚拟调试软件作为主机端,设置如下:

主机端设置基本就这些。

C#端作为客户端:

以上就已经属于连接成功了。

下面是调试软件作为 主机 主动给客户(软件) 发生信息,已经反馈的信息。反馈的信息是软件里编辑的自定义信息。下面多图警告。

接下来是主机端触发S1F13 和 S2F25 ,同S1F1一样。

我的学习路线是:

1.B站:Secs/gem hsms协议解析_哔哩哔哩_bilibili

2.SECS常用流函数总结 - #青鸟爱吃鱼 - 博客园 (cnblogs.com)

3.SECS的常用术语介绍与使用_svid变量-CSDN博客

4.最全半导体SECS/GEM资料,小白都能懂 - 知乎 (zhihu.com)

最后调试完之后,再回顾之前的文档才有种恍然大悟的感觉。

以上就是我的学习过程,希望大家也可以成功实现。

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SECS/GEM(SEMI Equipment Communications Standard/Generic Equipment Model)是一种用于半导体设备之间的通信协议,以下是使用C#实现的示例代码: ```csharp using System; using System.IO; using System.Net.Sockets; using System.Threading.Tasks; namespace SecsGemExample { public class SecsGem { private readonly TcpClient _tcpClient; private readonly NetworkStream _stream; private readonly BinaryReader _reader; private readonly BinaryWriter _writer; private readonly TaskCompletionSource<byte[]> _responseReceived; private readonly byte[] _header = new byte[10]; public SecsGem(string ipAddress, int port) { _tcpClient = new TcpClient(ipAddress, port); _stream = _tcpClient.GetStream(); _reader = new BinaryReader(_stream); _writer = new BinaryWriter(_stream); _responseReceived = new TaskCompletionSource<byte[]>(); } public async Task<byte[]> Send(byte[] message) { await _stream.WriteAsync(message, 0, message.Length); var responseTask = _responseReceived.Task; var timeoutTask = Task.Delay(5000); // 5 second timeout if (await Task.WhenAny(responseTask, timeoutTask) == timeoutTask) { throw new TimeoutException("SECS/GEM response timed out."); } return await responseTask; } public void StartListening() { var readTask = Task.Run(async () => { while (true) { await _stream.ReadAsync(_header, 0, _header.Length); int length = (_header[2] << 8) + _header[3]; byte[] data = new byte[length]; await _stream.ReadAsync(data, 0, length); _responseReceived.SetResult(data); } }); } public void Stop() { _tcpClient.Close(); } } } ``` 使用示例: ```csharp var secsGem = new SecsGem("127.0.0.1", 5000); secsGem.StartListening(); byte[] message = { 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04 }; byte[] response = await secsGem.Send(message); Console.WriteLine(BitConverter.ToString(response)); ``` 这段代码会连接到IP地址为127.0.0.1,端口为5000的SECS/GEM服务器,并发送一个12字节的消息,然后等待响应,最后打印响应的十六进制表示。需要根据具体的SECS/GEM协议进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值