没有 Visual Studio 的 TwinCAT 3.0 自动化接口?
TwinCAT 3.0 Automation Interface without Visual Studio?
我需要从 C# 应用程序 startup/shutdown TwinCAT 3.0。
正如 中友善的回答,我可以使用 TwinCAT Automation Interface。
虽然在 TC 2.0 中可以简单地实例化自动化接口:
var systemManager = new TcSysManager(); // missing method exception:
// no constructor without parameters defined
在 TC 3 中它给了我上面的运行时错误。
我似乎需要 Visual Studio 在我想使用自动化接口的 PC 上的实例。带自动化的平板电脑在一台机器上,没有安装VS。
是否可以使用自动化接口,或者以编程方式 startup/shutdown TC 3.0 而无需在计算机上安装 Visual Studio?
谢谢
下面的答案是关于启动和停止特定 PLC 实例的。要在 Config 和 运行 之间更改整个 TwinCAT 运行时,请连接到系统服务 ADS 端口(端口 10000)并将状态设置为 AdsState.Run
或 AdsState.Config
.
可以找到所有有效状态值 here. All the port values can be found here。
static void Main(string[] args)
{
//Create a new instance of class TcAdsClient
TcAdsClient tcClient = new TcAdsClient();
try
{
// Connect to TwinCAT System Service port 10000
tcClient.Connect(AmsPort.SystemService);
// Send desired state
tcClient.WriteControl(new StateInfo(AdsState.Config, tcClient.ReadState().DeviceState));
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
finally
{
tcClient.Dispose();
}
}
要以编程方式启动或停止 TwinCAT 运行时,您可以使用 ADS 命令将 AdsState 更改为 运行 或停止。 Beckhoff 为此提供了 C# 和 C++ 库。 C# 示例:
static void Main(string[] args)
{
//Create a new instance of class TcAdsClient
TcAdsClient tcClient = new TcAdsClient();
try
{
// Connect to local PLC - Runtime 1 - TwinCAT 3 Port=851
tcClient.Connect(851);
Console.WriteLine(" PLC Run\t[R]");
Console.WriteLine(" PLC Stop\t[S]");
Console.WriteLine("\r\nPlease choose \"Run\" or \"Stop\" and confirm with enter..");
string sInput = Console.ReadLine().ToLower();
//Process user input and apply chosen state
do{
switch (sInput)
{
case "r": tcClient.WriteControl(new StateInfo(AdsState.Run, tcClient.ReadState().DeviceState)); break;
case "s": tcClient.WriteControl(new StateInfo(AdsState.Stop, tcClient.ReadState().DeviceState)); break;
default: Console.WriteLine("Please choose \"Run\" or \"Stop\" and confirm with enter.."); sInput = Console.ReadLine().ToLower(); break;
}
} while (sInput != "r" && sInput != "s");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
finally
{
tcClient.Dispose();
}
}
据我所知,Automation Interface 至少需要 Visual Studio Shell 才能安装。当您使用自动化接口时,您可以看到在后台启动的 devenv.exe
实例。
几乎正确,端口必须是 AmsPort.SystemService (10000)
那么
要从配置中重新启动 PLC,请使用 AdsState.Reset(.运行 将不起作用)
要在 ConfigMode 中设置 PLC,请使用 AdsState.Reconfig(.Config 将不起作用)
.Devstate:可以是 0 或者什么。
检查 PLC 是否处于 运行 模式或配置等。(一些 vb.net 代码)
Dim tc As New TcAdsClient
Dim AdsStateInfo as StateInfo
Try
tc.Connect("", AmsPort.SystemService) '(AmsPort.SystemService=10000)
AdsStateInfo = tc.ReadState
Catch ex As Exception
AdsStateInfo.AdsState = TwinCAT.Ads.AdsState.Error
AdsStateInfo.DeviceState = 7 ' Error7 if not found
End Try
MsgBox("AdsState: "+ AdsStateInfo.AdsState.ToString)
我需要从 C# 应用程序 startup/shutdown TwinCAT 3.0。
正如
var systemManager = new TcSysManager(); // missing method exception:
// no constructor without parameters defined
在 TC 3 中它给了我上面的运行时错误。
我似乎需要 Visual Studio 在我想使用自动化接口的 PC 上的实例。带自动化的平板电脑在一台机器上,没有安装VS。
是否可以使用自动化接口,或者以编程方式 startup/shutdown TC 3.0 而无需在计算机上安装 Visual Studio? 谢谢
下面的答案是关于启动和停止特定 PLC 实例的。要在 Config 和 运行 之间更改整个 TwinCAT 运行时,请连接到系统服务 ADS 端口(端口 10000)并将状态设置为 AdsState.Run
或 AdsState.Config
.
可以找到所有有效状态值 here. All the port values can be found here。
static void Main(string[] args)
{
//Create a new instance of class TcAdsClient
TcAdsClient tcClient = new TcAdsClient();
try
{
// Connect to TwinCAT System Service port 10000
tcClient.Connect(AmsPort.SystemService);
// Send desired state
tcClient.WriteControl(new StateInfo(AdsState.Config, tcClient.ReadState().DeviceState));
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
finally
{
tcClient.Dispose();
}
}
要以编程方式启动或停止 TwinCAT 运行时,您可以使用 ADS 命令将 AdsState 更改为 运行 或停止。 Beckhoff 为此提供了 C# 和 C++ 库。 C# 示例:
static void Main(string[] args)
{
//Create a new instance of class TcAdsClient
TcAdsClient tcClient = new TcAdsClient();
try
{
// Connect to local PLC - Runtime 1 - TwinCAT 3 Port=851
tcClient.Connect(851);
Console.WriteLine(" PLC Run\t[R]");
Console.WriteLine(" PLC Stop\t[S]");
Console.WriteLine("\r\nPlease choose \"Run\" or \"Stop\" and confirm with enter..");
string sInput = Console.ReadLine().ToLower();
//Process user input and apply chosen state
do{
switch (sInput)
{
case "r": tcClient.WriteControl(new StateInfo(AdsState.Run, tcClient.ReadState().DeviceState)); break;
case "s": tcClient.WriteControl(new StateInfo(AdsState.Stop, tcClient.ReadState().DeviceState)); break;
default: Console.WriteLine("Please choose \"Run\" or \"Stop\" and confirm with enter.."); sInput = Console.ReadLine().ToLower(); break;
}
} while (sInput != "r" && sInput != "s");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
finally
{
tcClient.Dispose();
}
}
据我所知,Automation Interface 至少需要 Visual Studio Shell 才能安装。当您使用自动化接口时,您可以看到在后台启动的 devenv.exe
实例。
几乎正确,端口必须是 AmsPort.SystemService (10000)
那么
要从配置中重新启动 PLC,请使用 AdsState.Reset(.运行 将不起作用)
要在 ConfigMode 中设置 PLC,请使用 AdsState.Reconfig(.Config 将不起作用)
.Devstate:可以是 0 或者什么。
检查 PLC 是否处于 运行 模式或配置等。(一些 vb.net 代码)
Dim tc As New TcAdsClient
Dim AdsStateInfo as StateInfo
Try
tc.Connect("", AmsPort.SystemService) '(AmsPort.SystemService=10000)
AdsStateInfo = tc.ReadState
Catch ex As Exception
AdsStateInfo.AdsState = TwinCAT.Ads.AdsState.Error
AdsStateInfo.DeviceState = 7 ' Error7 if not found
End Try
MsgBox("AdsState: "+ AdsStateInfo.AdsState.ToString)