假设有四个工作站(S1、S2、S3、S4),每个站都有一个触发开关来启动(T1、T2、T3、T4),每个站都有一位作业员去手动触发本站开关。
当一个工站首先工作时,其他三站即便被触发了也要处于等待状态,且 PLC 能够记忆出这四个站被触发的先后顺序,于是能确保当第一个被触发的工站运行结束后,PLC 调用第二个被触发的工站使其运行,......,依次类推。也就是说四个作业员触发的先后顺序,PLC 程序在后面要用到该顺序时能够找出来。
程序示例
// 声明四个触发开关输入 BOOL T1, T2, T3, T4; // 声明四个工作站输出 BOOL S1, S2, S3, S4; // 声明一个队列来存储触发的顺序 INT Queue[4]; // 声明一个变量来保存队列的头部 INT Head = 0; // 声明一个变量来保存队列的尾部 INT Tail = 0; // 主程序 void main() { // 初始化队列 for (INT i = 0; i < 4; i++) { Queue[i] = -1; } // 主循环 while (TRUE) { // 检查是否有触发开关被按下 IF (T1) { // 将 T1 添加到队列中 Queue[Tail] = 1; // 更新队列尾部 Tail = (Tail + 1) % 4; } IF(T2) { // 将 T2 添加到队列中 Queue[Tail] = 2; // 更新队列尾部 Tail = (Tail + 1) % 4; } IF(T3) { // 将 T3 添加到队列中 Queue[Tail] = 3; // 更新队列尾部 Tail = (Tail + 1) % 4; } IF(T4) { // 将 T4 添加到队列中 Queue[Tail] = 4; // 更新队列尾部 Tail = (Tail + 1) % 4; } // 检查队列是否不为空 IF (Head != Tail) { // 获取队列头部的值 INT StationNumber = Queue[Head]; // 更新队列头部 Head = (Head + 1) % 4; // 启动相应的工站 switch (StationNumber) { case 1: S1 = TRUE; break; case 2: S2 = TRUE; break; case 3: S3 = TRUE; break; case 4: S4 = TRUE; break; } } } }
本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!
添加新评论