2

我对 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 每 20 毫秒发生一次变化(这是正确的,我想要这次)但是 Windows 有时会阻止这个通知......

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

4

1 回答 1

1

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

你能告诉我们你是如何配置你的任务的吗?我猜 twincat 中的任务周期时间太大了。默认值是大约 1ms,如果你没有改变它。

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

还有两个信息:

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

pAdsClient.Connect(pPort);

我会用一个长度来实例化 AdsStream。如果您的值是 WORD 的示例:

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

我希望我能帮上忙。

于 2015-11-09T12:42:55.053 回答