news 2026/7/30 5:43:25

C#与PLC的数据类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#与PLC的数据类型

C#与PLC的数据类型

  • 1. PLC与二进制
  • 2. PLC数据类型
    • 2.1 PLC与C#主要数据类型
    • 2.2 PLC与C#的其他数据类型
  • 3. PLC寻址

1. PLC与二进制

地球上的CPU和RAM在硬件层面仅计算和存储二进制0和1(量子计算硬件除外),PLC内部本质上也只存储、计算二进制0和1,上层应用系统会通过系统内默认的编码规则(比如ASCII或者UTF8)将信息编码后最终得到Bit二进制数据写入PLC逻辑控制器,以实现工业设备的自动化,同时从PLC寻址读取数据后解码Bit二进制数据以监视工业自动化设备的状态。

2. PLC数据类型

2.1 PLC与C#主要数据类型

PLC数据类型Byte长度Bit长度对齐要求数值范围地址说明C#数据类型数值范围
Bool1字节1位无严格对齐要求,但通常按字节或字边界访问以提高效率,比如:VB101.00 或 1Byte是内存的最小寻址单元,会强制分配1个Byte(8 Bits)的内存空间,但实际只用1个Bit位(最右边的低位)booltrue / false
Byte1字节8位无严格对齐要求,但通常按字节或字边界访问以提高效率,比如:VB102无符号整数:0 ~ 255;有符号整数:-128 ~ 127存储简单数据,如设备状态编码byte无符号整数:0 ~ 255(PLC程序的编码规则可以将Bit数据解析为负数,而C#是强类型语言不允许byte为负数)
Word2字节16位起始地址必须是偶数(能被2整除),比如:VW106无符号整数:0 ~ 65535存储中等规模数据,处理无符号整数运算ushort与PLC一致
DWord4字节32位起始地址必须是偶数(能被4整除),比如:VD110无符号整数:0 ~ 4294967295存储大规模数据,进行复杂计算uint与PLC一致
Int2字节16位起始地址必须是偶数(能被2整除),比如:VW114有符号整数:-32768 ~ 32767处理有符号整数运算short与PLC一致
DINT4字节32位起始地址必须是偶数(能被4整除),比如:VD118有符号整数:-2147483648 ~ 2147483647处理大范围有符号整数运算,精度与性能平衡int与PLC一致
Real4字节32位起始地址必须是偶数(能被4整除),比如:VD122浮点数,范围广泛,精度最高为6位有效数字表示带有小数部分的数值,进行高精度计算float与PLC一致

2.2 PLC与C#的其他数据类型

C#除了上述数据类型之外,还有其他的数据类型,比如:long、double、decimal、string等常见数据类型,那么这些数据类型如何在PLC里面读写呢?
通用的做法,就是在C#控制数据最大的长度(注意:string是可变的),在每次写入前,先将Encoding得到的Bit数据里面的高位补0,再把输入写入PLC地址即可。

publicbyte[]PrepareStringDataOptimized(stringtext,intmaxLength){byte[]buffer=newbyte[maxLength];byte[]textBytes=Encoding.ASCII.GetBytes(text);intcopyLength=Math.Min(textBytes.Length,maxLength);// 一次性复制数据Buffer.BlockCopy(textBytes,0,buffer,0,copyLength);// 高效清零剩余部分if(copyLength<maxLength){Array.Clear(buffer,copyLength,maxLength-copyLength);}returnbuffer;}

或者使用以下方法

publicclassPLCStringManager{// 方法1:使用结束符publicstaticbyte[]ToCString(stringtext,inttotalLength){byte[]buffer=newbyte[totalLength];byte[]data=Encoding.ASCII.GetBytes(text);// 复制数据intcopyLength=Math.Min(data.Length,totalLength-1);Array.Copy(data,buffer,copyLength);// 添加结束符buffer[copyLength]=0;returnbuffer;}// 方法2:长度寄存器+数据publicvoidWriteStringWithLength(stringtext,intdataAddress,intlengthAddress){byte[]data=Encoding.ASCII.GetBytes(text);// 1. 先写长度(单独的WORD/DINT)plc.Write(lengthAddress,data.Length);// 2. 再写数据byte[]buffer=newbyte[data.Length];Array.Copy(data,buffer,data.Length);plc.WriteBytes(dataAddress,buffer);}// 方法3:定长数组+空格填充publicstaticbyte[]ToFixedLengthString(stringtext,intlength){byte[]buffer=newbyte[length];byte[]data=Encoding.ASCII.GetBytes(text.PadRight(length,' '));Array.Copy(data,buffer,Math.Min(data.Length,length));returnbuffer;}}

3. PLC寻址

PLC地址只是告诉CPU:“去内存的哪个位置拿多少位Bit数据”,至于这些位应该被解释成什么(整数、浮点数、字符),CPU完全不知道也不关心。
比如,声明一个变量V100(V100 ~ V104没有被占用),先写入一个REAL值,再复位V100 ~ V104为0,然后写入Word值再读取Word值,最后也能正确读取之前写入的Word值。所以,PLC寻址跟数据类型没有半毛钱关系。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 2:45:05

Kotaemon多向量检索支持:混合嵌入空间搜索

Kotaemon多向量检索支持&#xff1a;混合嵌入空间搜索 在构建现代智能问答系统时&#xff0c;一个常见的尴尬场景是&#xff1a;用户问了一个看似简单的问题——“CRM什么时候上线&#xff1f;”——系统却返回了一堆关于客户满意度调查的文档。问题不在于模型理解能力差&#…

作者头像 李华
网站建设 2026/7/30 2:18:50

5分钟搭建Ubuntu命令速查网页应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个Ubuntu命令速查PWA应用&#xff0c;要求&#xff1a;1) 按功能分类&#xff08;系统/网络/文件等&#xff09;2) 支持关键词搜索和标签过滤 3) 用户可收藏常用命令 4) …

作者头像 李华
网站建设 2026/7/30 4:53:20

1小时搞定:用快马平台验证Git合并方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Git合并方案快速验证工具。功能&#xff1a;1. 输入两个版本的代码片段 2. 自动生成合并预览 3. 支持多种合并策略选择&#xff08;ours/theirs等&#xff09; 4. 实时显示…

作者头像 李华
网站建设 2026/7/26 1:51:19

Go Mod vs 传统依赖管理:效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比测试项目&#xff0c;分别用GOPATH和go mod方式管理相同的依赖集。要求&#xff1a;1) 统计初始化时间 2) 记录构建时间 3) 分析依赖解析效率。使用AI自动生成测试脚本…

作者头像 李华
网站建设 2026/7/28 18:17:46

YUM707新手入门指南:从零开始学AI编程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用YUM707生成一个简单的Python程序&#xff0c;实现‘Hello World’功能&#xff0c;并扩展为交互式问候程序&#xff0c;能够根据用户输入的名字输出个性化问候语。请提供详细的…

作者头像 李华
网站建设 2026/7/30 3:14:04

HslControls:工业级UI控件库的终极指南

HslControls&#xff1a;工业级UI控件库的终极指南 【免费下载链接】HslControlsDemo HslControls控件库的使用demo&#xff0c;HslControls是一个工业物联网的控件库&#xff0c;基于C#开发&#xff0c;配套HslCommunication组件可以实现工业上位机软件的快速开发&#xff0c;…

作者头像 李华