我对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的模式吗?
答案 0 :(得分:1)
您使用PLC程序并将变量链接到任务,对吗?
您能否告诉我们您如何配置任务?我猜twincat中的任务循环时间太长了。如果您没有更改它,则默认值为1ms左右。
当您的任务较慢时,您在方法AddDeviceNotification中用作参数的循环时间对此没有影响。您需要先在twincat中配置任务。
另外两个信息:
如果您在本地运行应用程序,这应该足够了(不需要NetID)。
pAdsClient.Connect(pPort);
我会使用长度实现AdsStream。一个例子 如果你的价值是一个词:
private AdsStream pDataStream = new AdsStream(sizeof(Int16));
我希望我能提供帮助。