【发布时间】:2020-12-11 22:13:29
【问题描述】:
我必须通过 c# 代码在 TwinCAT 中设置一个独立的内核。在线文档中显示了如何设置核心数量、基准时间、核心限制和延迟警告,但没有关于隔离核心的数量。
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,并且所有核心在括号之间都有(共享)。
【问题讨论】: