TwinCAT OPC UA:通过直接访问单独设置发布速率
TwinCAT OPC UA服务器分变量设置不同发布速率的实现方案
我已经配置了TwinCAT OPC UA服务器,需要对约400字节的关键变量实现1000Hz的高速循环数据交换。但如果在XML配置中为所有变量设置1ms发布速率,会导致CPU占用100%且通信失效。请问能否通过变量属性(如下方示例代码)为不同变量单独设置发布速率?
示例代码(ST变量定义)
{attribute 'OPC.UA.DA' := '1'} //{datarate := 1000Hz} CriticalData : Struct_of_CriticalData; //{datarate := 10Hz} UncriticalData : Struct_of_UncriticalData; {attribute 'OPC.UA.DA' := '0'}
当前OPC UA服务器XML配置
<?xml version="1.0"?> <OpcServerConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <UaServerConfig> <MaxRequestAge>0</MaxRequestAge> <MaxSessionCount>100</MaxSessionCount> <MinSessionTimeout>10000</MinSessionTimeout> <MaxSessionTimeout>3600000</MaxSessionTimeout> <MaxBrowseContinuationPoints>0</MaxBrowseContinuationPoints> <MaxHistoryContinuationPoints>0</MaxHistoryContinuationPoints> <MinPublishingInterval>1</MinPublishingInterval> <MaxPublishingInterval>0</MaxPublishingInterval> <MinKeepAliveInterval>5000</MinKeepAliveInterval> <MinSubscriptionLifetime>10000</MinSubscriptionLifetime> <MaxSubscriptionLifetime>0</MaxSubscriptionLifetime> <MaxRetransmitionQueueSize>10</MaxRetransmitionQueueSize> <MaxNotificationsPerPublish>0</MaxNotificationsPerPublish> <MaxDataQueueSize>100</MaxDataQueueSize> <MaxEventQueueSize>10000</MaxEventQueueSize> <MaxSubscriptionCount>0</MaxSubscriptionCount> <MaxMonitoredItemCount>0</MaxMonitoredItemCount> <MaxMonitoredItemPerSubscriptionCount>0</MaxMonitoredItemPerSubscriptionCount> <AvailableLocaleIds> <LocaleId>en</LocaleId> </AvailableLocaleIds> <AvailableServerProfiles> <ServerProfileUri>http://opcfoundation.org/UAProfile/Server/StandardUA</ServerProfileUri> <ServerProfileUri>http://opcfoundation.org/UAProfile/Server/DataAccess</ServerProfileUri> <ServerProfileUri>http://opcfoundation.org/UAProfile/Server/Methods</ServerProfileUri> <ServerProfileUri>http://opcfoundation.org/UAProfile/Server/EventSubscription</ServerProfileUri> </AvailableServerProfiles> <IsAuditActivated>false</IsAuditActivated> <RedundancySettings> <RedundancySupport>None</RedundancySupport> </RedundancySettings> <MinSupportedSampleRate>0</MinSupportedSampleRate> <AvailableSamplingRates> <SamplingRate>1</SamplingRate> <SamplingRate>2</SamplingRate> <SamplingRate>3</SamplingRate> <SamplingRate>4</SamplingRate> <SamplingRate>5</SamplingRate> <SamplingRate>6</SamplingRate> <SamplingRate>7</SamplingRate> <SamplingRate>8</SamplingRate> <SamplingRate>9</SamplingRate> <SamplingRate>10</SamplingRate> <SamplingRate>15</SamplingRate> <SamplingRate>20</SamplingRate> <SamplingRate>25</SamplingRate> <SamplingRate>30</SamplingRate> <SamplingRate>35</SamplingRate> <SamplingRate>40</SamplingRate> <SamplingRate>45</SamplingRate> <SamplingRate>50</SamplingRate> <SamplingRate>60</SamplingRate> <SamplingRate>70</SamplingRate> <SamplingRate>80</SamplingRate> <SamplingRate>90</SamplingRate> <SamplingRate>100</SamplingRate> <SamplingRate>150</SamplingRate> <SamplingRate>200</SamplingRate> <SamplingRate>250</SamplingRate> <SamplingRate>300</SamplingRate> <SamplingRate>350</SamplingRate> <SamplingRate>400</SamplingRate> <SamplingRate>450</SamplingRate> <SamplingRate>500</SamplingRate> <SamplingRate>550</SamplingRate> <SamplingRate>600</SamplingRate> <SamplingRate>650</SamplingRate> <SamplingRate>700</SamplingRate> <SamplingRate>750</SamplingRate> <SamplingRate>800</SamplingRate> <SamplingRate>850</SamplingRate> <SamplingRate>900</SamplingRate> <SamplingRate>950</SamplingRate> <SamplingRate>1000</SamplingRate> <SamplingRate>2000</SamplingRate> <SamplingRate>5000</SamplingRate> <SamplingRate>10000</SamplingRate> </AvailableSamplingRates> </OpcServerConfig>
解决方案
可以通过TwinCAT变量属性配置结合OPC UA订阅分组实现差异化数据更新,具体操作如下:
为变量配置采样速率属性
TwinCAT支持使用{attribute 'OPC.UA.SamplingInterval' := 'X'}(X为毫秒数)为单个变量指定采样间隔,替代你示例中注释的自定义格式。注意取值必须在XML配置的AvailableSamplingRates列表内,你的配置已包含1和100,符合需求。修正后的ST代码:{attribute 'OPC.UA.DA' := '1'} {attribute 'OPC.UA.SamplingInterval' := '1'} // 1ms采样,对应1000Hz CriticalData : Struct_of_CriticalData; {attribute 'OPC.UA.SamplingInterval' := '100'} // 100ms采样,对应10Hz UncriticalData : Struct_of_UncriticalData; {attribute 'OPC.UA.DA' := '0'}客户端创建对应发布间隔的订阅
服务器端的采样速率配置需要配合客户端的订阅设置才能生效:- 为
CriticalData创建发布间隔为1ms的订阅 - 为
UncriticalData创建发布间隔为100ms的订阅
这样服务器会根据订阅的发布间隔分配资源,避免全变量高速更新导致的CPU过载。
- 为
XML配置优化(可选)
现有配置的MinPublishingInterval已设为1ms,满足高速需求,但可调整MaxDataQueueSize至200,提升高速数据的缓存能力,避免数据溢出:<MaxDataQueueSize>200</MaxDataQueueSize>
补充说明
- TwinCAT OPC UA服务器不会自动为变量分配不同发布速率,必须结合客户端订阅配置实现差异化更新
- 400字节关键变量在1000Hz下的带宽需求约为3.2Mbps,需确保网络带宽充足,避免通信瓶颈
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

