private static void SetupTask(ITcSysManager sysManager, IReadOnlyCollection <ITcSmTreeItem> autds) { var tasks = sysManager.LookupTreeItem("TIRT"); var task1 = tasks.CreateChild("Task 1", 0, null); var doc = new XmlDocument(); var xml = task1.ProduceXml(false); doc.LoadXml(xml); doc.SelectSingleNode("TreeItem/TaskDef/CycleTime").InnerText = _cycleTicks == "manual" ? _taskCycleTime : (TaskCycleTimeBase * int.Parse(_cycleTicks)).ToString(); task1.ConsumeXml(doc.OuterXml); var task1Out = sysManager.LookupTreeItem("TIRT^Task 1^Outputs"); // make global header for (var i = 0; i < HeadSize; i++) { var name = $"header[{i}]"; task1Out.CreateChild(name, -1, null, "WORD"); } // make gain body for (var id = 0; id < autds.Count; id++) { for (var i = 0; i < BodySize; i++) { var name = $"gbody[{id}][{i}]"; task1Out.CreateChild(name, -1, null, "WORD"); } } var task1In = sysManager.LookupTreeItem("TIRT^Task 1^Inputs"); for (var id = 0; id < autds.Count; id++) { var name = $"input[{id}]"; task1In.CreateChild(name, -1, null, "WORD"); } // connect links for (var id = 0; id < autds.Count; id++) { for (var i = 0; i < HeadSize; i++) { var source = $"TIRT^Task 1^Outputs^header[{i}]"; var destination = $"TIID^EtherCAT Master^Box {id + 1} (AUTD)^RxPdo1^data[{i}]"; sysManager.LinkVariables(source, destination); } for (var i = 0; i < BodySize; i++) { var source = $"TIRT^Task 1^Outputs^gbody[{id}][{i}]"; var destination = $"TIID^EtherCAT Master^Box {id + 1} (AUTD)^RxPdo0^data[{i}]"; sysManager.LinkVariables(source, destination); } { var source = $"TIRT^Task 1^Inputs^input[{id}]"; var destination = $"TIID^EtherCAT Master^Box {id + 1} (AUTD)^TxPdo^dummy"; sysManager.LinkVariables(source, destination); } } }
public static bool SearchForItem(string itemPath, ref ITcSysManager sysManager, ref ITcSmTreeItem item) { try { item = sysManager.LookupTreeItem(itemPath); Console.WriteLine(itemPath + " item found."); } catch (Exception e) { Console.WriteLine(itemPath + " item not found. Exiting on Enter."); Console.Read(); Environment.Exit(-1); } return(true); }
private static void AddRoute(ITcSysManager sysManager, IPAddress ipAddr) { var routeConfiguration = sysManager.LookupTreeItem("TIRR"); var addProjectRouteIp = @"<TreeItem> <RoutePrj> <AddProjectRoute> <Name>" + ipAddr + @"</Name> <NetId>" + ipAddr + @".1.1" + @"</NetId> <IpAddr>" + ipAddr + @"</IpAddr> </AddProjectRoute> </RoutePrj> </TreeItem>"; routeConfiguration.ConsumeXml(addProjectRouteIp); }
public static void AssignCpuCores(ITcSysManager sysManager) { var realtimeSettings = sysManager.LookupTreeItem("TIRS"); var stringWriter = new StringWriter(); using (var writer = XmlWriter.Create(stringWriter)) { writer.WriteStartElement("TreeItem"); writer.WriteStartElement("RTimeSetDef"); writer.WriteElementString("MaxCPUs", "1"); writer.WriteStartElement("CPUs"); WriteCpuProperties(writer, 0); writer.WriteEndElement(); // CPUs writer.WriteEndElement(); // RTimeSetDef writer.WriteEndElement(); // TreeItem } var xml = stringWriter.ToString(); realtimeSettings.ConsumeXml(xml); }
private static List <ITcSmTreeItem> ScanAutDs(ITcSysManager sysManager) { var devices = (ITcSmTreeItem3)sysManager.LookupTreeItem("TIID"); var doc = new XmlDocument(); var xml = devices.ProduceXml(false); doc.LoadXml(xml); var nodes = doc.SelectNodes("TreeItem/DeviceGrpDef/FoundDevices/Device"); var ethernetNodes = (from XmlNode node in nodes let typeNode = node.SelectSingleNode("ItemSubType") let subType = int.Parse(typeNode.InnerText) where subType == (int)DeviceType.EtherCAT_AutomationProtocol || subType == (int)DeviceType.EtherCAT_DirectMode || subType == (int)DeviceType.EtherCAT_DirectModeV210 select node).ToList(); if (ethernetNodes.Count == 0) { throw new Exception("No devices were found. Check if TwinCAT3 is in Config Mode"); } Console.WriteLine("Scan found a RT-compatible Ethernet device."); var device = (ITcSmTreeItem3)devices.CreateChild("EtherCAT Master", (int)DeviceType.EtherCAT_DirectMode, null); // Taking only the first found Ethernet Adapter var ethernetNode = ethernetNodes[0]; var addressInfoNode = ethernetNode.SelectSingleNode("AddressInfo"); addressInfoNode.SelectSingleNode("Pnp/DeviceDesc").InnerText = "TwincatEthernetDevice"; // Set the Address Info var xml2 = $"<TreeItem><DeviceDef>{addressInfoNode.OuterXml}</DeviceDef></TreeItem>"; device.ConsumeXml(xml2); const string scanXml = "<TreeItem><DeviceDef><ScanBoxes>1</ScanBoxes></DeviceDef></TreeItem>"; device.ConsumeXml(scanXml); var autds = new List <ITcSmTreeItem>(); foreach (ITcSmTreeItem box in device) { if (box.ItemSubTypeName != "AUTD") { continue; } var bdoc = new XmlDocument(); var bxml = box.ProduceXml(false); bdoc.LoadXml(bxml); // set DC var dcOpmodes = bdoc.SelectNodes("TreeItem/EtherCAT/Slave/DC/OpMode"); foreach (XmlNode item in dcOpmodes) { if (item.SelectSingleNode("Name")?.InnerText == "DC") { var attr = bdoc.CreateAttribute("Selected"); attr.Value = "true"; item.Attributes?.SetNamedItem(attr); item.SelectSingleNode("CycleTimeSync0").InnerText = _cycleTicks == "manual" ? _sync0CycleTime : (Sync0CycleTimeBase * int.Parse(_cycleTicks)).ToString(); attr = bdoc.CreateAttribute("Factor"); attr.Value = "0"; item.Attributes?.SetNamedItem(attr); item.SelectSingleNode("CycleTimeSync0").Attributes?.SetNamedItem(attr); } else { item.Attributes?.RemoveAll(); } } box.ConsumeXml(bdoc.OuterXml); autds.Add(box); } Console.WriteLine($"{autds.Count} AUTDs are found and added."); return(autds); }