我正在开发一个应用程序来读取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