您现在所在的是:

三菱Mitsubishi

回帖:7个,阅读:2941 [上一页] [1] [下一页]
* 帖子主题:

FBD定时器使用问题

2869
miss_cloudy
文章数:260
年度积分:50
历史总积分:2869
注册时间:2004/12/6
发站内信
发表于:2017/9/2 23:37:18
#0楼
请教一下各位:
 在三菱FX3U结构化编程中,我需要使用定时器,但出现如下问题:

1、使用TON指令时,定时时间按T#20S的格式时单位是秒,但如果我使用单位是100ms,10ms时格式应该是怎样写的?
  另外,如果我要把定时时间在触摸屏上进行设置请问应该选什么数据类型呢?我试过用mov指令将T#20S赋值给
  D0,但好像数据格式不兼容。

2、使用out_t指令时,我已把ss标签设置为time格式为何会报数据类型错?当我把ss改为TC0时便不会报错,难道是
  这条指令不兼容time格式的标签?应该设置什么样的标签才正确?

附件 TIM图片20170902234030.jpg



37243
cvlsam 版主
文章数:12401
年度积分:1595
历史总积分:37243
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2017/9/3 10:29:34
#1楼
以下是引用miss_cloudy2017/9/2 23:37:18的发言:
请教一下各位:
 在三菱FX3U结构化编程中,我需要使用定时器,但出现如下问题:

1、使用TON指令时,定时时间按T#20S的格式时单位是秒,但如果我使用单位是100ms,10ms时格式应该是怎样写的?
  另外,如果我要把定时时间在触摸屏上进行设置请问应该选什么数据类型呢?我试过用mov指令将T#20S赋值给
  D0,但好像数据格式不兼容。

2、使用out_t指令时,我已把ss标签设置为time格式为何会报数据类型错?当我把ss改为TC0时便不会报错,难道是
  这条指令不兼容time格式的标签?应该设置什么样的标签才正确?

附件 TIM图片20170902234030.jpg




1、小于秒的请这样输入:T#200MS,你可以对Time数据类型这样输入:T#1H20M20S100MS,这样你可以获得1小时20分20秒100毫秒的定时值。Time类型实质上就是一个无符号的32位数据值,一些厂商会将其定义成UDINT类型,如果你的触摸屏支持Time类型,你可以直接使用,例如欧美系的触摸屏会支持,如果你的触摸屏不支持Time类型,那么你可以使用一个32位长度的无符号整形来表示,例如日系厂商,你不能直接将TIME类型输入到D0,但是你可以这样:
DMOV K20000 D0,这样D0,D1组成的32位寄存器中将保留20S的数据值。

2、因为Tcoil结点并不是Time数据类型,其表示为TIMER,也就是定时器编号,在三菱中,为了兼容早期的编程方式,因此保留了OUT_T指令,所以你必须使用TCx的方式来输入。

我给你编程中的建议是:
1、既然使用了结构化编程方式,请使用标签名来定义所有的变量,不要使用地址,标签混合方式,这样做的好处在于:
A、全标签的方式下,内部变量的地址赋予是由编译器来完成的,即使别人上载,不含有源代码信息的话,地址是随机的,这样提高了程序的安全保障。
B、全标签编程使得软硬件进行的隔离,你无需去考虑硬件上的地址分配,可以更专注于你的逻辑方面的程序设计。
2、在使用某些指令时,请不要混合使用指令,这样不利于程序的移植,例如,既然用了IEC定时器,为何还要去考虑使用OUT_T这种为了兼容早期编程的指令呢?

Good Luck~
2869
miss_cloudy
文章数:260
年度积分:50
历史总积分:2869
注册时间:2004/12/6
发站内信
发表于:2017/9/3 11:30:26
#2楼
回复 #1楼 cvlsam
感谢cvlsam兄一大早码这么多字。

