- 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
92 lines
2.7 KiB
PowerShell
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 { }
|
|
}
|