vitalityboy
级别: 略有小成
精华主题: 0
发帖数量: 67 个
工控威望: 225 点
下载积分: 5500 分
在线时间: 71(小时)
注册时间: 2013-09-23
最后登录: 2025-12-19
查看vitalityboy的 主题 / 回贴
楼主  发表于: 7小时前
图片:
用ST写的那段,第一次M0 On后M100能On,在5秒后M100自动为Off,而M0再次On时M100却不会为On;用梯形图写的这段,M0为On时M100就On,在5秒后M100自动为Off,而且M0再次On后M100也能为On。以上两段程序运行原理一样,梯形图写的执行效果符合预期,而用ST写的却差强人意,同样都是FX3U的程序为什么执行效果却不一样???
guafa58
级别: 略有小成
精华主题: 0
发帖数量: 170 个
工控威望: 391 点
下载积分: 2920 分
在线时间: 313(小时)
注册时间: 2010-10-28
最后登录: 2025-12-19
查看guafa58的 主题 / 回贴
1楼  发表于: 6小时前
很不理解,你为什么 要写成 常开与上升沿 一起 ;   M0 常开就常开,上升沿就上升沿,串一起 ,如何扫描
工控小c
级别: 工控侠客
精华主题: 0
发帖数量: 593 个
工控威望: 2404 点
下载积分: 11838 分
在线时间: 566(小时)
注册时间: 2022-10-14
最后登录: 2025-12-19
查看工控小c的 主题 / 回贴
2楼  发表于: 5小时前
搞不懂。不过可以优化一下第一个IF判断M100,再IF判断M0上升沿。
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 6 篇
发帖数量: 5185 个
工控威望: 7546 点
下载积分: 163292 分
在线时间: 3263(小时)
注册时间: 2007-11-21
最后登录: 2025-12-19
查看sjm213的 主题 / 回贴
3楼  发表于: 2小时前
IF M0 THEN
    IF NOT M100 THEN
        IF M0 AND NOT M1 THEN
            M100:=TRUE;
            MOV(TRUE,0,D0);
        END_IF;
    ELSE
        IF D0>=5 THEN
            M100:=FALSE;
        END_IF;
    END_IF;
END_IF;

INCP(SM413,D0);

M1:=M0;

======================
估计是M0为OFF时 LDP(TRUE,M0)这句一直未执行,导致M0再ON时它的上升沿状态无变化,这样M100:=TRUE就不执行了。
uthman
QQ:3749615
级别: 家园常客
精华主题: 1 篇
发帖数量: 396 个
工控威望: 825 点
下载积分: 2719 分
在线时间: 796(小时)
注册时间: 2007-10-25
最后登录: 2025-12-19
查看uthman的 主题 / 回贴
4楼  发表于: 56分钟前
编译出的程序不一样,IF,CASE等编译后都是CJ跳转
uthman
QQ:3749615
级别: 家园常客
精华主题: 1 篇
发帖数量: 396 个
工控威望: 825 点
下载积分: 2719 分
在线时间: 796(小时)
注册时间: 2007-10-25
最后登录: 2025-12-19
查看uthman的 主题 / 回贴
5楼  发表于: 50分钟前
IF M0 AND NOT M1 THEN
    D0 := 0;
    M100 := TRUE;
END_IF;
M1 := M0;

IF M8013 AND NOT M2 THEN
    D0 := D0 + 1;
END_IF;

M2 := M8013;

IF D0 >= 5 THEN
    M100 := FALSE;
END_IF;