TwinCAT 3.0 Automation Interface:获取用于广播搜索的本地 netId

TwinCAT 3.0 Automation Interface: get local netId for broadcast search

我想使用 Twincat 3 自动化接口进行广播搜索,这要求目标 netid 为 "Local"。 我知道我可以用 ITcSysManager2::SetTargetNetId 设置目标 netid,但我不知道如何找到我本地系统的 netId。

我遇到了完全相同的问题(需要使用自动化界面进行广播搜索)。我现在无法访问该代码,但我记得它,因为我不需要本地 NetId 来进行广播搜索,或者我使用“127.0.0.1.1.1”作为 NetId。

如果您在触发广播搜索之前更改了目标 NetId,请使用来自 ADS API 的 AmsNetId.Local 属性 将其改回您本地的 NetId(使用 TwinCAT.Ads;)

systemManager.SetTargetNetId(AmsNetId.Local.ToString());    
ITcSmTreeItem routeConfiguration = systemManager.LookupTreeItem("TIRR"); // Route Settings

 // The following XML string triggers a Broadcast Search if consumed on TIRR node
string xml = 
    @"<TreeItem>
        <RoutePrj>
            <TargetList>
                <BroadcastSearch>true</BroadcastSearch>
            </TargetList>
        </RoutePrj>
    </TreeItem>";

routeConfiguration.ConsumeXml(xml); // Trigger Broadcast Search
string producedXml = routeConfiguration.ProduceXml(); // Get the result

因为我找不到通过自动化接口获取本地 AmsNetId 的方法 API 调用这里是我想出的解决方法:

  var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Beckhoff\TwinCAT\System");
  var localNetId = string.Join(".", (byte[])key.GetValue("AmsNetId"));