コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
 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);
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }