Интерфейс автоматизации TwinCAT 3.0 без Visual Studio?

Мне нужно запустить / выключить TwinCAT 3.0 из приложения C#. Как любезно ответили в разделе Как запустить / выключить систему TwinCAT из консоли / программы C#? Я могу использовать интерфейс автоматизации TwinCAT. В то время как в TC 2.0 можно было просто создать экземпляр интерфейса автоматизации с помощью:

var systemManager = new TcSysManager(); // missing method exception: 
                                        //  no constructor without parameters defined

В TC 3 это дает мне вышеуказанную ошибку во время выполнения.

Кажется, мне нужен экземпляр Visual Studio на ПК, где я хочу использовать интерфейс автоматизации. Панель ПК с автоматикой находится на машине и не имеет установленного VS.

Можно ли использовать интерфейс автоматизации или, альтернативно, программно запускать / выключать TC 3.0 без установки Visual Studio на компьютере? Благодарю.

1 ответ

Решение

Ответ ниже предназначен для запуска и остановки конкретного экземпляра ПЛК. Чтобы изменить всю среду выполнения TwinCAT между Config и Run, подключитесь к порту ADS системной службы (порт 10000) и установите для него состояние AdsState.Run или же AdsState.Config,

Все действительные значения состояния можно найти здесь. Все значения портов можно найти здесь.

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 на Run или Stop. Для этого Beckhoff предоставляет библиотеки C# и C++. Пример A 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();
    }
}

Источник: https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_adssamples_c/html/TcAdsDll_API_CPP_Sample06.htm&id=

Пример C++ находится здесь: https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_adssamples_c/html/TcAdsDll_API_CPP_Sample06.htm&id=


Насколько мне известно, для интерфейса автоматизации требуется установить хотя бы оболочку Visual Studio. Когда вы используете интерфейс автоматизации, вы можете увидеть экземпляр devenv.exe который запускается в фоновом режиме.

Почти сразу, порт должен быть AmsPort.SystemService (10000)
THEN
Для перезагрузки ПЛК с использованием конфигурации AdsState.Reset (.run не будет работать),
чтобы установить PLC в ConfigMode использования AdsState.Reconfig (.config точн не работают)

.Devstate: Может быть 0 или что угодно.

Чтобы проверить, находится ли ПЛК в режиме выполнения или конфигурации и т. Д. (Некоторый код 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)
Другие вопросы по тегам