第3章:数字IO接口与PLC对接

各位同学,今天我们来聊聊数字IO接口与PLC对接的那些事。说实话,这个知识点在自动化现场太常见了。我见过太多工程师因为接线方式搞错,烧了PLC输入点,那叫一个心疼。

3.1 PLC数字输入模块原理

PLC的数字输入模块,说白了就是判断外部信号是"通"还是"断"。但这里有个关键点——它内部是怎么工作的?

我给大家拆解一下。典型的数字输入模块内部,有一个光耦隔离器。外部信号进来,先经过光耦,再传给CPU。这样做的好处很明显:电气隔离,抗干扰。

光耦的输入端一般是个LED,输出端是个光敏三极管。外部有24V信号时,LED亮,光敏管导通,CPU读到"1"。没信号时,LED灭,CPU读到"0"。就这么简单。

但实际项目中,我遇到过一个问题:有些传感器输出的是NPN信号,有些是PNP信号。接错了,PLC死活读不到数据。这就引出了下一个话题——源型和漏型。

3.2 源型/漏型接线

这两个词,我刚开始做项目时也搞混过。咱们用最直白的方式理解:

  • 漏型(Sinking):电流从负载流向PLC输入端。说白了,PLC输入模块内部是正极,外部传感器提供负极。
  • 源型(Sourcing):电流从PLC输入端流向负载。PLC输入模块内部是负极,外部传感器提供正极。

我给大家画个表格,一目了然:

类型 电流方向 常见传感器 PLC公共端接法
漏型(NPN) PLC → 传感器 NPN型接近开关 公共端接0V
源型(PNP) 传感器 → PLC PNP型接近开关 公共端接24V
⚠️ 重要提醒: 我曾经在一条生产线上,把NPN传感器接到了源型输入模块上。结果呢?信号时有时无,排查了整整一个下午。最后发现是接线方式不匹配。所以,接线前一定先看PLC手册,确认输入模块是源型还是漏型。

你想想看,如果PLC模块是漏型(公共端接0V),你接了个PNP传感器。传感器输出24V,但PLC输入端需要的是0V信号。这不就冲突了吗?

3.3 高速计数器接口

说到高速计数器,这可是个硬核话题。普通的数字输入,PLC扫描周期一般在几毫秒到几十毫秒。但编码器信号,频率可能高达几十千赫兹甚至更高。PLC的普通扫描根本跟不上。

怎么办?PLC内部有专门的高速计数器模块。它不依赖CPU的扫描周期,而是用硬件直接计数。

我给大家看个典型接线图(用文字描述):

编码器A相 → PLC高速计数器输入点(如西门子S7-1200的I0.0)
编码器B相 → PLC高速计数器输入点(如I0.1)
编码器Z相(零位) → PLC高速计数器输入点(如I0.2)
编码器电源(+24V) → PLC 24V电源正极
编码器0V → PLC 24V电源负极

这里有个坑,我必须要说:编码器的输出类型也要匹配PLC的输入类型。NPN输出的编码器,不能直接接源型输入模块。中间要加转换电路,或者用带方向判断的高速计数器模块。

💡 实战技巧: 我习惯在编码器信号线上加一个RC滤波器。电阻100Ω,电容0.1μF。这样能滤掉高频干扰,又不影响正常信号。但注意,如果编码器频率太高(超过100kHz),RC滤波会衰减信号,这时候要用专用的差分信号接收器。

3.4 中断信号处理

中断,这个词听起来高大上。其实说白了,就是让PLC放下手头的工作,先去处理紧急事件。

PLC的扫描周期是固定的:读输入→执行程序→写输出。但如果有个信号需要立即响应,比如急停按钮按下,你总不能等下一个扫描周期吧?

这时候就要用中断。PLC的中断信号,一般也是通过数字输入点接入的。但和普通输入不同,中断输入点有硬件上的特殊设计。

我给大家列一下常见的中断类型:

  • 上升沿中断:信号从0变1时触发
  • 下降沿中断:信号从1变0时触发
  • 硬件中断:由外部信号直接触发,响应最快
  • 时间中断:定时触发,比如每10ms执行一次

在西门子S7-1200中,中断的配置是这样的:

// 在OB1(主程序)中,我们正常写逻辑
// 但中断事件由OB40(硬件中断组织块)处理

// 配置步骤:
// 1. 在设备组态中,选择输入点I0.0
// 2. 启用硬件中断功能
// 3. 选择触发沿(上升沿或下降沿)
// 4. 关联到OB40

// OB40中的代码示例:
#interrupt_count := #interrupt_count + 1;
// 这里写紧急处理逻辑
// 比如:立即停止电机,记录故障时间

嗯,这里要注意:中断程序要尽量短。我见过有人在中断里写了几百行代码,结果中断还没处理完,下一个中断又来了。系统直接崩溃。

🔑 核心要点:
  • 中断程序执行时间 < 中断触发间隔
  • 中断里不要用延时指令
  • 中断里不要读写大量数据
  • 中断里不要调用子程序(除非子程序也很短)

我曾经在一个包装机上,用中断处理编码器的Z相信号。每次编码器转一圈,Z相触发一次中断,PLC记录当前位置。但有一次,编码器转速太高,中断触发频率超过了PLC的处理能力。结果呢?丢脉冲了,位置数据全乱套。

后来怎么解决的?我换了一个带硬件锁存功能的PLC模块。编码器Z相信号直接锁存到硬件寄存器里,CPU慢慢读就行。这样就不怕中断丢失了。

3.5 实战总结

好了,这一章的内容就这些。我给大家总结几个关键点:

  1. 接线前确认类型:源型还是漏型,NPN还是PNP,搞错了就烧模块
  2. 高速信号用专用接口:别指望普通数字输入能处理编码器信号
  3. 中断程序要精简:能放主循环的,别放中断里
  4. 抗干扰不能省:屏蔽线、RC滤波、光耦隔离,该用就用

下一章,我们会讲模拟量输入接口与信号调理。到时候我会分享一个关于热电偶冷端补偿的实战案例,那才叫一个精彩。咱们下节课见!