Skip to main content

安全运行时在日志文件中显示计时错误。

准备工作:

你正在运行一个 CODESYS Safe Control SL 或 CODESYS Virtual Safe Control SL 与 CODESYS Safe Time Provider

故障排除

如果您遇到上报的问题 CODESYS Safe Control SL 运行时环境并提及时序问题(来自 CmpSIL3 组件),那么你可能会在安全时间网络中遇到计时问题,你应该对此进行调查。

. 日志消息可能如下所示:
  • #### Exception: ID: 0x40000066 <p0>0xb633</p0> <p1>0xbcdd</p1> <p2>0xbce1</p2> <p3>0xb2fd</p3> <p4>0x0</p4>

. 异常错误具有以下含义:
  • 0x40000065: 异常频道 x:周期时间本地时间戳的真实性检查

  • 0x40000066: 异常渠道 x:对循环时间的远程时间戳进行可信性检查

  • 0x40000067: 异常频道 x:将远程时间戳与本地时间戳进行可信性检查

注意

安全时间网络(之间 CODESYS Safe Time Provider 还有 CODESYS Safe Control 运行时环境)对稳定性和实时性的要求与现场总线网络(例如 EtherCAT 或 Profinet)相同。

使用追踪 tcpdump

您可以使用 Linux 命令行轻松创建跟踪 tcpdump 工具。如果您已经熟悉 Wireshark 或硬件跟踪设备,则也可以使用它来创建跟踪

. 你需要遵循的基本步骤:
  • 确定要跟踪的网络适配器。

  • 找出要跟踪的内容(内容、包类型、日志等),以缩小跟踪范围。

有用的命令

安装 tcpdump (取决于您的发行版/软件包管理)

  • 例如,基于 Debian/Ubuntu 的 “apt”: sudo apt install tcpdump

  • 基于红帽的 “YUM/DNF”: sudo yum install tcpdump

你可以看到所有可用的网络适配器 tcpdump 可以监控:

> tcpdump -D 
1.eno1 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]

注意

可以运行 tcpdump 作为普通用户。如果你想这样做,请阅读 tcpdump 更多细节的文档。

tcpdump 命令行参数

有关所有可能命令的详细信息 tcpdump 可以在 tcpdump 手册页: https://www.tcpdump.org/manpages/tcpdump.1.html

或者打电话 tcpdump:

> tcpdump --help 

tcpdump version 4.99.3
libpcap version 1.10.3 (with TPACKET_V3)
OpenSSL 3.0.15 3 Sep 2024
Usage: tcpdump [-AbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [--count]
                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
                [ -i interface ] [ --immediate-mode ] [ -j tstamptype ]
                [ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]
                [ -r file ] [ -s snaplen ] [ -T type ] [ --version ]
                [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
                [ --time-stamp-precision precision ] [ --micro ] [ --nano ]
                [ -z postrotate-command ] [ -Z user ] [ expression ]
9. 最重要的标志和过滤器:

旗帜(短/长)

描述

-D

--list-interfaces

返回系统上可用的网络接口列表,其中 tcpdump 命令可以捕获数据包

-i <interface>

--interface <interface>

查询接口并返回以下信息:

  • 链路层类型列表

  • 时间戳类型列表

  • 编译过滤器表达式的结果

-c <Count>

接收或读取一定数量的 <count> 数据包后终止查询

-n

防止将地址(主机地址、端口号等)转换为名称

-A

以 ASCII 格式输出每个数据包(减去其链路级标头)

-x

解析时,除了每个数据包的标头外,还会以十六进制打印每个数据包的数据(减去链路级标头)

-s <snaplen>

--snapshot-length=<snaplen>

从每个数据包中使用 <snaplen> 字节的数据,而不是默认值 262144 字节

-w <file>

Writes the raw data packets to a file instead of analyzing and printing them

-t

防止在每个转储行中输出时间戳

-tt

返回每条转储行中的时间戳,以自 1970 年 1 月 1 日 00:00:00(UTC)以来的秒数以及自该时间以来的几分之一秒为秒

-ttt

打印增量(微秒或纳秒)分辨率,具体取决于 --time-stamp-precision 选项)在每条转储行的当前行和上一行之间。默认设置是以微秒为单位的分辨率

-tttt

每条转储线上打印一个时间戳,如小时、分钟、秒和午夜以来的几分之一秒。输出前面有日期

-v

输出其他信息(详细)



追踪包裹

在控制台上简单捕获和输出:

> sudo tcpdump -i <interfacename>

# e.g. with interface "eno1":
> sudo tcpdump -i eno1

捕获并输出为兼容 WireShark 的文件

> sudo tcpdump -i <interfacename> -w <file>
 
# e.g.
> sudo tcpdump -i eno1 -w myfirsttrace.pcap

然后是文件 myfirsttrace.pcap 可以在 Wireshark 中打开。.pcap 是 Wireshark 跟踪文件的默认文件扩展名。)

5. 示例
> sudo tcpdump -i eno1 -w myfirsttrace.cap -s 200 udp port 60000


调查/分析

. 创建跟踪后,必须对其进行分析。这可以通过 tcpdump 来完成,也可以使用 Wireshark 以图形方式
  1. 在安全控制 SL 的主机(时间提供者通信的接收端)上记录跟踪,如上面的示例所示。

  2. 然后使用 Wireshark 打开 *.pcap 文件。它看起来像这样:

    _rtsl_img_iec_wireshark.png

    您会注意到,包裹的发送间隔通常为 1 毫秒(包裹之间的时差)。(参见数据包编号 58 及以下内容。)

    一种典型的问题情况 CODESYS Safe Control SL 将发出异常/问题,因为在编号为 74 的数据包中可以看到定时:此数据包是在前一个数据包之后大约 2 毫秒收到的,因此延迟约为 1 毫秒。这是不可接受的 CODESYS Safe Control SL 是一种可靠且具有实时性的时间戳。

    . 减少延迟的行动
    • 找出问题在接收方或发送方是否可见。你必须同时考虑接收方 (CODESYS Safe Control 主机)和发送方(CODESYS Safe Time Provider 主机)。

    • 总体而言,提高这种时间戳通信的实时能力和稳健性。为此,您可以从该网络中移除其他干扰通信和负载(仅用于安全时间戳

    • 通过配置相应 IRQ(网络驱动程序)的进程优先级,提高发送和接收性能。

    • 如果您无法进一步改进,并且您的安全流程允许,则可以延长循环时间 CODESYS Safe Time Provider (发送时间戳)。