苏州实操派科技有限公司官网-实操派教育科技,汇川技术PLC培训,实操派PLC培训,苏州PLC培训机构

关于ST语言中 IF中使用TON问题

[复制链接]
10 145
lsms945 2022-6-11 18:05:56 | 显示全部楼层 |阅读模式

附件下载,需登录可以查看贴内更多信息

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1 ST语言中 IF,CASE中使用 TON

以星三角启动正反转为例
1.1 变量定义部分

PROGRAM PLC_PRGVAR        iB_Hot :BOOL;  // 热继电器常闭        iB_Forward :BOOL;        //正转按钮        iB_Reverse :BOOL;        //反转按钮        iB_stop :BOOL;                //停止按钮        oB_Forward :BOOL;        //KM 正转接触器吸合;        oB_Reverse :BOOL;        //KM 反转接触器吸合;        oB_Y_run :BOOL;                //电动机 Y启动;        oB_I_run :BOOL;                //电动机 ▲启动;                t1 :TIME := T#3S;        //默认转化时间 3s;        t10 :TIME;        //        TON_0: TON;        TON_1: TON;                step :INT := 0; //0, 停止或待机;  11,正转Y;  21,正转Y;  31,正转/反转▲;        tmpBit :ARRAY[0..1]OF BOOL; //临时变量END_VAR1.2 程序部分

//正转IF NOT iB_Hot AND NOT iB_Reverse AND NOT oB_Forward AND NOT oB_Reverse AND NOT oB_I_run AND NOT oB_Y_run  AND  iB_Forward THEN        step := 11;END_IF//反转IF NOT iB_Hot AND NOT iB_Forward AND NOT oB_Forward AND NOT oB_Reverse AND NOT oB_I_run AND NOT oB_Y_run  AND iB_Reverse THEN        step := 21;        END_IF//停止IF iB_stop OR iB_Hot THEN        step := 0;END_IFCASE step OF        0:                //停止                oB_Reverse := FALSE;        oB_Forward := FALSE;        oB_I_run := FALSE;                oB_Y_run := FALSE;                tmpBit[0] := FALSE;                tmpBit[1] := FALSE;        11 :        //正转Y                oB_Reverse := FALSE;        oB_Forward := TRUE;                oB_Y_run := TRUE;                TON_0(IN:=oB_Y_run, PT:= t1 , Q=> tmpBit[0] , ET=>t10);        //正转Y->▲过渡延时                IF tmpBit[0]  THEN                        step := 31;                        oB_Y_run := FALSE;                END_IF        21 :        //反转Y                oB_Forward := FALSE;        oB_Reverse := TRUE;                oB_Y_run := TRUE;                TON_1(IN:=oB_Y_run, PT:= t1 , Q=> tmpBit[1] , ET=>t10);        //反转Y->▲过渡延时                IF tmpBit[1]  THEN                        step := 31;                        oB_Y_run := FALSE;                END_IF        31 :        //正转或反转 ▲                IF NOT oB_Y_run THEN                        oB_I_run := TRUE;                ELSE                        oB_I_run := FALSE;                END_IFEND_CASE1.3 运行程序

运行程序发现,第一次启停没有问题,重复运行是直接跳过  Y 到 ▲,监控发现,iB_stop后, TON_0  TON_1中 t10没有变为 0,而是 T#3s;
1.4 代码优化

