Skip to main content

现场总线设备和 I/O 驱动程序

在设备树中配置的每个现场总线设备的技术基础是 I/O 驱动程序。

I/O 驱动程序是现场总线堆栈、IEC 应用程序和 IDE 之间的链接。驱动程序根据设备配置数据配置现场总线堆栈。它显示诊断,为 IEC 应用程序提供 API,并负责 I/O 映射(参见“I/O 映射”一章)。

本章简要概述了 I/O 驱动设备的基本功能,但不讨论具体总线系统的细节。此外,还提供了一些配置建议。

总线循环任务

总线循环任务是 I/O 驱动程序在其上下文中执行的 IEC 任务。一些 I/O 驱动程序使用多个任务:通常一个实时关键任务(具有高优先级),用于传输 I/O 数据,另一个具有低优先级的任务用于评估诊断和执行非循环服务等任务的总线系统。

对于实时关键总线系统,必须确保在此总线任务的上下文中不会执行任何操作,因为执行时间会中断总线时钟。

可以在 I/O 驱动设备的 I/O 映射对话框中配置总线任务。请注意,默认情况下会继承父设备的设置。如果此设备是 PLC,则其 PLC 设置适用于总线循环任务。

重要

如果未设置上述设置,则使用循环时间最短的任务。这样,非实时 I/O 驱动程序可能会在实时关键驱动程序的任务上下文中意外执行,从而中断其通信。要诊断这些通信问题,建议检查任务监控。

有关更多信息,请参阅: 选项卡:PLC 设置

I/O 映射

I/O 驱动程序的一个基本功能是更新 I/O 映射。这意味着将总线系统的 I/O 数据映射到 IEC 应用程序的变量(反之亦然)。

输入/输出数据通过双向复制和转换操作从总线系统的内部存储器映像循环映射到分配给 %I 和 %Q 地址的 IEC 变量。

在 I/O 驱动程序内部,对于此 I/O 映像使用符号名称还是对 %I 和 %Q 地址的“直接”访问没有区别。为了应用程序的可维护性,建议使用有意义的变量名称(例如:变量“TemperatureReactor”而不是“%IW117”访问)。

. I/O 映射的更新可以设置为 始终更新变量 (全球在 PLC 设置 或单独为 I/O 映射对话框中的每个设备):
  • 禁用:

    仅映射应用程序中使用的 I/O 数据。

    这可以通过避免复制操作来提高性能,但如果 I/O 映射对话框中的 I/O 数据未更新(这些值随后变灰),则可能会导致混乱。建议对已完成开发的应用程序进行此设置。

  • 启用 1:

    所有数据均已更新。

  • 启用 2:

    重要

    此选项的可用性取决于设备描述。

    注意:仅用于特殊情况下的生产用途。

    结果,可能会出现不一致的 I/O 数据,因为总线周期任务读取/写入此数据,而应用程序代码在其他任务中使用它。

有关更多信息,请参阅: 选项卡:<设备名称> I/O 映射

I/O 数据的一致性

编程系统允许 IEC 应用程序使用并行执行的多个任务(用于可视化、现场总线或其他 POU)。应用程序代码可以通过映射的 IEC 变量从这些任务的上下文中访问 I/O 数据。通过从不同的任务访问相同的数据,可能会出现不一致或损坏的数据(例如,由于写入访问中断)。

I/O 驱动程序通过为执行任务周期的每个任务提供所有使用的 I/O 数据的一致映射(可以说是快照)来确保数据一致性。

因此,像以下示例中的代码不会导致问题:(注意“DIV by ZERO”)

IF(inputData <> 0) THEN              // inputData is mapped to %I
    x := y / inputData;              // This will never result in DIV_BY_ZERO Exception
END_IF                               // inputData is not updated by bus cycle during execution of POU

重要

随着 始终更新变量 选项设置为 启用 2 – 始终处于总线循环任务中,这个机制被覆盖了。因此,应用程序代码必须考虑到这一点。

服务

除了基本功能外,一些 I/O 驱动程序还提供可以从 IDE 调用的服务,例如设备扫描功能或设备地址设置。

一般建议

. 设置:
  • PLC 设置_cds_icon_checked.png 停止中的 I/O 更新:

    即使应用程序停止,总线周期也会继续,例如当应用程序处于调试断点时。通过这种方式,与现场设备的通信得以保持并且可以立即继续而不会中断。

  • PLC 设置始终更新变量 被设定为 启用 1 – 如果未在任何任务中使用,则使用总线循环任务

    在应用程序的开发过程中,查看所有 I/O 数据的值很有用。

. 任务配置:
  • 特别是对于 Profinet、EtherCAT 或 CAN 等实时关键现场总线系统,它们依赖于维持精确的发送/接收时钟,建议使用具有高优先级的单独总线循环任务。对于不太实时关键的任务(例如,可视化),应选择比总线循环任务低得多的优先级。

  • 为了以尽可能小的偏移量实现最大的 I/O 吞吐量,可以在现场总线系统的总线任务中执行单独的 POU。但是,这些必须满足实时性要求:例如,不能执行文件访问或阻塞套接字函数,而只能执行输出数据的计算。

多个 I/O 驱动程序和任务(故障排除)

如果必须同步来自多个任务以及可能跨多个 I/O 驱动程序实例的 I/O 数据的一致访问,则在某些情况下可能会在总线和应用程序任务之间发生不希望的相互干扰。

例如,当一般系统负载较高或实时关键现场总线系统的 I/O 数据与慢速阻塞本地总线系统的 I/O 数据一起用于同一任务时,就会出现这种情况.

如果使用特别实时关键的现场总线(EtherCAT、Profinet、CAN)发生意外的通信干扰,则应首先检查任务监控是否存在周期时间中的非常大的抖动或异常值(最大值与平均值相比)价值)。任务列表提供了有关在不同任务中使用 I/O 数据的详细信息。

可以避免在同一个任务中使用来自不同总线系统的 I/O 数据,或者减少 I/O 任务的数量。

有关更多信息,请参阅: 标签:任务部署