我正在開發一個應用程序來讀取Beckhoff PLC的值。 PLC有一個.net庫,我可以用它來連接我的程序和PLC。用C#讀取遞歸集合
PLC上的每個變量都是TcAdsSymbolInfo類型的符號。這個類有幾個成員,其中一個是TcAdsSymbolInfo的集合,等等......你可以看到這是怎麼回事。基本上我有一個樹形結構,有很多符號,每個符號都可以有子符號。 Beckhoff
我想要做的是,爲每個符號讀取所有的子符號,這個工作如果我手工做,只是嘗試看第一個子符號級別,但我真的需要所有這些。
我試圖創建接收一個TcAdsSymbolInfo和結束通話本身,而是這將引發一個堆棧溢出異常
private void ReadSubsymbols(TcAdsSymbolInfo t)
{
if (t.SubSymbolCount > 0)
{
foreach (TcAdsSymbolInfo subsymbol in t.SubSymbols)
{
if (!symbols.ContainsKey(subsymbol.Name))
symbols.Add(subsymbol.Name, subsymbol);
try
{
ReadSubsymbols(subsymbol);
}
catch (Exception Ex)
{
Console.WriteLine(Ex.ToString() + " - " + Ex.Message);
}
}
}
}
符號就是在那裏我存儲符號名稱和符號字典的遞歸函數本身。
請嘗試從PLC部分摘要,因爲我認爲這只是一個純粹的邏輯/編程問題。在與PLC進行通信或讀取和寫入數值時,我沒有任何問題。唯一的問題是閱讀這個結構。
我可以使用一段時間或任何其他類型的循環做任何seguegestion?任何不會拋出異常的東西?
在此先感謝。
你或許應該尋找樹的遍歷算法。 – Magus