[求助] Omron PLC 编写特定实例的代码] Omron 编程示例 [帮助求取 (求助omg中国海洋大学知到答案)

假设有四个工作站(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网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论