技术论坛

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

作者 主题
官方工程师
西门子官方工程师

经验值: 2434
发帖数: 132
精华帖: 16
主题:来自西门子技术支持热线的故事:怎样把DATE的数据类型转换成字符串?


只看楼主 楼主 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 实现)



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






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



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=919906

游士

经验值: 194
发帖数: 15
精华帖: 0
回复:来自西门子技术支持热线的故事集:怎样把DATE的数据类型转换成字符串?


只看楼主 1楼 2011-10-29 22:03:03
感谢楼主,学习了!
 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2117
发帖数: 662
精华帖: 1
回复:来自西门子技术支持热线的故事集:怎样把DATE的数据类型转换成字符串?


只看楼主 2楼 2011-10-31 09:06:27
DATE 属于16bit 的 IEC 格式的日期类型,这句话有问题,它是32bit的 IEC 格式的日期类型。
 
以下网友喜欢您的帖子:

  
游侠

经验值: 552
发帖数: 242
精华帖: 0
回复:来自西门子技术支持热线的故事集:怎样把DATE的数据类型转换成字符串?


只看楼主 3楼 2011-11-02 11:14:24
quote:以下是引用qjj1020在2011-10-31 09:06:27的发言:
DATE 属于16bit 的 IEC 格式的日期类型,这句话有问题,它是32bit的 IEC 格式的日期类型。

是16位,楼主是对的,不是32位;
一起从头来过
以下网友喜欢您的帖子:

  
游侠

经验值: 552
发帖数: 242
精华帖: 0
回复:来自西门子技术支持热线的故事集:怎样把DATE的数据类型转换成字符串?


只看楼主 4楼 2011-11-02 11:15:50
怎么说网页不存在了
一起从头来过
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
来自西门子技术支持热线的故事:怎样把DATE的数据类型转换成字符串?
×
扫描打开手机版
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。