技术论坛

来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑

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

经验值: 2465
发帖数: 132
精华帖: 16
主题:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 楼主 2011-09-02 11:48:55
作为热线工程师,每天面临客户大量的各种技术问题,从产品功能、组态设置、参数含义、编程细节到故障诊断,林林总总。不过,总有一些共性的问题,常常在热线中出现。下面就是一个出镜频率很高的例子。
客户1:“西门子热线工程师,你好,我用第三方组态软件(如Intouch、iFix、组态王等),想在画面上设置定时器T的时间,以便人工及时修改。但组态软件中没有S5Time数据类型,怎么办?”
客户2:“我想在PLC程序中,用整数INT给定时器T的预设时间赋值,怎么做?”
客户3:“我用的第三方组态软件(如Intouch、iFix、组态王等),想在画面上设置PID积分时间,但FB41的积分时间TI是Time类型,组态软件中没有Time类型,怎么办?”
客户4:“在PLC程序中,数据类型S5Time如何转换到整数INT类型?”
以上四个客户,遇到的问题实质上是一样的,就是整数INT、时间S5Time及Time之间的相互转换。
如何转换,首先要弄清整数INT、时间S5Time及Time的数据结构。整数INT是16位的数据:



时间S5Time是16位数据,BCD码格式:






时间Time是32位数据,类似于双整数DINT:



由此可见,三者之间的转换即是整数INT、双整数DINT及BCD码之间的转换。可以根据数据结构特点,自己编程实现相互转换,这样比较复杂。利用库函数FC33/FC40是最简单方便的。方法如下:
1. 整数INT到时间S5Time的转换方法:
INT -> I_DI指令 -> DINT -> MOVE指令 -> Time -> 库函数FC40 -> S5Time。









2. 整数INT到时间Time的转换方法:INT -> I_DI指令 -> DINT -> MOVE指令 -> Time。如图示:






3. 时间S5Time到整数INT的转换方法:
S5Time -> 库函数FC33 -> Time -> MOVE指令 -> DINT -> 取其高字部分,用MOVE指令 -> INT。









 
以下网友喜欢您的帖子:

  
重要声明:

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

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=898840&b_id=4&s_id=0&num=34

新手

经验值: 21
发帖数: 11
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 1楼 2011-09-02 17:49:02
注意数据类型
www.lunwendz.com
以下网友喜欢您的帖子:

  
侠士

经验值: 1828
发帖数: 236
精华帖: 2
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 2楼 2011-09-03 16:17:54
应该做一个块来转换。那样的话就省劲了。
起飞!
以下网友喜欢您的帖子:

  
游民

经验值: 92
发帖数: 20
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 3楼 2011-09-04 07:39:58
没看懂L#1000,为什么要乘?能解释下吗?
 
以下网友喜欢您的帖子:

  
至圣

经验值: 18406
发帖数: 6291
精华帖: 137
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 4楼 2011-09-04 19:38:14
quote:以下是引用无胆英雄在2011-09-04 07:39:58的发言:
没看懂L#1000,为什么要乘?能解释下吗?

因为是双整数运算指令,常数必须是L#表示的双整数。
追求完美
以下网友喜欢您的帖子:

  
至圣

经验值: 18406
发帖数: 6291
精华帖: 137
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 5楼 2011-09-04 19:47:28
楼主的帖子有很大的参考价值,但是下述说法有点小瑕疵:”时间S5Time是16位数据,BCD码格式”,“三者之间的转换即是整数INT、双整数DINT及BCD码之间的转换。“
S5Time格式并非严格意义的BCD码,其最高2位为0,下面两位为时间基准,低12位为3位BCD码。如果是普通的BCD码,用BCD与整数或双整数的转换指令就可以了。而IEC库函数指令FC 33、40考虑了S5Time的特点,因此能实现正确的转换。
追求完美
以下网友喜欢您的帖子:

  
侠圣

经验值: 4701
发帖数: 282
精华帖: 4
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 6楼 2011-09-05 08:20:20
quote:以下是引用无胆英雄在2011-09-04 07:39:58的发言:
没看懂L#1000,为什么要乘?能解释下吗?


时基是ms吧。所以ms转换为s
 
以下网友喜欢您的帖子:

  
游士

经验值: 175
发帖数: 75
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 7楼 2011-09-06 13:15:05
因为time是毫秒级别的所以要乘,呵呵

这个转换好像很简单的
 
以下网友喜欢您的帖子:

  
侠士

经验值: 1236
发帖数: 714
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 8楼 2011-09-06 14:29:33
quote:以下是引用Zaehler在2011-09-05 08:20:20的发言:
quote:以下是引用无胆英雄在2011-09-04 07:39:58的发言:
没看懂L#1000,为什么要乘?能解释下吗?


时基是ms吧。所以ms转换为s

2000才是s的时基吧
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8559
发帖数: 3432
精华帖: 56
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 9楼 2011-09-07 08:53:07
转换要自己写,再调用西门子的库就没啥意思了。
If anything can go wrong, it will.
以下网友喜欢您的帖子:

  
侠圣

经验值: 2327
发帖数: 1042
精华帖: 6
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 11楼 2011-09-07 19:21:41
前几天直接把S5Time输入设置成MW100,在监控的时候输入的整数与S5Time时间不对应,当时就怀疑是否有某个装换,对数据的类型结构还不是很了解,介绍的非常有价值,谢谢!
1 我有什么,我凭什么 2 我要什么 3 挣35岁以后的钱
以下网友喜欢您的帖子:

  
侠客

经验值: 816
发帖数: 127
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 12楼 2011-09-08 14:09:50
3月份的时候碰到这个问题,搞了几天才搞好
没个性
以下网友喜欢您的帖子:

  
侠士

经验值: 1130
发帖数: 201
精华帖: 2
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 14楼 2011-09-13 16:01:29
一直对此类问题不是太明白,现在有点明白了,继续学习。
在交流中学习,在学习中提高。
以下网友喜欢您的帖子:

  
新手

经验值: 25
发帖数: 4
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 18楼 2011-09-15 15:35:32
以前老是不明白,学习了!
 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2615
发帖数: 1160
精华帖: 1
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 20楼 2011-09-17 22:33:31
呵呵,这个问题我刚开始学习时也困扰了我很久,说实话用起来确实不太方便
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 6354
发帖数: 504
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 22楼 2011-09-20 17:40:32
正好解决当前遇到的这个问题啊,谢谢
 
以下网友喜欢您的帖子:

  
侠客

经验值: 887
发帖数: 413
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 23楼 2011-09-21 01:35:38
这个帖子的问题真是解决了很多人的疑问啊
 
以下网友喜欢您的帖子:

  
游民

经验值: 146
发帖数: 12
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 24楼 2011-09-28 16:22:17
问一下,DB块中的数据格式有S5Time,在上位机直接调用该DB数据块地址可以吗?
勇于创新,超越自我!
以下网友喜欢您的帖子:

  
游民

经验值: 146
发帖数: 12
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 25楼 2011-09-28 16:22:55
当然单独做一个转换块更方便调用
勇于创新,超越自我!
以下网友喜欢您的帖子:

  
侠客

经验值: 829
发帖数: 330
精华帖: 0
回复:来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑


只看楼主 26楼 2011-09-30 15:39:10
看到这个帖子是深有感触呀,前面也因为这个数据转换的事,折腾了好久,后来上网一搜找到了FC33可以实现。愿这个分享能让更多人,小走弯路。
天天向上
以下网友喜欢您的帖子:

  
收起
来自西门子技术支持热线的故事:整数INT_时间S5Time及Time相互转换的困惑
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。