我只对 TwinCAT3 有一些经验,但是库是一样的。
在 TwinCAT3 中,我们区分了模式RUN和CONFIG。要在两种模式之间切换,您将需要 TCatSysManagerLib,这是真的。但是(尤其是对于 TwinCAT3)没有切换回CONFIG模式的方法(但是……但是 Beckhoff 正在努力)。
如果你想这样做,你需要通过 AmsPort.SystemService 是 10000。
下面是一个如何从RUN模式切换到CONFIG模式的示例:
public void setConfigMode()
{
TcAdsClient client = new TcAdsClient();
StateInfo mode = new StateInfo();
client.Connect((int)AmsPort.SystemService);
mode.AdsState = AdsState.Reconfig;
client.WriteControl(mode);
client.Dispose();
}
而这里是从CONFIG到RUN模式的相反方式(使用 TCatSysManagerLib):--> 仅适用于 TwinCAT3
public void setRunMode()
{
// _solution_path, _solution_name must be replaced by your solution path and solution name
Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
EnvDTE80.DTE2 dte2 = (EnvDTE80.DTE2)System.Activator.CreateInstance(t);
dte2.MainWindow.Visible = false; //keep TwinCAT window closed
Solution4 solution4 = (Solution4)dte2.Solution;
EnvDTE.Project project = null;
solution4.Open(Path.Combine(_solution_path, _solution_name + ".sln").ToString());
project = (EnvDTE.Project)solution4.Projects.Item(1);
ITcSysManager5 sysmanager5 = (ITcSysManager5)project.Object;
sysmanager5.StartRestartTwinCAT();
dte2.Quit();
}
或(我没试过):
public void setRunMode()
{
TcAdsClient client = new TcAdsClient();
StateInfo mode = new StateInfo();
client.Connect((int)AmsPort.SystemService);
mode.AdsState = client.ReadState().AdsState;
mode.AdsState = AdsState.Reset;
client.WriteControl(mode);
client.Dispose();
}