当前位置: 首页 > news >正文

最近在折腾C#和欧姆龙PLC通信,发现网上完整的HostLink协议实现案例不多,自己啃手册写了套基础通信框架。直接上干货,先扔个读取DM区的代码

C#上位机与omron欧姆龙 Host Link通信串口通讯实例 源码 通过和PLC用串口连接,可以读取写入欧姆龙PLC的数据寄存器DM(批量也可以)、输入输出CIO、辅助继电器WR,H保持继电器等。 c#基于VS2015以上版本

// 串口配置 SerialPort sp = new SerialPort(); sp.PortName = "COM3"; sp.BaudRate = 9600; sp.DataBits = 7; sp.Parity = Parity.Even; sp.StopBits = StopBits.Two; // 构造读取DM100的FINS命令 string header = "@00"; // 站号 string command = "RD"; // 读取命令 string address = "DM0100"; // 要读取的地址 string length = "0001"; // 读取长度 string finsFrame = $"{header}{command}{address}{length}"; byte[] cmdBytes = Encoding.ASCII.GetBytes(finsFrame); // 计算FCS校验(异或校验) byte fcs = 0; foreach (byte b in cmdBytes) { fcs ^= b; } string fullCmd = $"*{finsFrame}{fcs:X2}\r"; sp.Open(); sp.Write(fullCmd); Thread.Sleep(200); // 等待响应 string response = sp.ReadExisting(); sp.Close();

这段代码的核心在于FINS指令的构建。注意欧姆龙的地址格式比较特别,DM区地址需要转换成四字符的ASCII码。比如DM100要写成"DM0100",这个零填充的写法新手容易栽跟头。

C#上位机与omron欧姆龙 Host Link通信串口通讯实例 源码 通过和PLC用串口连接,可以读取写入欧姆龙PLC的数据寄存器DM(批量也可以)、输入输出CIO、辅助继电器WR,H保持继电器等。 c#基于VS2015以上版本

解析响应数据的代码更有意思:

// 假设收到响应数据 "*00RD00ABCD5E\r" string rawData = response.TrimStart('*').Split('\r')[0]; string content = rawData.Substring(6, 4); // 提取数据部分"00AB" ushort value = Convert.ToUInt16(content, 16); // 转换为数值

这里有个坑点——响应的数据是按字(Word)返回的,但实际存储是低位在前。比如收到"ABCD"对应的是0xCDAB,需要用BitConverter处理字节序:

byte[] bytes = new byte[2]; bytes[0] = (byte)Convert.ToInt32(content.Substring(2,2), 16); bytes[1] = (byte)Convert.ToInt32(content.Substring(0,2), 16); ushort correctValue = BitConverter.ToUInt16(bytes, 0);

批量读取的代码结构类似,改下长度参数就行:

// 读取DM100开始的5个字 string length = "0005"; // 响应数据处理时需要循环读取每个字 List<ushort> results = new List<ushort>(); for(int i=0; i<5; i++){ string wordData = rawData.Substring(6 + i*4, 4); // ...转换逻辑同上 }

写入操作稍微复杂些,需要构造数据体。以写入CIO区为例:

string command = "WR"; string address = "CIO0100"; ushort writeValue = 1234; string data = BitConverter.GetBytes(writeValue).Reverse().Aggregate("", (s, b) => s + b.ToString("X2")); // 处理字节序 string finsFrame = $"{header}{command}{address}{data}"; // 后续校验和发送流程与读取类似

实际调试时建议先用串口调试助手验证协议格式,再用C#代码实现。遇到通信失败先检查:

  1. 串口参数是否与PLC设置一致(特别是停止位和校验方式)
  2. FCS校验计算是否正确
  3. 地址格式是否符合要求(比如DM区必须是6字符)

完整工程里建议封装成通信类,用Queue处理命令队列,异步方式避免界面卡死。不过这就是另一个话题了,有空再细聊。

http://www.jsqmd.com/news/361376/

相关文章:

  • 2026年西安咸阳等地热门锅炉厂家排名,靠谱品牌有哪些? - 工业设备
  • HoRain云--JavaScript单线程缺陷的六大解决方案
  • 4家靠谱真空压力计厂家盘点,国产高性价比与海外高端技术全覆盖(2026.2) - 品牌推荐大师1
  • 钢管定制生产哪家好,天津万泓泰实力凸显 - mypinpai
  • 203套房源全数去化,招商林屿缦岛诠释何为“现象级热盘”
  • 2026年评价高的超声波探伤/金属棒材超声波探伤设备畅销厂家采购指南如何选 - 行业平台推荐
  • 年底清杂物别扔!支付宝红包套装这样处理更划算 - 团团收购物卡回收
  • AMCA琥珀酰亚胺酯,113721-87-2:蓝色荧光标记试剂的技术解析
  • 2026便携式高光谱成像仪哪个品牌好?杭州高谱成像值得推荐! - 品牌推荐大师1
  • 2026年明正精密机械产品选购指南,看看哪家口碑好 - 工业品网
  • 2026安徽汽车租赁/长途包车/旅游客运/商务租车/租车公司测评报告 - 2026年企业推荐榜
  • 基于昇腾MindSpeed-LLM的大模型训练推理
  • HoRain云--2026最佳Markdown预览方案
  • PyTorch-VLM训练大语言模型:从环境搭建到实战部署
  • 收藏级|2026程序员转型AI大模型实战指南:拒绝内卷,4个月实现技能与薪资双跃迁
  • 2026最新公装赛道优选指南:办公室/茶楼/商业/餐饮装修 实力派公司推荐 - 深度智识库
  • 2026年口碑好的管带输送机/移动带式输送机高评价直销厂家采购指南推荐(高评价) - 行业平台推荐
  • 2026年比较好的反弹防摆动滑轨/阻尼防摆动滑轨实用公司采购参考怎么联系 - 行业平台推荐
  • Transformer架构深度解析
  • 完整教程:记录:vcpkg清单模式安装指定版本的curl和OpenSSL
  • HoRain云--Backbone.js轻量级框架解析
  • 2026年OEM蠕动泵选购指南:关键考量因素与品牌优选分析 - 品牌推荐大师
  • 【必收藏】小白/程序员入门大模型避坑指南!拆解AI招聘乱象,少走半年弯路
  • 2026年口碑好的电动反弹器/橱柜反弹器厂家推荐及采购参考 - 行业平台推荐
  • HoRain云--揭秘AQS:ReentrantLock高效锁机制
  • 1999-2024年 上市公司-微观企业劳动力生产率数据(数据+代码+文献)
  • JAVA核心技术实战
  • 井通 CUTLASS 01章:静看 cutlass 之 01 记 目录结构
  • 收藏备用|大模型知识蒸馏入门详解(小白/程序员必看,附经典文献+行业趋势)
  • 深度测评 10个降AIGC平台:专科生必看!降AI率全维度对比与推荐