В InfoSys я не нашел ничего о том, как это проверить. Вы можете закрепить/исправить версию проекта, но это меняет ситуацию только на стороне XAE, а не во время выполнения.
Я хочу проверить версию XAR из-за функции, представленной в версии 4024.40. Я хочу убедиться, что эта функция доступна.
Но теперь мне интересно, необходимо ли иметь среду выполнения и в более новой версии. Согласно этому вопросу, более поздняя версия XAE по сравнению с XAR подойдет. Так что в этом случае я могу просто обновить версию XAE.
Есть несколько способов. Первым двум нужен локальный доступ к Windows. Последний использует ADS и может использоваться удаленно.
TwinCAT 4024 и новее имеет TcVersion
запись реестра, содержащую версию. У 4022 его вроде нет.
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Beckhoff\TwinCAT3\System
Версия отображается в диалоговом окне «О программе». Итак, щелкните правой кнопкой мыши значок TwinCAT на панели задач (в ПЛК, а не на вашем ПК!) и выберите «О TwinCAT...»
Вы можете удаленно прочитать полный номер версии с помощью ADS:
Пример данных ответа: 01 00 03 00 1b 00 b6 0f
01 00
-> 103 00
-> 31b 00
-> 27b6 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
Результат:
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);
})
@Roald, на самом деле было легко найти правильную команду ADS, отслеживая, что делает TwinCAT XAE. Я обновил ответ.
@Роальд, тебе удалось заставить это работать?
Да, прости. Работает как шарм!
У меня есть доступ к ПЛК, но я также хочу автоматически получить дополнительный номер версии. Возможно, с
NT_StartProcess
что-то можно сделать.