数据一致性与 CODESYS 沟通经理
重要
本页上的信息仅适用于通过以下方式发布的对象、数据和方法 CODESYS 通信管理器编辑器(IEC 符号集、OPC UA 信息模型和符号配置),而不是通常 OPC UA 服务器的编辑。
OPC UA 服务器是一项在 PLC 后台运行的服务。OPC UA 服务器的任务优先级低于 IEC 应用程序的任务。由于多任务和多核系统,OPC UA 服务器的任务可能会被其他任务中断。IEC 任务还可能与 OPC UA 服务器的任务并行运行,这可能导致读取或编辑数据时出现数据不一致的情况。本章旨在概述哪些方面可以保证一致性,哪些地方不能保证。
数据访问(读取、写入和示例)
保证一致的数据
所有大小不超过 8 字节的标量数据类型均一致地从 IEC 数据读取和写入。
无法保证一致性的数据
字符串
字符串是逐个字符读取和写入的。因此,无法保证读取或写入字符串的一致性。
数组
读取或写入数组是逐个元素处理的。使用数组基本数据类型的基本读取或写入逻辑。如果可以一致地处理基本元素,则所有数组元素也将保持一致。但是,不能保证已经处理的数组元素在整个数组的处理过程中没有变化。
结构化数据类型 (STRUCT 还有 FB)
读取或写入结构或功能块的成员是逐个元素完成的。这使用成员基本数据类型的基本读写逻辑。如果可以一致地处理基本元素,则成员也将保持一致。但是,不能保证在处理功能块的完整结构时已经处理的成员没有发生变化。
组合
如果数组和结构合并,则上述规则适用于结构成员或数组元素。使用数组元素或结构成员的基本数据类型的读写逻辑。这会导致以下一般行为:
简单数据类型的值(除了
STRING)和WSTRING)无论放在何处,都将始终保持一致。STRING和WSTRING不能保证一致性。不能保证结构和数组的一致性。但是,如果内部的单一值属于简单数据类型,则它们是一致的。
方法调用
输入和输出参数(无论数据类型、数组或结构如何)一致地从 OPC UA 服务器传输到方法调用,或者从方法调用的输出传回到 OPC UA 服务器。这是通过使用执行方法调用的线程的堆栈内存来保证的。但是,不能保证从方法代码到IEC应用程序的数据访问是一致的。由于这些方法与 IEC 应用程序任务同时运行,因此可以使用常规机制来同步对数据的访问(例如互斥锁、信号量或双缓冲区