Beckhoff:AddDeviceNotification

时间:2015-04-28 14:53:54

标签: c# twincat

我对Beckhoff ADS有疑问。我创建了一个简单的项目:

private const int CONST_num_notification = 1;
private const int CONST_ms_cycleTime = 1;   //ms
private const int CONST_ms_maxDelay = 3000;   //ms

TcAdsClient pAdsClient;
pAdsClient = new TcAdsClient();
pAdsClient.Synchronize = false;
/******CONNECT*/
pAdsClient.Connect(pNetID, pPort);
/**************/   

pHConnect = new int[CONST_num_notification];
pDataStream = new AdsStream();      
pHConnect[0] = pAdsClient.AddDeviceNotification("MAIN.SyncPLCtoHMI", pDataStream, 0, 2, AdsTransMode.OnChange, CONST_ms_cycleTime, CONST_ms_maxDelay, null);   

pAdsClient.AdsNotification += pAdsClient_AdsNotification;

所以,当MAIN.SyncPLCtoHMI发生变化时,我应该收到一个通知,但是这个MAIN.SyncPLCtoHMI每20ms就会改变一次(这是正确的,我想要这次)但是Windows有时会阻止这个通知......

我该怎么办?,还有另一种设置Windows或ADS的模式吗?

1 个答案:

答案 0 :(得分:1)

您使用PLC程序并将变量链接到任务,对吗?

您能否告诉我们您如何配置任务?我猜twincat中的任务循环时间太长了。如果您没有更改它,则默认值为1ms左右。

当您的任务较慢时,您在方法AddDeviceNotification中用作参数的循环时间对此没有影响。您需要先在twincat中配置任务。

另外两个信息:

如果您在本地运行应用程序,这应该足够了(不需要NetID)。

pAdsClient.Connect(pPort);

我会使用长度实现AdsStream。一个例子 如果你的价值是一个词:

private AdsStream pDataStream = new AdsStream(sizeof(Int16));

我希望我能提供帮助。