安全运行时在日志文件中显示计时错误。
准备工作:
你正在运行一个 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 ]
旗帜(短/长) | 描述 |
---|---|
| 返回系统上可用的网络接口列表,其中 |
| 查询接口并返回以下信息:
|
| 接收或读取一定数量的 |
| 防止将地址(主机地址、端口号等)转换为名称 |
| 以 ASCII 格式输出每个数据包(减去其链路级标头) |
| 解析时,除了每个数据包的标头外,还会以十六进制打印每个数据包的数据(减去链路级标头) |
| 从每个数据包中使用 |
| Writes the raw data packets to a file instead of analyzing and printing them |
| 防止在每个转储行中输出时间戳 |
| 返回每条转储行中的时间戳,以自 1970 年 1 月 1 日 00:00:00(UTC)以来的秒数以及自该时间以来的几分之一秒为秒 |
| 打印增量(微秒或纳秒)分辨率,具体取决于 |
| 每条转储线上打印一个时间戳,如小时、分钟、秒和午夜以来的几分之一秒。输出前面有日期 |
| 输出其他信息(详细) |
追踪包裹
在控制台上简单捕获和输出:
> 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 跟踪文件的默认文件扩展名。)
> sudo tcpdump -i eno1 -w myfirsttrace.cap -s 200 udp port 60000
调查/分析
在安全控制 SL 的主机(时间提供者通信的接收端)上记录跟踪,如上面的示例所示。
然后使用 Wireshark 打开 *.pcap 文件。它看起来像这样:
您会注意到,包裹的发送间隔通常为 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 (发送时间戳)。