2015-04-28 16 views
2

Beckhoff ADS存在問題。我創建了一個簡單的項目:Beckhoff:AddDeviceNotification

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; 

所以,whene MAIN.SyncPLCtoHMI的變化,我應該收到通知,但這個MAIN.SyncPLCtoHMI改變每20ms(這是正確的,我想這一次),但一些windows時間塊這個通知...

我該怎麼辦?,有一個替代模式設置Windows或ADS?

回答

1

您使用PLC程序並將變量鏈接到任務,對嗎?

你能告訴我們你是如何配置你的任務嗎?我猜twincat中的任務週期時間太長了。如果你沒有改變它,默認值是大約1ms。

當您的任務較慢時,您在方法AddDeviceNotification中用作參數的循環時間對此沒有影響。您需要首先配置任務。

另外兩個信息:

如果你運行你的應用程序在本地,這應該是足夠的(不需要的NetID)。

我會instanciate AdsStream與長度。一個例子 如果你的價值是一個字:

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

我希望我能幫上忙。