设为首页收藏本站积分获取及使用技巧附件上传须知[求助-西门子PLC300/400]SCL中,如何对DATE_AND_TIME类型赋值

追梦工控论坛|工控论坛-专业的Intouch论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

总共8197条微博

动态微博

查看: 14299|回复: 2

[求助-西门子PLC300/400]SCL中,如何对DATE_AND_TIME类型赋值

[复制链接]

升级  36%

该用户从未签到

发表于 2013-12-11 20:58:13 | 显示全部楼层 |阅读模式

上传分享工控资料得追梦点,下载积分获取办法点击进入 ☆追梦点充值入口
发帖回帖赚金币兑换下载积分。上传附件须知点击进入

×

马上注册,结交更多工控达人,分享经验,让你轻松玩转追梦工控论坛。

已有帐号?  点击登录   或者        

支付宝扫一扫领红包
SCL中,如何对DATE AND TIME类型数据进行赋值。
DATE AND TIME 8个字节 0-7,意思我都知道。
现在是SCL中如何赋值?
LAD中我可以用实现,定义一个TEMP变量,类型是DATE AND TINME,地址12.0
我就可以利用 :
年(INT型上位机设)-进行I_BCD再MOVE给 LB12
月(INT型上位机设)-进行I_BCD再MOVE给 LB13
日(INT型上位机设)-进行I_BCD再MOVE给 LB12
然后我利用FC6 DT_TIME可以得出 设定日期距离1990-1-1的天数。
现在问题,我在SCL中如何赋值,设置时间?
我利用AT指令为何没效果?
VAR
sp_time:DATE AND TIME;
TIME AT sp_time:ARRAY[0..7] OF BYTE
END_VAR</P>TIME[0]:= INT_TO_BYTE(sp_year);//sp_year,sp_month,sp_day为上位机设
TIME[1]:= INT_TO_BYTE(sp_month);//的年月日,以INT类型输入进来
TIME[2]:= INT_TO_BYTE(sp_day);
current_time_cal:=DT_DATE(IN :=current_time
); // IN: DATE_AND_TIME
// DATE
sp_time_cal:=DT_DATE(IN :=sp_time // IN: DATE_AND_TIME
); // DATE
days_left:=DINT_TO_INT(DATE_TO_DINT(sp_time_cal))-DINT_TO_INT(DATE_TO_DINT(current_time_cal));//设置日期距离当前日期还剩多少天
求指点,哪里有问题?算出来的值永远不对,
监控发现 sp_time_cal 和sp_time_cal一直 相等。。。同一天老是,郁闷,。
让我们联手拒绝网络伸手党,下载积分获取办法&附件上传须知 ☆追梦点充值入口





+1
14301°C
2
  • gmRFGTgf
  • ohvfqcr
过: 他们

升级  39.5%

该用户从未签到

发表于 2013-12-11 21:32:46 | 显示全部楼层
SCL中也有整数转为BCD码的指令,见附件。因为你用指令INT_TO_BYTE不对,DT存储的格式是BCD码。
                              
图片说明:1,1  

                                                                                                                                                                                                                                
                                                        

升级  34.5%

该用户从未签到

发表于 2013-12-11 22:01:34 | 显示全部楼层
DATE_AND_TIME类型的数据不能直接赋值(编译不会报错),可以按照数据结构分解赋值:
  DATE_AND_TIME是按照下面的结构:
  1BYTE YEAR
  1BYTE MONTH
  1BYTE DAY
  1BYTE HOUR
  1BYTE MINUTE
  1BYTE SECOND
  1BYTE MSD(MOST SIGNIFICANT DECADE) OF MS
  1BYTE MSD(LEAST SIGNIFICANT DECADE) OF MS
  1BYTE WEEKDAY
  
  OB块的temp变量,Help里面说:“To execute, each OB always requires 20 bytes of local data for the operating system. You must declare an array for this with an identifier.”
  实际上为了编程方便,可以手动定义变量而不用系统模板定义的20byte的array(数组)。因为有些变量不是byte类型的。手动定义变量必须主意必须把所有变量定义完成,否则会因为变量定义的不够造成temp数据区不够大,就不能返回任何结果!!!
参考:《西门子SCL心得 》
http://blog.tianya.cn/blogger/post_show.asp?BlogID=316131&PostID=4490613
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

请珍惜自己的ID,严禁发布垃圾水贴,诸如adsf......顶......纯表情......多次重复回帖刷积分......轻则删帖警告,重则封禁!★请分享资料、经验或者赞助论坛,贡献一份力量★

关闭

最新活动上一条 /1 下一条

小黑屋|手机版|追梦工控论坛|工控论坛-专业的Intouch论坛 ( 皖ICP备10012005号 )|网站地图

GMT+8, 2025-5-4 16:34 , Processed in 0.172057 second(s), 21 queries , Gzip On, APCu On.

Powered by Dreamyiyi

© 2009-2025 工控论坛

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