找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5875|回复: 0
打印 上一主题 下一主题
收起左侧

【S7-300】PLC 数据类型探讨【转载】

[复制链接]
跳转到指定楼层
楼主
ID:26188 发表于 2015-5-27 23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


各位同学是否有以下疑惑:
1. INT数据类型与WORD 数据类型有何区别?DINT与TIME呢?
2. S5 TIME数据类型结构是什么样的?怎样自行修改或生成符合S5 TIME数据类型的值?
3. 仪表传送一组流量数值,是用字符串方式发送,接收到数值后,怎样还原为浮点数?
4. MOVE指令与数据类型转换指令怎样区分?都有什么样的应用场合?
5. 隐式转换和显示转换是什么含义,在TIA 博途中,设置IEC检查对数据类型转换会有什么影响。
另外,复杂数据类型的应用,如:STRUCT与UDT的应用与区别、*数组、ANY数据类型,各种数据类型的存储与寻址方式,相互转换也在本话题讨论范围之内,大家不要吝啬笔墨,踊跃发言,谈谈应用过程中的疑惑与认识,希望大家收获多多!


字符串转换为浮点数的方法
可以用程序编辑器的IEC库中的FC39 STRNG_R,将字符串转换为REAL数据类型格式变量。
用IEC库中的FC30  R_STRNG,可以将REAL格式的变量转换为字符串。
字符串由符号、小数点前的1位数字、小数点、小数点后的7位数字、E和2位指数数字字符组成。
下面是一个例程:
在DB1中定义字符串STR1[14],下面是OB1中的程序:
       CALL  "R_STRNG"   //调用FC30,将REAL格式变量转换为字符串
        IN     :=1.234567e+003
        RET_VAL:=DB1.STR1

       CALL  "STRNG_R"   //调用FC39,将将字符串转换为REAL格式变量
        S      :=DB1.STR1
        RET_VAL:=MD0

由监控可知FC30将1.234567e+003转换后,DB1.STR1中的字符串为’+0.1234567E+04’。用FC39将字符串DB1.STR1转换后,MD0中的浮点数为1.234567e+003。

一、在S7编程中字符类型[CHAR]使用比较少见,但在一些与条码扫描的通讯设备中却较为常见,例如工装线产品质检和计数或商场收银系统。
二、这类条码扫描设备通常先与PLC进行RS232C或RS485串口通讯后读入CHAR数据类型,然后经组合和转换后,在触摸屏Touch中显示。
三、其实CHAR数据类型处理很简单,具体使用事项和方法如下:
1、首先CHAR字符采用ASCII编码;
2、其次CHAR字符占用一个Byte;
3、因此将读取的CHAR字符存放至定义为CHAR类型的存储区变量中,例如MB2→CHAR即可;
4、如果要对定义的CHAR类型的变量赋值,需对输入的字符常量加一对单引号,例如:'$'、'F'、'【'、'?'。
5、使用效果见以下ASCII码表与程序对照图。



2. S5 TIME数据类型结构是什么样的?怎样自行修改或生成符合S5 TIME数据类型的值?
1) S5TIME为16位数据,BCD码格式。当使用S5TIME时,最大计时为S5T#2h46m30s(9990s).
   格式如:2#0011 1001 1001 1001,即S5T#2h46m30s
                          10s    9        9        9
   第14,13位表示时间基准,00为10ms,01为100ms,10为1s,11为10s.上例为11,即10s时基。
   后12位为BCD码表示的时间值,上例为999,则999*10s=2h46m30s.
2)知道S5TIME的格式后,就可以在程序中正确的使用了。常见的如在触摸屏中有个INT变量设定的时间,   在程序中要转换成S5TIME.(INT转S5TIME).
   因为S5TIME为BCD码格式,所以要先将INT转BCD(ITB).记得一定要转。可以看3楼的例子。我们也可以   自己编程做一下实验。ITB不写的话就会报错。
       L     999       //0000 0011 1110 0111
       ITB               //0000 1001 1001 1001
       L     W#16#3000   //0011 0000 0000 0000
       OW   
       T     MW   700    //0011 1001 1001 1001 (S5T#2h46m30s)
       A     M    100.0
       L     MW   700  
       SD    T      1
3)其他关于INT,TIME和S5TIME的转换见下帖。
http://www.ad.siemens.com.cn/clu ... d=4&a_id=898840

字符串数据类型[STRING]的使用也比较少见,常用于存储消息文本。
关于STRING类型变量使用事项如下:
1、STRING变量字符串以ASCII编码存储每个字符,最大长度256Byte,前两个Byte存储字符串长度信息,所以STRING变量最多包含254个字符。其中第一个Byte存储最大长度;第二个Byte存储实际字符长度。
2、STRING类型的变量可传递至相同类型(即相同的STRING长度)的块参数中,也可以传递至POINTER或ANY类型的FC/FB块参数中。
3、给STRING变量赋值常量需使用一对单引号,例如:'String'、'S7'、'failure_4'。
4、如果用ASCII编码的字符赋值,则该字符也必需使用一对单引号,而如果包含用于控制术语的特殊字符,则必需在字符前添加前缀符号$。例如:$$→美元字符;$P→换页字符;$L→换行字符;$R→回车字符;$T→空格字符。
5、STRING变量定义声明和初始化方法:变量名称:STRING[最大字符数]: '初始化文本',变量定义声明时可以无初始化文本。例如:FALT_SIG:STRING 'Motor failure_4'、Warning:STRING [50] ''。
如果变量定义声明时未指定最大字符数,那么STL/LAD/FBD程序编辑器则自动默认长度最大为254个字符。
6、可使用基本的STL指令访问STRING变量的各个字符。例如:L   FALT_SIG[5]    //装载变量FALT_SIG的第5个字符,即'r'。
7、还可以使用IEC库的FC功能块实现对STRING变量的访问和处理。


数据类型是什么?
数据类型是什么?数据类型是人为规定的数据的属性。在计算机和PLC中,数据实际上以二进制数的形式储存。按长度分为1位、8位、16位、32位的二进制数据。
除了数据的长度,数据类型包含了更多的内容,例如32位的数据类型有双字、32位整数、Time、浮点数、TIME_OF_DAY等。
数据的数据类型需要在符号表、块的局部变量表中定义,因此数据类型是人为指定的数据的属性。
指令和块的输入、输出参数的实参的数据类型必须与对应的形参要求的相同,否则程序将会出错。
  OB40的参数OB40_MDL_ADDR的数据类型为WORD,不能直接用于要求数据类型为INT的整数比较指令。怎样解决这一难题呢?在梯形图中,可以用MOVE指令把OB40_MDL_ADDR的值传送给没有定义数据类型的一个绝对地址,例如MW10,MW10就可以用于比较指令了。MW10并没有因此自动获得数据类型INT,只是CPU“认为”MW10中的数据类型是INT,CPU被我们蒙骗了!
我见过不良小贩把白色的小鸡染成五颜六色来骗小孩,放到水里一洗,小鸡的彩色就消失了。如果把小鸡看成数据,染的颜色就是数据类型。把定义了数据类型的数据装入绝对地址MW10或累加器(累加器也是一个特殊的绝对地址),数据类型的属性就被剥去了,只剩下赤裸裸的数据,就像小鸡的颜色被水洗掉了一样。这时就可以把数据当作规定了长度的各种数据类型来使用。   




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表