Как успешно скопировать файлы на медленный ПЛК Beckhoff под управлением WinCE7?

Я пытаюсь создать автоматический установщик для ПЛК на базе WinCE7 с очень медленным процессором и картой памяти (CX9020). Установщик будет работать на ПК с Windows Server 2019, подключенном к ПЛК. Чтобы установить новую версию, я хочу скопировать содержимое загрузочной папки поверх существующей, а затем перезапустить TwinCAT.

Я не могу использовать SMB, поскольку Windows Server2019 не полностью поддерживает SMB1, и я не хочу делать его менее безопасным, принудительно используя SMB1. WinCE не поддерживает SMB2 и SMB3. Я не могу использовать встроенный FTP, поскольку он не может копировать большие файлы (тайм-аут) или небольшие пустые файлы.

Я знаю, что Beckhoff использует протокол ADS для активации конфигурации, и он копирует загрузочную папку в ПЛК, когда я использую для этого Visual Studio (VS). На ПК, на котором выполняется обновление ПЛК, не должно быть установлено VS или исходный код ПЛК. Есть ли способ сделать это, как Beckhoff, и скопировать загрузочную папку в ПЛК без использования VS?

Я пытался изменить тайм-аут FTP, но не нашел способа сделать это. Но даже если мне это удастся, у FTP есть и другие ограничения.

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

Ответы 1

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

Beckhoff включает модуль PowerShell как часть установки TwinCAT. Полную документацию можно найти в этом файле - Модуль Twincat ADS

# Import the TwinCAT ADS module
$originalpaths = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath).PSModulePath
$newPath = $originalpaths + ';C:\TwinCAT\AdsApi\Powershell'
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath -Value $newPath
$env:PSModulePath = [System.Environment]::GetEnvironmentVariable("PSModulePath", "Machine")

# Check if the module was imported
if (-not (Get-Module TcXaeMgmt -listavailable)) { Throw 'The Twincat ADS module was not found!' }

Затем необходимо создать список файлов для копирования.

$variant = 'Put your variant here'
$source = '$PSScriptRoot + "\$variant"'
$plcFiles = Get-ChildItem -Path $source -Recurse -Force -File

Установите пути назначения.

# Windows 10
$destination = '\TwinCAT\3.1\Boot'
# Windows CE
$destination = '\Hard Disk\TwinCAT\3.1\Boot'

Перебирайте список и копируйте каждый файл.

 # Upload the files
    foreach ($file in $plcFiles) {
        Copy-AdsFile -Path $file.FullName -SessionId $session.Id -Destination   $file.FullName.Replace($source, $destination) -Force -Upload
    }

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

Практика процесса автоматического обновления (самообновления) приложения WPF
Скрипт конвертации для трубы (переобъявите пакет Medium=NewMedium)
Как автоматически обновлять DataGridViewColumn?
Electron Updater загружает обновление, но не устанавливает его на macOS (Squirrel.Mac)
Как обновить наш сайт до последней версии с помощью JavaScript? В основном жесткая перезагрузка или очистка кеша и перезагрузка
MAUI: обновить собственное приложение (Android)
Как приложение флаттера может автоматически получать обновление новой версии из магазина воспроизведения или Apple Store
Необходимо скопировать новую информацию на один из двух других рабочих листов на основе выбранного раскрывающегося меню
Как обновлять текст метки каждый день, чтобы пользователь каждый день получал другой предопределенный текст?
Как инициировать обновление стека AWS Cloudformation при загрузке объекта в корзину S3?