plc位、字节、字、双字、有符号、无符号数据类型的关系

plc位、字节、字、双字、有符号、无符号的关系

以下内容由深圳市综科智控科技开发有限公司编辑整理 2021/08/18

前言:很多同学在PLC开发过程中,因为数据类型选择错误而出现得到的数据和期望的数据不一致的情况,例如:我们在读取模拟量采集读数的时候,可能会发现数据小于32767时都是对的,但是一旦大于这个值就变成了负数;还有些时候,PLC在和第三方采集器通信时,会出现接收的数据顺序和发送方数据存在高低位颠倒的情况,这是怎么回事呢,让我们来一起来解开这里的谜团。

 

位:最小的存储单位,非0则1,表达两个状态。


字节:每8个位组成一个字节。这样一个字节可以表达2的8次方(256)个状态,大于256个状态怎么表示?那就字。


字:2个字节组成一个字,有16个位。这样一个字可以表达2的16次方(65536)个状态,大于65536个状态怎么表示? 那就用 双字。

双字:2个字组成一个双字,有32个位。这样一个双字可以表达2的32次方(429496729状态)。


双整(32位又称双字)=2个整数(2*16位)
整数(16位又称字)=2个字节(2*8位)
字节(8位)=8个位


举个例子说明,以西门子为例:

VD0(双整)=VW0,VW1(整数)=VB0,VB1,VB2,VB3(字)=V0.0~V3.7(位)一共32个位 所以称32位双整!

西门子表达比较特殊,理解如下

例如:VB100   B表示1个字节=8个位       
8个位为VB100.0--VB100.7, 一个字节是VB100。

VW100   W表示2个字节=16个位 =字     16个位为VB100.0--VB100.7,VB100.8--VB100.15,

二个字节(字)是VB100,VB101.

 VD100    D表示4个字节=32个位=双字     32个位为VB100.0--VB100.7,VB100.8--VB100.15,

VB100.16--  VB100.23, VB100.24--VB100.32,

 4个字节(双字)是  VB100,B101,VB102,VB103

 一个32位组成的双字,其0-31位共32位用VD10表示的话,那么要表达0-15位组成的字,就是VW12;要表达16-31位组成的字,就是VW10;要表达0-7位组成的字节,就是VB13;要表达8-15位组成的字节,就是VB12;要表达16-23位组成的字节,就是VB11;要表达24-31位组成的字节,就是VB10。

无符号整数  十进制数值范围 065535

                    十六进制数值范围16000016FFFF

有符号整数 十进制数值范围  -32768+32767

                   十六进制数值范围168000167FFF


1、无符号整数和有符号整数之分?
一个16位数,分为WORD数据类型与INT数据类型。前者无符号,后者为有符号。
通常情况下WORD用于逻辑运算,INT用于数学运算;即WORDINT在用法上没有什么区别(WORD可做数学运算,INT也可作逻辑运算)。


2、如vw100我怎么让它成为无符号整数寄存器?
不是什么寄存器,寄存器的概念在此不做解释。vw100如果做为WORD数据类型就是无符号。


3WORD数据类型与INT数据类型数据范围:
WORD数据:0-65535
INT数据类型:-32768-+32767.

4、如果数值超过65535怎么办呢?

同上所述,原理一样,只不过数类型变成DWORD和DINT而已。

 

 

 

 

 

### PLC编程中的基本数据类型 #### (Bit) 是最小的数据单,在PLC编程中通常用于表示二进制状态,即开或关、高电平或低电平。主要用于控制逻辑操作,如开关量输入输出的处理。 外部输入及输出端子编号采用八进制编码方式,例如:外部输入为`X0~X7`, `X10~X17`;外部输出为`Y0~Y7`, `Y10~Y17`[^2]。 #### 字节 (Byte) 字节由8个连续的组成,可以存储数值范围从0到255(无符号)。在PLC编程中,字节常用来保存一组相关的布尔变量或是小型整数。对于某些特定功能模块的操作也经常涉及到字节级别的访问。 #### (Word) 是由两个相连的字节构成,总共包含16个,能够表达更大的数值区间(-32768至+32767 或者 0 至 65535),适用于更复杂的算术运算以及寄存器之间的通信传输等场景。在实际项目里,如果需要处理模拟量信号,则会频繁运用到这种长度的数据结构来提高精度[^1]。 #### 双字 (Dword) 双字则进一步扩展到了四个字节共32的形式,支持更大规模的数据交换需求,比如浮点数计算或者是多轴运动控制系统里的位置参数设定等方面都会用到它。由于其较大的容量特性,在工业自动化领域内扮演着不可或缺的角色。 ```cpp // 示例代码展示如何定义不同类型的变量并赋值 bool bitValue = true; // 定义一个类型的变量 uint8_t byteValue = 0xFF; // 使用 C++ 中 uint8_t 类型代表一字节大小的无符号整形 int16_t wordValue = -12345; // int16_t 表示两字节带符号短整型 float dwordValue = 123.45f; // float 型占用四字节空间适合储存实数 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值