ethercat-linux/scripts/tc-activate.ps1
Tony Cao 309aaba342 EL6695 8-byte bidirectional exchange with per-byte verification
- 8B PDO config: ULINT-sized payload, no 0x1A01 diag PDO on SM3
  (device rejected SM3=8 with diag assigned: 'size not allowed, min/max 0xa')
- twin_layout_blob_sized(): single 64-bit mapping entry for 8B payloads
- Ticker: per-byte XOR 0x5A transform in 8B mode so TwinCAT can verify
  every byte individually (1KB path unchanged, const-guarded)
- TwinCAT automation scripts: deploy with RPC retry, LinkVariables-based
  whole-array relink (element links only carry 1 byte), ADS watch, diag
- Docs: 8B design, verification methodology, test report
2026-07-27 19:01:05 +08:00

92 lines
2.7 KiB
PowerShell

#Requires -Version 5.1
<#
.SYNOPSIS
Activate the TwinCAT configuration (download to target + restart).
.DESCRIPTION
Uses ITcSysManager.ActivateConfiguration() — the automation interface
method, NOT the localized DTE command name. This avoids the Chinese
locale command-name mismatch that plagues ExecuteCommand("TwinCAT.激活配置").
After activation, calls StartRestartTwinCAT to bring the target to RUN.
.PARAMETER Solution
Path to the .sln file. Default points to the EL6695 Secondary project.
.PARAMETER TargetNetId
AMS NetID of the local TwinCAT target. Default: 10.0.0.106.1.1
.PARAMETER Visible
Show the TwinCAT XAE window (for debugging).
.EXAMPLE
.\tc-activate.ps1
.\tc-activate.ps1 -Visible
#>
[CmdletBinding()]
param(
[string]$Solution = $null,
[string]$TargetNetId = "169.254.176.217.1.1",
[switch]$Visible
)
. "$PSScriptRoot\tc-common.ps1"
if (-not $Solution) { $Solution = $script:DefaultSolution }
New-Log $script:DefaultLogDir
$LogFile = Join-Path $script:DefaultLogDir "activate.log"
Write-Log "=== Activate Configuration ===" $LogFile
Write-Log "Solution: $Solution" $LogFile
Write-Log "TargetNetId: $TargetNetId" $LogFile
try {
$dte = Get-Dte -Visible:$Visible
} catch {
Write-Log "FATAL: Cannot create TcXaeShell.DTE.17.0 — run Register-TcXaeCom.ps1 first" $LogFile
exit 1
}
try {
if (-not (Open-Solution -Dte $dte -Solution $Solution)) {
throw "Solution did not open"
}
$sysMgr = Get-SysManager -Dte $dte
# Set target NetID
try { $sysMgr.SetTargetNetId($TargetNetId) } catch { Write-Log "SetTargetNetId warning: $_" $LogFile }
try { $sysMgr.ConfigurationManager.ActiveTargetPlatform = "TwinCAT RT (x64)" } catch { }
# Save before activate
Write-Log "Saving project..." $LogFile
try { $sysMgr.SaveConfiguration() } catch { Write-Log "Save warning: $_" $LogFile }
# Activate
Write-Log "Calling ActivateConfiguration()..." $LogFile
$sysMgr.ActivateConfiguration()
Write-Log "ActivateConfiguration() returned OK" $LogFile
# Wait for build to settle
$info = Wait-Busy -Dte $dte
Write-Log "Build settled, LastBuildInfo=$info" $LogFile
# Restart TwinCAT on target
Write-Log "Calling StartRestartTwinCAT()..." $LogFile
try {
$sysMgr.StartRestartTwinCAT()
Write-Log "StartRestartTwinCAT() OK" $LogFile
} catch {
Write-Log "StartRestartTwinCAT warning: $_" $LogFile
}
Start-Sleep -Seconds 5
# Save after activate
try { $dte.Solution.SaveAs($Solution) } catch { Write-Log "Save warning: $_" $LogFile }
Write-Log "=== Activate complete ===" $LogFile
}
finally {
try { $dte.Quit() } catch { }
}