还有一事不明白想再请教下,我按domve k20000 d0, 然后把D0作为TON指令的PT输入端为何会出错?
我的设备可能会随着工况定时时间会变化,所以如果我想赋值的话应该怎么做?
附件 TIM图片20170902234030.jpg
37243
cvlsam 版主
文章数:12401
年度积分:1595
历史总积分:37243
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2017/9/3 13:37:53
#3楼
以下是引用miss_cloudy2017/9/3 11:30:26的发言:
感谢cvlsam兄一大早码这么多字。

还有一事不明白想再请教下,我按domve k20000 d0, 然后把D0作为TON指令的PT输入端为何会出错?
我的设备可能会随着工况定时时间会变化,所以如果我想赋值的话应该怎么做?
附件 TIM图片20170902234030.jpg

因为编译器无法确切的知道D0的数据类型,16位数据还是32位数据?同样32位数据,TIME,UDINT,DINT等都是32位的。

因此,你需要进行标签化编程,确定变量为TIME类型,如果要触摸屏链接,那么请将其定义为全局变量,并赋予地址。

Good Luck~
2869
miss_cloudy
文章数:260
年度积分:50
历史总积分:2869
注册时间:2004/12/6
发站内信
发表于:2017/9/3 14:13:34
#4楼
回复 #3楼 cvlsam
cvlsam兄,Time数据类型试过了,如果设置为time数据则会出现如下报错。
附件 TIM图片20170902234030.jpg



附件 TIM图片20170902234030.jpg

其它能选的数据类型我都试过了,还是会报错,请指点一下。谢谢
37243
cvlsam 版主
文章数:12401
年度积分:1595
历史总积分:37243
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2017/9/3 15:06:16
#5楼
前面的回帖我已经告诉你原因:因为编译器无法确切的知道D0的数据类型,16位数据还是32位数据?同样32位数据,TIME,UDINT,DINT等都是32位的。

我无法理解你一个非常简单的事情为何会变成一个非常大的麻烦,在前面的回帖中我也已经告诉你解决方案了。
例如以富士触摸屏为例:
在PLC中,我编写了如下的程序段,并在全局变量表内定义的变量:
附件 snap1.jpg

附件 snap3.jpg

在触摸屏中,你只需要确认使用双字地址,就可以了。




附件 snap2.jpg

此时只要注意的时,因为TIME的变量是以毫秒为单位的,因此如果你希望在屏上设定的为秒的单位的时候,你需要设定小数位数或者进行线性转换。




附件 snap4.jpg

而如果你一定喜欢脱裤子放屁,先使用DMOV指令写入TIME变量的话,那么请使用如下方法:





附件 snap5.jpg

Good Luck~
2869
miss_cloudy
文章数:260
年度积分:50
历史总积分:2869
注册时间:2004/12/6
发站内信
发表于:2017/9/3 16:44:14
#6楼
回复 #5楼 cvlsam
初学者,有时会不知所措,总之十分谢谢指导
6486
wuyang750
文章数:2637
年度积分:50
历史总积分:6486
注册时间:2014/5/6
发站内信
发表于:2017/9/4 9:02:39
#7楼
以下是引用cvlsam2017/9/3 15:06:16的发言:
前面的回帖我已经告诉你原因:因为编译器无法确切的知道D0的数据类型,16位数据还是32位数据?同样32位数据,TIME,UDINT,DINT等都是32位的。

我无法理解你一个非常简单的事情为何会变成一个非常大的麻烦,在前面的回帖中我也已经告诉你解决方案了。
例如以富士触摸屏为例:
在PLC中,我编写了如下的程序段,并在全局变量表内定义的变量:
附件 snap1.jpg

附件 snap3.jpg

在触摸屏中,你只需要确认使用双字地址,就可以了。




附件 snap2.jpg

此时只要注意的时,因为TIME的变量是以毫秒为单位的,因此如果你希望在屏上设定的为秒的单位的时候,你需要设定小数位数或者进行线性转换。




附件 snap4.jpg

而如果你一定喜欢脱裤子放屁,先使用DMOV指令写入TIME变量的话,那么请使用如下方法:





附件 snap5.jpg

Good Luck~
哈哈 兄弟真够有心的
此帖发自手机工控论坛

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005