plc8个灯循环右移
时间: 2023-12-29 17:05:03 浏览: 284
以下是PLC编写8个灯循环右移的程序:
```
LD X0
OUT Y0
ROR Y0
OUT Y1
ROR Y1
OUT Y2
ROR Y2
OUT Y3
ROR Y3
OUT Y4
ROR Y4
OUT Y5
ROR Y5
OUT Y6
ROR Y6
OUT Y7
ROR Y7
JMP $
LD X1
OUT Y0
OUT Y1
OUT Y2
OUT Y3
OUT Y4
OUT Y5
OUT Y6
OUT Y7
```
程序的实现原理是,首先判断启动按钮X0是否按下,如果按下则点亮Y0灯,然后通过循环右移指令ROR依次点亮Y1~Y7灯,最后再次点亮Y0灯,周而复始地循环运行。当停止按钮X1按下时,所有灯都会熄灭。
相关问题
三菱plc8个灯循环右移
以下是两种实现三菱PLC 8个灯循环右移的方法:
方法一:利用定时器和比较指令实现流水灯或跑马灯的效果
```plc
LD K0 ; 启动按钮
OUT Y0 ; 控制8个LED灯的输出
LD K1 ; 停止按钮
OUT Y1 ; 控制停止
MOV #500, D0 ; 设置定时器初值为500ms
MOV #4000, D1 ; 设置定时器上限为4s
MOV #0, D2 ; 设置计数器初值为0
START:
CMP D2, D1 ; 判断计数器是否达到上限
JEQ END
CMP D2, #0 ; 判断计数器是否为0
JEQ FIRST_LED
CMP D2, #500 ; 判断计数器是否为500ms
JEQ SECOND_LED
CMP D2, #1000 ; 判断计数器是否为1000ms
JEQ THIRD_LED
CMP D2, #1500 ; 判断计数器是否为1500ms
JEQ FOURTH_LED
CMP D2, #2000 ; 判断计数器是否为2000ms
JEQ FIFTH_LED
CMP D2, #2500 ; 判断计数器是否为2500ms
JEQ SIXTH_LED
CMP D2, #3000 ; 判断计数器是否为3000ms
JEQ SEVENTH_LED
CMP D2, #3500 ; 判断计数器是否为3500ms
JEQ EIGHTH_LED
ADD #1, D2 ; 计数器加1
MOV D0, D100 ; 将定时器初值赋值给D100
MOV #0, D101 ; 将计数器清零
TIM #1s ; 启动定时器
JMP START
FIRST_LED:
OUT Y2 ; 亮第一个LED灯
JMP START
SECOND_LED:
OUT Y3 ; 亮第二个LED灯
JMP START
THIRD_LED:
OUT Y4 ; 亮第三个LED灯
JMP START
FOURTH_LED:
OUT Y5 ; 亮第四个LED灯
JMP START
FIFTH_LED:
OUT Y6 ; 亮第五个LED灯
JMP START
SIXTH_LED:
OUT Y7 ; 亮第六个LED灯
JMP START
SEVENTH_LED:
OUT Y8 ; 亮第七个LED灯
JMP START
EIGHTH_LED:
OUT Y9 ; 亮第八个LED灯
JMP START
END:
```
方法二:循环移位法
```plc
LD K0 ; 启动按钮
OUT Y0 ; 控制8个LED灯的输出
LD K1 ; 停止按钮
OUT Y1 ; 控制停止
MOV #0, D0 ; 设置循环移位初值为0
START:
CMP D0, #8 ; 判断循环移位是否达到8次
JEQ END
MOV Y9, M8000 ; 将第8个LED灯的状态保存到M8000
MOV Y8, Y9 ; 将第7个LED灯的状态赋值给第8个LED灯
MOV Y7, Y8 ; 将第6个LED灯的状态赋值给第7个LED灯
MOV Y6, Y7 ; 将第5个LED灯的状态赋值给第6个LED灯
MOV Y5, Y6 ; 将第4个LED灯的状态赋值给第5个LED灯
MOV Y4, Y5 ; 将第3个LED灯的状态赋值给第4个LED灯
MOV Y3, Y4 ; 将第2个LED灯的状态赋值给第3个LED灯
MOV Y2, Y3 ; 将第1个LED灯的状态赋值给第2个LED灯
MOV M8000, Y2 ; 将保存的第8个LED灯的状态赋值给第1个LED灯
ADD #1, D0 ; 循环移位次数加1
JMP START
END:
```
阅读全文