您现在所在的是:

PLC论坛

回帖:7个,阅读:1578 [上一页] [1] [下一页]
1702
czhaii
文章数:280
年度积分:138
历史总积分:1702
注册时间:2016/3/13
发站内信
发表于:2023/4/26 22:02:55
#0楼
附件 1.jpg

不知道我这样写对不,按下X0,M0吸合,进入FOR语句,X1按下,Y1输出并计时,T0时间到断开Y1.

按下X2,Y2得电 T1计时,T1计时到,断开M1,M0吸合,返回FOR语句下一条指令出执行,

执行FOR 3次跳出循环,按下X3 Y3输出。程序重复执行。

736
Brainy_fa
文章数:77
年度积分:736
历史总积分:736
注册时间:2023/1/6
发站内信
发表于:2023/4/26 22:36:54
#1楼
你这是典型的拿高级语言思维来理解PLC的程序执行了。

PLC的扫描过程与高级语言一个很重要的不同点在于:即使运行条件不满足,程序仍然是往下执行的。

比如你按下X0,再按X1让Y1输出后,继续按X3就会发现Y1立即断开了。X3这段程序并不会等T0--X2--T1依次满足之后才去执行。


想要实现Y1、Y2交替输出三次的程序,用个计数器串联T1并到X0上。
1702
czhaii
文章数:280
年度积分:138
历史总积分:1702
注册时间:2016/3/13
发站内信
发表于:2023/4/27 8:03:36
#2楼
谢谢,编惯了C语言,刚刚接触PLC,
还没有吃透PLC编程书写格式。
C语言这种循环就是用for,或者do while来编写
for(i=0;i<5;i++)
{


}

do
{

}
while{1};
我再试试,我是想让PLC在这一段程序中停止运行,
必须循环FOR K值之后再向下执行。
1702
czhaii
文章数:280
年度积分:138
历史总积分:1702
注册时间:2016/3/13
发站内信
发表于:2023/4/28 11:45:03
#3楼
附件 往返控制.jpg
跟我动手学FX系列PLC,小车往返控制
14983
xuhuifox
文章数:2808
年度积分:930
历史总积分:14983
注册时间:2005/3/25
发站内信
发表于:2023/4/28 11:50:51
#4楼
应该有跳转到指定标签的功能,三菱的我也不是很熟!
                 一切为了生活
