首页 > 解决方案 > 如何在 TwinCAT 中设置 1 个隔离核心

问题描述

我必须在 TwinCAT 中从 ac# 代码中设置一个独立的内核。在线文档中显示了如何设置核心数量、基准时间、核心限制和延迟警告,但没有关于隔离核心的数量。

public void AssignCPUCores()
{
    ITcSysManager3 systemManager = project.Object;
    ITcSmTreeItem realtimeSettings = systemManager.LookupTreeItem("TIRS");
    string xml = null;
    MemoryStream stream = new MemoryStream();
    StringWriter stringWriter = new StringWriter();
    using (XmlWriter writer = XmlTextWriter.Create(stringWriter))
    {
        writer.WriteStartElement("TreeItem");
        writer.WriteStartElement("RTimeSetDef");
        writer.WriteElementString("MaxCPUs", "4"); //  looking at what changes in TwinCAT by changing this number, 
                                                 // I found out that this number is the number of shared cores 
        
        string affinityString = string.Format("#x{0}", ((ulong)CpuAffinity.MaskDual).ToString("x16"));
                        //the MaskDual/MaskQuad/MaskSingle defines how many boxes will be checked (i.e. how many cores will be used)

        writer.WriteElementString("Affinity", affinityString);
        writer.WriteStartElement("CPUs");

        //    WriteCpuProperties(writer, int coreId , int loadLimit, int baseTime, latencyWarning)
        WriteCpuProperties(writer, 0, 90, 1000, 0);

        writer.WriteEndElement();     // CPUs     
        writer.WriteEndElement();     // RTimeSetDef     
        writer.WriteEndElement();     // TreeItem
    }
    xml = stringWriter.ToString();
    realtimeSettings.ConsumeXml(xml);  //here modifies are applied
    ITcSmTreeItem tasks = systemManager.LookupTreeItem("TIRT");
    
    SetTaskProperties(tasks, CpuAffinity.CPU1);
}

似乎没有办法设置隔离核心。有没有可能?目标是获得这样的东西:

在此处输入图像描述

但是抛出 c# 代码,隔离核心的数量为 0,并且所有核心在括号之间都有(共享)。

标签: c#cputwincat

解决方案


我不认为这是可能的。通常,当隔离核心的数量发生变化时,需要重新启动才能生效。如果您可以在不重新启动的情况下使用您的代码执行此操作,我会感到惊讶。


推荐阅读