单片机学习小组
登录
直播中
张飞雄
7年用户
985经验值
私信
关注
怎样去解决PLC和第三方采集器通信时出现的数据颠倒的情况呢
开启该帖子的消息推送
采集器
寄存器
PLC在和第三方采集器
通信
时,会出现接收的数据顺序和发送方数据存在高低位颠倒的情况,这是怎么回事呢?怎样去解决?
回帖
(1)
李涛
2022-2-22 09:39:01
plc位、字节、字、双字、有符号、无符号的关系
前言:很多同学在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。
无符号整数 十进制数值范围 0到65535
十六进制数值范围16#0000到16#FFFF
有符号整数 十进制数值范围 -32768到+32767
十六进制数值范围16#8000到16#7FFF
1、无符号整数和有符号整数之分?
一个16位数,分为WORD数据类型与INT数据类型。前者无符号,后者为有符号。
通常情况下WORD用于逻辑运算,INT用于数学运算;即WORD与INT在用法上没有什么区别(WORD可做数学运算,INT也可作逻辑运算)。
2、如vw100我怎么让它成为无符号整数寄存器?
不是什么寄存器,寄存器的概念在此不做解释。vw100如果做为WORD数据类型就是无符号。
3、WORD数据类型与INT数据类型数据范围:
WORD数据:0-65535;
INT数据类型:-32768-+32767.。
4、如果数值超过65535怎么办呢?
同上所述,原理一样,只不过数类型变成DWORD和DINT而已。
plc位、字节、字、双字、有符号、无符号的关系
前言:很多同学在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。
无符号整数 十进制数值范围 0到65535
十六进制数值范围16#0000到16#FFFF
有符号整数 十进制数值范围 -32768到+32767
十六进制数值范围16#8000到16#7FFF
1、无符号整数和有符号整数之分?
一个16位数,分为WORD数据类型与INT数据类型。前者无符号,后者为有符号。
通常情况下WORD用于逻辑运算,INT用于数学运算;即WORD与INT在用法上没有什么区别(WORD可做数学运算,INT也可作逻辑运算)。
2、如vw100我怎么让它成为无符号整数寄存器?
不是什么寄存器,寄存器的概念在此不做解释。vw100如果做为WORD数据类型就是无符号。
3、WORD数据类型与INT数据类型数据范围:
WORD数据:0-65535;
INT数据类型:-32768-+32767.。
4、如果数值超过65535怎么办呢?
同上所述,原理一样,只不过数类型变成DWORD和DINT而已。
举报
更多回帖
rotate(-90deg);
回复
相关问答
采集器
寄存器
怎样
去
调用一个
第三方
的驱动库
呢
2022-03-04
1240
怎样
去
引入
第三方
图标iconfont
呢
2021-12-20
1650
LabVIEW与
第三方
软件交互问题
2018-12-26
11904
如何打开
第三方
软件
2012-09-11
4829
请教LABVIEW怎么读取
第三方
测量仪器电脑软件测量结果
数据
2020-12-21
4627
请问
第三方
平台授权如何实现?
2020-11-10
14012
z
第三方
撒地方盛世嫡妃士大夫z
2016-06-08
2608
如何把
第三方
库加到PROTEUS中?
2013-06-15
2782
请问为什么我在选择FPGA终端Vi的执行模式的时候,
第三方
仿真
器
是灰色的
呢
?那怎么才能使用
第三方
仿真
器
啊?
2018-05-24
3666
关于LabVIEW调用
第三方
exe,如何
去
控制
第三方
exe按钮的问题
2020-08-12
12049
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分