1702
czhaii
文章数:280
年度积分:138
历史总积分:1702
注册时间:2016/3/13
发站内信
发表于:2023/4/28 17:50:15
#5楼
看来PLC需要像C语言状态机一样来控制,在整个循环周期内,
需要某一部分动作,用计数器和D寄存器,M继电器来配合,
方便之处是所有软元件的常开常闭触点不限个数。
软元件数量也比较多
220
lvpretend
文章数:1449
年度积分:220
历史总积分:220
注册时间:2019/5/12
发站内信
发表于:2023/5/2 12:41:16
#6楼
三菱的FOR NEXT意思就是在一个扫描周期中,重复执行FOR -----NEXT之间的程序。
你这个程序的FOR是没有意义的,执行过程如下:
0--->3
6--->28
6--->28
6--->28
29-->34
也就是FOR---NEXT之间的程序被连续重复执行了3次。
PLC的程序执行非常特别,是从上到下依次扫描执行的,不会中断,跟状态机也不相同,与汇编语言相同。
PLC最常用的梯形图是一种继电回路描述语言,继电回路是并行执行的,比如有100个继电回路,只要一通电那么100个回路就同时开始执行。PLC就是用串行执行的方式来模拟继电回路的并行执行过程,如上述的哪100个回路,被PLC从上到下依次通电,一次通电一个回路(就是扫描)。
比如你上面的程序,如果没有用到FOR NEXT,那么就是
先把0行通电:如果X0闭合,那么Y0接通,M0被置位。如果X0没有闭合,那么Y0不会接通,M0也不会被置位。
类似于C的if else 语句
if X0{
  Y0=1;
  M0=1;    //M0在梯形图中是置位
}
else{
   Y0=0;   //这里没有M0=0,因为是置位
}
然后执行第6行(实际是第6步):如果X0或者Y1是接通的,那么
if (X0 or Y0){
              if M0{
                     if not(T0){
                        T0 K200;       //如果条件满足执行到这一步,定时器就启动开始工作,到达20S后T0的接点就闭合。如果下次
                        Y1=1;          //执行程序时无法满足条件T0如果已经接通则立即断开,如果还没有接通这时间立即回0
                     else{
                          T0=0;
                          Y1=0
                }
                else{
                     T0=0;
                     Y1=0
                }
else{
   T0=0;
   Y1=0
}
总之C转PLC有个过程,只要理解了“扫描”的概念就好了,如果你懂汇编就没什么障碍了,PLC妥妥的汇编语言。
1702
czhaii
文章数:280
年度积分:138
历史总积分:1702
注册时间:2016/3/13
发站内信
发表于:2023/5/2 16:57:28
#7楼
汇编和C语言执行指令的流程是一样的,
都是逐条语句执行的,
只不过汇编直接操作寄存器,
必须对寄存器非常熟悉。
C语言编写起来更方便一点,
特别是处理16位数据,加减乘除。
还有一些复杂的函数调用。
;--------------------------------------
         ORG      0000H
         LJMP     MAIN
         ORG      0030H
MAIN:     MOV      P3,#0FFH
         MOV      P1,#0FFH
         CLR      P3.5   ;电机停止
         LCALL    DE3    ;延时8秒
         SETB     P3.5   ;电机输出
MAN:      JB       P3.7,MAI
         LCALL    DSS    ;延时等待红外输入
         JB       P3.7,MAI
MK1:      CLR      P1.7   ;电机输出
         LCALL    DE3    ;延时3秒
         SETB     P1.7   ;电机停止
         LCALL    DE8    ;延时8秒
         CLR      P1.7   ;电机输出
         LJMP     LOOP   ;跳检测对接
;--------------------------------------
MAI:      JB       P3.2,MAN
         LCALL    DSS    ;延时等待行程输入
         JB       P3.2,MAN
         LJMP     MK1
;--------------------------------------
LOOP:     JB       P1.2,LSSP   ;********
         LCALL    DSS    ;延时等待对接输入
         JB       P1.2,LSSP   ;********
         SETB     P1.7   ;电机上升停止
LTTP:     JNB      P1.2,LTTP ;延时等待对接脱离
         LCALL    DSS
         JNB      P1.2,LTTP
         CLR      P1.7   ;电机输出
         LJMP     LSSP   ;检测上升限位
;--------------------------------------
LSSP:     JB       P1.4,LOOP
         LCALL    DSS    ;延时检测上升限位
         JB       P1.4,LOOP
;--------------------------------------
         SETB     P1.7   ;电机上升停止
         LCALL    DEL    ;延时缓冲
         CLR      P1.6   ;电机下降输出
LXXP:     JB       P1.3,LXXP
         LCALL    DSS    ;延时检测上升限位
         JB       P1.3,LXXP
         SETB     P1.6   ;电机下降停止
         LJMP     MAN
DEL:      MOV      R1,#0FFH
DEL3:     MOV      R2,#0E1H
DEL2:     MOV      R3,#08H
DEL1:     DJNZ     R3,DEL1
         DJNZ     R2,DEL2
         DJNZ     R1,DEL3
         RET
;--------------------------------------
DSS:      MOV      R1,#0FFH
DES3:     MOV      R2,#0AFH
DES2:     DJNZ     R2,DES2
         DJNZ     R1,DES3
         RET
;--------------------------------------
DE3:      MOV      R4,#03H
DE33:     LCALL    DEL
         DJNZ     R4,DE33
         RET
;--------------------------------------
DE8:      MOV      R4,#03H
DE88:     LCALL    DEL
         DJNZ     R4,DE88
         RET
;--------------------------------------
         END

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

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

78.0005