谁说工控PLC不能和单片机结合的?

2026-10-022

很多工控工程师都说:

“工业现场从没见过PLC和单片机结合。”

 

这次先不争论,直接做个小实验。

我用的是:

  • Siemens S7-200 SMART CR40
  • 谁说工控PLC不能和单片机结合的?_image_1.webp
  • Arduino
  • 24V—3.3V光耦隔离模块
  • 谁说工控PLC不能和单片机结合的?_image_2.webp
  • 5v-LED
  • step 7 西门子编程软件
  • 谁说工控PLC不能和单片机结合的?_image_3.webp

     

实验目标不是让Arduino自己点亮LED。

Arduino点亮LED当然不难,CR40直接控制指示灯也不难。真正要测试的是:

CR40输出的24V工业控制信号,能不能经过隔离后,让Arduino正确识别?

 

实验结构

 

CR40梯形图    ↓ CR40继电器输出    ↓ 24V信号 24V—3.3V光耦隔离模块    ↓ Arduino数字输入    ↓ Arduino数字输出    ↓ LED

这次让CR40做主控制器,Arduino只负责接收信号并显示结果。

换句话说:

 

CR40决定LED什么时候亮; Arduino负责把这个结果显示出来。

CR40梯形图控制

我在CR40中写了一段简单的梯形图,用输出点控制继电器。

测试时使用:

 

Q1.4 / DQb.4:控制24V喇叭 Q1.5 / DQb.5:输出给光耦模块

其中,Q1.5是这次LED测试使用的PLC输出点。

在Micro/WIN SMART的状态表中切换Q1.5:

 

Q1.5 = 0 → CR40输出关闭 Q1.5 = 1 → CR40输出接通

如果只是让LED亮起来,CR40完全可以自己完成,不需要Arduino。

所以这里故意把Arduino放在继电器输出后面,测试PLC与单片机之间的信号链路。

谁说工控PLC不能和单片机结合的?_image_4.webp

光耦隔离模块

CR40输出的是24V工业信号,Arduino的输入端不能直接接收24V。

因此中间加入:

 

24V—3.3V光耦隔离模块

连接关系如下:

 

CR40 Q1.5 → 光耦模块1+ CR40 M     → 光耦模块1-

Arduino侧:

 

光耦模块VCC → Arduino 3.3V 光耦模块GND → Arduino GND 光耦模块O1  → Arduino D2

光耦模块的作用是:

 

24V工业信号 → 电气隔离 → 3.3V逻辑信号

因此,不把CR40的24V直接接到Arduino的IO口。

Arduino程序

本次使用Arduino D2作为PLC信号输入,D10控制LED。

由于光耦模块输出为低电平有效,所以使用INPUT_PULLUP:

// 定义PLC信号输入引脚
// Arduino通过D2读取光耦隔离模块输出的信号
const int plcInput = 2;

// 定义LED输出引脚
// Arduino通过D10控制LED
const int ledPin = 10;

void setup() {
  // 将D2设置为带内部上拉电阻的数字输入
  // 光耦模块输出为低电平有效
  pinMode(plcInput, INPUT_PULLUP);

  // 将D10设置为数字输出
  // 用于控制LED的亮灭
  pinMode(ledPin, OUTPUT);

  // Arduino启动时先关闭LED
  // 避免上电瞬间LED误点亮
  digitalWrite(ledPin, LOW);
}

void loop() {
  // 读取PLC信号状态
  // 当D2读取到LOW时,表示光耦模块检测到PLC输出信号
  bool plcOn = (digitalRead(plcInput) == LOW);

  // 判断PLC信号是否有效
  if (plcOn) {
    // PLC输出有效
    // Arduino将D10设置为HIGH,点亮LED
    digitalWrite(ledPin, HIGH);
  } else {
    // PLC输出无效
    // Arduino将D10设置为LOW,关闭LED
    digitalWrite(ledPin, LOW);
  }

  // 延时10毫秒后再次读取PLC信号
  // 避免循环执行过快
  delay(10);
}

程序逻辑很简单:

 

CR40 Q1.5接通 → 光耦输出有效 → Arduino D2检测到低电平 → Arduino D10输出高电平 → LED点亮

反过来:

 

CR40 Q1.5断开 → Arduino D2检测不到有效信号 → Arduino D10输出低电平 → LED熄灭

谁说工控PLC不能和单片机结合的?_image_5.webp

 

谁说工控PLC不能和单片机结合的?_image_6.webp测试结果

测试结果如下:

 

CR40 Q1.5Arduino D2Arduino D10LED
0无有效输入LOW熄灭
1检测到输入HIGH点亮

测试成功。

这条信号链路已经打通:

 

CR40梯形图 → CR40继电器输出 → 24V工业信号 → 光耦隔离 → Arduino输入 → Arduino输出 → LED

谁说工控PLC不能和单片机结合的?_image_7.webp

这次实验说明了什么?

这不是为了证明Arduino比PLC更强,也不是让Arduino替代CR40。

在这个实验里:

 

CR40: 负责梯形图逻辑和主控制信号 光耦模块: 负责24V与3.3V之间的隔离和转换 Arduino: 负责接收PLC信号,并将结果输出到LED

如果任务只是控制一个LED,CR40自己就能完成。

所以这次LED的真正作用,是作为一个最直观的状态指示器,验证:

PLC的工业控制信号,能否安全地交给单片机继续处理。

 

不过给人的感觉好像主控CR40没干活,干活的反而是辅助控制器arduino。下一次我会写一篇cr40+arduino控制直流电机。这样你会看到两个主控是怎么协同工作完成项目的。

 

注明:本项目有部分内容涉及到交流电。这个内容面向对象主要是有高低压电路知识和工控编程的人。例如装配电工,PLC接线工,PLC编程工程师,PLC机器视觉,工控机器人工程师。上位机工程师,MES工程师。不适合只有12V,5V电路知识的中小学生。

创作许可协议

本项目采用 CC BY(署名) 进行许可。

评论(0)
- 没有更多了 -