Есть ли способ проверить версию среды выполнения TwinCAT XAR?

В InfoSys я не нашел ничего о том, как это проверить. Вы можете закрепить/исправить версию проекта, но это меняет ситуацию только на стороне XAE, а не во время выполнения.

Я хочу проверить версию XAR из-за функции, представленной в версии 4024.40. Я хочу убедиться, что эта функция доступна.

Но теперь мне интересно, необходимо ли иметь среду выполнения и в более новой версии. Согласно этому вопросу, более поздняя версия XAE по сравнению с XAR подойдет. Так что в этом случае я могу просто обновить версию XAE.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть несколько способов. Первым двум нужен локальный доступ к Windows. Последний использует ADS и может использоваться удаленно.

Реестр

TwinCAT 4024 и новее имеет TcVersion запись реестра, содержащую версию. У 4022 его вроде нет.

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Beckhoff\TwinCAT3\System

Пользовательский интерфейс системы TwinCAT

Версия отображается в диалоговом окне «О программе». Итак, щелкните правой кнопкой мыши значок TwinCAT на панели задач (в ПЛК, а не на вашем ПК!) и выберите «О TwinCAT...»

Использование связи ADS

Вы можете удаленно прочитать полный номер версии с помощью ADS:

  • Целевой порт: 10000
  • Индексная группа: 160
  • Смещение индекса: 0
  • Байт: 8

Пример данных ответа: 01 00 03 00 1b 00 b6 0f

  • 01 00 -> 1
  • 03 00 -> 3
  • 1b 00 -> 27
  • b6 0f -> 4022

Номер версии: 3.1.4022.27.

Пример с кодом ПЛК:

Создайте структуру ST_TwincatVersion:

{attribute 'pack_mode' := '1'} 
TYPE ST_TwincatVersion :
STRUCT
    num1 : UINT;
    num2 : UINT;
    num3 : UINT;
    num4 : UINT;
END_STRUCT
END_TYPE

Код:

VAR
    ReadVersionReq  : BOOL;
    AdsReader       : ADSREADEX;
    Version         : ST_TwincatVersion;
END_VAR

//Set ReadVersionReq to TRUE to read version
AdsReader(
    NETID   := '192.168.1.50.1.1', //Change to correct address
    PORT    := 10000, 
    IDXGRP  := 160, 
    IDXOFFS := 0, 
    LEN     := SIZEOF(version), 
    DESTADDR:= ADR(Version), 
    READ    := ReadVersionReq
);

//Note: No error handling
IF ReadVersionReq AND NOT AdsReader.BUSY THEN
    ReadVersionReq := FALSE;
END_IF

Результат:

Пример с использованием Javascript и библиотеки ads-client :

const ads = require('ads-client');

const client = new ads.Client({
  targetAmsNetId: '192.168.1.50.1.1', //Change to correct address
  targetAdsPort: 10000,
  bareClient: true
});

client.connect()
  .then(async res => {   
    const data = await client.readRaw(160, 0, 8);
    
    const versionNumbers = [
      data.readInt16LE(2),
      data.readInt16LE(0),
      data.readInt16LE(6),
      data.readInt16LE(4)
    ];

    const versionStr = versionNumbers.join(".");
    
    console.info(data); //<Buffer 01 00 03 00 1b 00 b6 0f>
    console.info(versionNumbers); //[ 3, 1, 4022, 27 ]
    console.info(versionStr); //3.1.4022.27

    await client.disconnect();
  })
  .then(() => {
    console.info('Disconnected');
  })
  .catch(err => {
    console.info('Something failed:', err);
  })

У меня есть доступ к ПЛК, но я также хочу автоматически получить дополнительный номер версии. Возможно, с NT_StartProcess что-то можно сделать.

Roald 24.06.2024 11:30

@Roald, на самом деле было легко найти правильную команду ADS, отслеживая, что делает TwinCAT XAE. Я обновил ответ.

Quirzo 24.06.2024 12:12

@Роальд, тебе удалось заставить это работать?

Quirzo 04.07.2024 12:04

Да, прости. Работает как шарм!

Roald 05.07.2024 07:53

Другие вопросы по теме