技术论坛

 回复:热线故事:整数INT_时间S5Time及Time相互转换的困惑

返回主题列表
作者 主题
西门子Auto
侠圣

经验值: 2464
发帖数: 132
精华帖: 16
楼主    2011-09-02 11:48:55
主题:热线故事:整数INT_时间S5Time及Time相互转换的困惑

作为热线工程师,每天面临客户大量的各种技术问题,从产品功能、组态设置、参数含义、编程细节到故障诊断,林林总总。不过,总有一些共性的问题,常常在热线中出现。下面就是一个出镜频率很高的例子。


客户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。




像风儿一样
游士

经验值: 219
发帖数: 0
精华帖: 0
36楼    2014-08-18 12:25:41
主题:回复:热线故事:整数INT_时间S5Time及Time相互转换的困惑
s5time 转换为整数应该取其低字吧,不是楼主说的高字。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。