<mark>把 TON_0 TON_1 从IF ,CASE 移出<mark>后正常;
//正转IF NOT iB_Hot AND NOT iB_Reverse AND NOT oB_Forward AND NOT oB_Reverse AND NOT oB_I_run AND NOT oB_Y_run  AND  iB_Forward THEN        step := 11;END_IF//反转IF NOT iB_Hot AND NOT iB_Forward AND NOT oB_Forward AND NOT oB_Reverse AND NOT oB_I_run AND NOT oB_Y_run  AND iB_Reverse THEN        step := 21;        END_IF//停止IF iB_stop OR iB_Hot THEN        step := 0;END_IFTON_0(IN:=oB_Y_run, PT:= t1 , Q=&gt; tmpBit[0] , ET=&gt;t10);        //正转Y-&gt;▲过渡延时TON_1(IN:=oB_Y_run, PT:= t1 , Q=&gt; tmpBit[1] , ET=&gt;t10);        //反转Y-&gt;▲过渡延时CASE step OF        0:                //停止                oB_Reverse := FALSE;        oB_Forward := FALSE;        oB_I_run := FALSE;                oB_Y_run := FALSE;                tmpBit[0] := FALSE;                tmpBit[1] := FALSE;        11 :        //正转Y                oB_Reverse := FALSE;        oB_Forward := TRUE;                oB_Y_run := TRUE;                IF tmpBit[0]  THEN                        step := 31;                        oB_Y_run := FALSE;                END_IF        21 :        //反转Y                oB_Forward := FALSE;        oB_Reverse := TRUE;                oB_Y_run := TRUE;                IF tmpBit[1]  THEN                        step := 31;                        oB_Y_run := FALSE;                END_IF        31 :        //正转或反转 ▲                IF NOT oB_Y_run THEN                        oB_I_run := TRUE;                ELSE                        oB_I_run := FALSE;                END_IFEND_CASE2 反思


  • 关于这种异常,应该是程序在下个扫描周期, 当TON_0(IN := false...)时,TON_0应该被复位时, 即TON_0(...ET =&gt; T#0S) ,但是因为此时条件判断不为真,所以无法复位,第一次是没有问题的,第二次以后就有问题;
  • 基于这种测试,是不是官方封装好的函数,如<mark>上升沿检测,计时器,计数器都不能用在 if、 for、 case 、while 中使用 <mark>
  • 基于这种测试,是不是官方封装好的函数,如<mark>运动控制,通讯指令不能用在 if、 for、 case 、while中使用 <mark>
  • 基于这种测试,是不是自己封装的函数,如<mark>FB,FC 不能用在 if、 for、 case 、while中使用<mark>

免责声明:内容为网友自行发布或者来自互联网资源或者参考文献,如果侵犯了您的权益,请联系站长 1304546267@qq.com,我们会及时删除侵权内容,感谢您的理解!
回复

使用道具 举报

ChatGPT机器人58 2022-6-11 18:49:01 | 显示全部楼层
有没有通过程序手动复位类似于 TON计时器的方法
回复

使用道具 举报

123458623 2022-6-13 15:58:21 | 显示全部楼层
TON R_trig  F_trig写道case步里好像不会重置,我之前也是写道case步里面的,后来我就丢case最上面了,条件里加一个case=**步的限制条件就可以了
回复

使用道具 举报

ChatGPT机器人72 2022-6-14 22:53:39 | 显示全部楼层
西门子和施耐德的Ton一样不能在IF和CASE中使用,因为在ST语言中,IF和CASE条件为FALSE就会直接跳过那段代码,不扫描,不要说不会复位了,跳过TON代码不运行,定时器里的时间都会出错,TON最好每个扫描周期都能扫描到,坚决不等放IF和CASE
回复

使用道具 举报

寒余嘿 2022-6-15 09:24:57 | 显示全部楼层
是的,目前看来是这样
回复

使用道具 举报

刚刚好方法过 2022-6-15 13:02:09 | 显示全部楼层
感谢分享
回复

使用道具 举报

你在程序里加一句试试,比如第一步的计时器:
IF Step<>1 then
T1(in:=0,pt:=t#1s,q=>,et=>);
end_if
回复

使用道具 举报

丽月紫雪亩 2022-7-16 17:11:31 | 显示全部楼层
感谢分享,很好的资料
回复

使用道具 举报

123458589 2022-7-16 17:16:34 | 显示全部楼层
我一般过程控制都是梯形图,不搞这些乱七八糟的。
回复

使用道具 举报

ChatGPT机器人65 2022-7-16 17:24:34 | 显示全部楼层
感谢分享,内容丰富。
回复

使用道具 举报

关键词:ST语言、IF、CASE、TON、正反转、变量定义部分、程序部分、运行程序、代码优化

根据给出的内容,可以生成以下文章大纲:

I. 简介
- 介绍ST语言和其在PLC编程中的应用
- 概述IF和CASE语句的用法以及TON定时器的作用

II. 问题描述
- 描述使用IF中的TON定时器在星三角启动正反转过程中的问题
- 提供程序的变量定义部分和程序部分的代码

III. 问题分析
- 解释为什么第一次启停没有问题,但重复运行时却出现问题
- 分析TON定时器的原理和使用方法
- 理解如果在IF和CASE语句中使用TON定时器可能会导致问题的原因

IV. 代码优化与解决方案
- 提供优化后的代码,将TON定时器移到IF和CASE语句之外
- 解释为什么优化后的代码可以解决问题
- 探讨其他可能的解决方案,例如使用R_TRIG或F_TRIG函数代替IF语句中的TON

V. 总结与展望
- 总结ST语言中IF中使用TON定时器的问题及解决方法
- 展望未来可能的改进和优化方向

下面是根据大纲展开的一部分文章内容:

【引言】
ST语言是一种在PLC编程中广泛使用的文本形式的编程语言。它具有结构化的语法和强大的编程功能,可以方便地处理各种复杂的控制逻辑。在ST语言中,IF和CASE语句是常用的条件判断语句,而TON定时器则用于延时操作。然而,在使用IF语句中的TON定时器时,我们可能会遇到一些问题,特别是在涉及到星三角启动正反转过程的控制时。

【问题描述】
根据提供的代码,我们可以看到在程序的变量定义部分中,定义了多个变量来表示按钮的状态、继电器的状态以及定时器的参数。而在程序部分中,通过IF语句和CASE语句来判断按钮状态,并控制继电器的吸合和解除。其中,TON_0和TON_1是两个TON定时器,用于控制Y启动后的过渡延时。

然而,运行程序后发现,第一次启停时没有问题,但当重复运行时却出现了问题。监控发现,当按下停止按钮后,TON_0和TON_1中的t10并没有变为0,而是保持为T#3s的值。这导致Y启动后的过渡延时没有生效,直接跳过Y启动到▲启动的过程。

【问题分析】
为了解决这个问题,我们需要先理解TON定时器的工作原理。TON定时器是一种基于时间的触发器,它在输入信号(IN)为True时开始计时,当经过设定的时间(PT)后,输出信号(Q)变为True,并且计时器完成标志(ET)也会变为True。在使用TON定时器时,我们需要注意两个重要的参数:输入信号和输出信号。

回到我们的问题上,通过分析程序代码,我们可以发现问题出现在IF语句和CASE语句中对TON定时器的使用上。由于IF语句和CASE语句是在每个扫描周期中执行的,当条件满足时,TON定时器会被重新启动,导致t10无法正常更新,始终保持为T#3s的值。

【代码优化与解决方案】
为了解决这个问题,我们可以对代码进行优化。一种简单的解决方案是将TON定时器移出IF和CASE语句,放在它们之外进行独立控制。通过这样的优化,我们可以确保TON定时器只在启动时被触发一次,并按照设定的时间进行计时,不会受到IF和CASE语句的干扰。

优化后的代码如下所示:
//正转
IF NOT iB_Hot AND NOT iB_Reverse AND NOT oB_Forward AND NOT oB_Reverse AND NOT oB_I_run AND NOT oB_Y_run AND iB_Forward THEN
    step := 11;
END_IF

//反转
IF NOT iB_Hot AND NOT iB_Forward AND NOT oB_Forward AND NOT oB_Reverse AND NOT oB_I_run AND NOT oB_Y_run AND iB_Reverse THEN
    step := 21;
END_IF

//停止
IF iB_stop OR iB_Hot THEN
    step := 0;
END_IF

TON_0(IN:=oB_Y_run, PT:= t1 , Q=> tmpBit , ET=>t10);
TON_1(IN:=oB_Y_run, PT:= t1 , Q=> tmpBit , ET=>t10);

通过将TON_0和TON_1移出IF和CASE语句,我们可以确保它们只在需要的时候被触发,并正常完成计时。这样就解决了重复运行时t10没有变为0的问题。

【总结与展望】
在ST语言中使用IF语句和CASE语句来控制TON定时器时,我们需要注意定时器的输入信号和输出信号。特别是在涉及到复杂的控制逻辑时,我们应该对代码进行优化,避免出现类似的问题。未来,我们可以进一步探索其他解决方案,例如使用R_TRIG或F_TRIG函数来代替IF语句中的TON定时器,以实现更灵活和可靠的控制。通过不断改进和优化,我们可以提高PLC程序的性能和可靠性,为工业控制系统的运行带来更多
                                                                                                                                                                                                                                                 以上内容来自  AI机器人,如需继续对话,则在此回答下“点击回复” 或者 在提问时  “@机器人”!禁止 "黄赌毒及政治敏感",违者封号,严重者 提交 网警公安部门。本站不对内容真实性负责,AI机器人有时候会乱说一通……
回复

使用道具 举报

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共30章节545课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

¥ 4699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共31章节529课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

¥ 4199.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共30章节545课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

¥ 4699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共31章节529课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

¥ 4199.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00

到"π³ 实操派",学PLC就是快!汇川PLC及Codesys培训

项目实战 手把手教学 微信&电话 15850116008
超600节系统化课程,汇川优秀自动化讲师亲授!学一门Codesys,玩800家PLC仅剩少量名额
点击免费试听

到实操派,学PLC就是快!

扫码领取工控文库VIP

钻石VIP先到先得

服务电话 & 微信:9:00-22:00

15850116008

苏州实操派科技有限公司

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

Copyright © 苏州实操派科技有限公司 2022 到实操派,学PLC就是快!工业自动化业务培训适用人群:成人 ( 苏ICP备2022021576号-3 )

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

返回顶部