通过modbus读取一个数值,该数值为符号整数,需要通过除32后再减273来求得真实值。但是S7-200的整数计算只能是有付号运算。如何能够实现无符号整数的运算呢?谢谢!
问题补充:
感谢zjw01316的帮忙!请教一下:把读这个数最高位复位为0转换成整数(I),再把最高位置位为1的作用是什么呢?你也说了,以不同的格式查看一个数据,或是使用不同格式的指令处理它,会得到不同的效果。我就是想找一个可以把整数(字节)做为无符号整数(DINT)计算的指令。S7-2OO有吗?
最佳答案
字节默认为正数,你把读这个数最高位复位为0转换成整数(I),再把最高位置位为1.除法如要要显示小数的话,再转换为实数,32也转换为实数32.0,不需要直接整数相除。
----------------------------------------------------------------------------------
S7-200的数据主要分为:
1、与实际输入/输出信号相关的输入/输出映象区:
I:数字量输入(DI)
Q:数字量输出(DO)
AI:模拟量输入
AQ:模拟量输出
2、内部数据存储区
V:变量存储区,可以按位、字节、字或双字来存取V 区数据
M:位存储区,可以按位、字节、字或双字来存取M区数据
T:定时器存储区,用于时间累计,分辨率分为1ms、10ms、100ms三种
C:计数器存储区,用于累计其输入端脉冲电平由低到高的次数。CPU提供了三种类 型的计数器:一种只能增计数;一种只能减计数;另外一种既可 以增计数,又可以减计数
1、所有的数据在PLC中都是以二进制形式表示的
2、数据都有其特定的长度和表示方式,称为格式
3、数据的格式与用于运算、处理它的指令相关
4、以不同的格式查看一个数据,或是使用不同格式的指令处理它,会得到不同的效果
表1. S7-200支持的数据格式
寻址格式 数据长度
(二进制位) 数据类型 取值范围
BOOL(位) 1(位) 布尔数
(二进制位) 真(1);假(0)
BYTE(字节) 8
(字节) 无符号整数 0 ~ 255;0 ~ FF(Hex)
INT(整数) 16
(字) 有符号整数 - 32768 ~ 32767;
8000 ~ 7FFF(Hex)
WORD(字) 无符号整数 0 ~ 65535;
0 ~ FFFF(Hex)
DINT
(双整数) 32
(双字) 有符号整数 - 2147483648 ~ 2147483647
8000 0000 ~ 7FFF FFFF(Hex)
DWORD
(双字) 无符号整数 0 ~ 4294967295;
0 ~ FFFF FFFF(Hex)
REAL
(实数) IEEE 32位
单精度浮点数 -3.402823E+38 ~ -1.175495E-38(负数);
+1.175495E-38 ~+3.402823E+38(正数); 0.0※
ASCII 8/个
(字节) 字符列表 ASCII字符、
汉字内码(每个汉字2字节)
STRING
(字符串) 字符串 1 ~ 254个ASCII字符、
汉字内码(每个汉字2字节)
※ 实数不能绝对准确地表示“零”
在西门子 S7-200 · LOGO! · SITOP 参考Beta Version 0.93中的S7-200PLC里有关于数据方面知识。
西门子 S7-200 · LOGO! · SITOP 参考Beta Version 0.93
下载地址http://www2.ad.siemens.com.cn/Download/Upload/AS/application/A0136.chm
回答者: zjw01316 - 初级技术员 第5级
------------------------------------------------------
回答补充:有一个很严重的问题先,你说把采集出来的数除以32,再减去273,那么这个数最少是8736,否则就是负数。而一个字节最大才是255.算出来肯定是负数了。。
如果你说错了,是想乘以32再减273,那么你直接把字节转换成双整数运算就可以,
参考资料:http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=36592_1028.html
提问者对于答案的评价:
谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc311778.html