来自西门子技术支持热线的故事:怎样把DATE的数据类型转换成字符串?

已锁定

西门子Auto

官方工程师

  • 帖子

    132
  • 精华

    16
  • 被关注

    227

论坛等级:侠圣

注册时间:2007-08-03

普通 普通 如何晋级?

来自西门子技术支持热线的故事:怎样把DATE的数据类型转换成字符串?

10537

4

2011-10-25 15:51:58

关于SIEMENS S7-300/400 系列 PLC 中关于时间和日期数据格式的问题一直都是热线上经常被大家提及的话题。
最近一个客户遇到的问题又一次涉及到 DATE,Time of Day ,和 DTAE_AND_TIME 数据格式的区别,以及BCD_I、I_STRING等指令的应用问题。
数据类型分成基本数据类型和复杂数据类型,关于时间和日期的数据格式既有基本的类型也有复杂数据类型。
1. 其中 DATE 和 Time of Day 属于基本数据类型
1.1 DATE 属于16bit 的 IEC 格式的日期类型,分辨率为1天;
格式是 D#1990-01-01~D#2168-12-31或是DATE #1990-1-1~DATE#2168-12-31;
可以与 INT 类型的数据相互转换,D#1990-1-1对应1,INT数据每增加1,DATE 日期值增加1天。
1.2 Time of Day 是32位24小时时间格式,分辨率为1ms
格式是 TOD#00:00:00.000~TOD#23:59:59.999;
可以与 DINT 类型的数据相互转换,TOD#00:00:00.000 对应1,DINT 每增加1,Time of Day 时间值增加 1ms。
2. DATE_AND_TIME 是符合数据类型
DATE_AND_TIME 包括8个字节,每个字节的说明见下图说明;
格式是 DT#1990-1-1-0:0:0.0 to DT#2089-12-31-23:59:59.999;



介绍了上面三种数据类型,下面开始说明客户遇到的问题:把DATE数据类型转换成 STRING 类型。然而,在STEP 7中没有直接的转换指令,就需要借助多个转换指令间接完成这个功能。
利用逆向思维分析方法,在 STEP 7 中找到能转换成STRING指令,可以找到 FC5,FC16 和 FC30,如下图所示:



能转换成 DI 和 I 的指令有 BCD_I 和 BCD_DI 这两个指令,如下图所示:



到此为止,焦点是 BCD 格式。接着思考:有关日期和时间的指令哪个是BCD码格式的呢?答案就是:DATE_AND_TIME。
那么接下来的任务就是把TIME转换成 DATE_AND_TIME 了。在 STEP 7 中就有这样的 FC 功能可以实现这样的转换,如下图所示的 FC3:



该指令的功能是把 DATE 格式数据和 Time of Day 数据组合起来变成 DATE_AND_TIME 格式。
经过不断的努力,终于找到了解决问题的方法。心情还真是不错呀!
接下来就具体说明这样进行这样的转换。
首先在 OB1 中调用标准指令库 FC3 功能,由于只需要把年、月、日这三个变量转换成 BCD 码,这样 IN2 的输入值只需要是 TOD#00:00:00.000 就可以了。



根据 DATE_AND_TIME 的格式把前3个字节提取出来分别转换成 INT,在这个过程之前还需要注意 BCD_I 这个指令的 IN 是 16bit 的 BCD,这样还需要把 byte 放到 word 中以便能正常进行转换。(BCD_I 也可以转换成 BCD_DI 格式,之后用 FC5 实现)



以同样的方法转换月和日这两个量。






最后监控程序,成功的完成了这个转换工作。


来自西门子技术支持热线的故事:怎样把DATE的数据类型转换成字符串? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54028条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。