- twin_layout_blob_sized generalized: multi-entry TwinCAT line format (1 real @240bit + N continuation + remainder entry); 1024B path kept byte-identical; 800B = 27 entries verified on hardware - 800B constants (PAYLOAD/SM 800), deployed as el6695_rt_800b - 10-min + 5h stability runs: 18M cycles, zero errors, zero mismatches, PLC nMismatch frozen over the whole run (monitor_5h.csv evidence) - docs: 800B plan/design/verification/test-report chapters, jitter analysis (NFS rootfs stall primary cause), D2000 dev plan - scripts: 800B deploy/relink/verify, mismatch-delta, 5h monitor
63 lines
2.6 KiB
PowerShell
63 lines
2.6 KiB
PowerShell
#Requires -RunAsAdministrator
|
|
$ErrorActionPreference = "Continue"
|
|
$dte = New-Object -ComObject TcXaeShell.DTE.17.0
|
|
$dte.MainWindow.Visible = $true
|
|
try { $dte.SuppressUI = $false } catch {}
|
|
$dte.Solution.Open("C:\Users\tonycao\work\twincat3-auto-cli\TwinCAT_EL6695_Primary_800B\TwinCATProject1.sln")
|
|
Start-Sleep 20
|
|
$sm = $null
|
|
for ($i = 0; $i -lt 20; $i++) {
|
|
try { $sm = $dte.Solution.Projects.Item(1).Object; if ($sm) { break } } catch {}
|
|
Start-Sleep 3
|
|
}
|
|
if (-not $sm) { Write-Host "no sysmgr"; exit 1 }
|
|
try { $sm.SetTargetNetId("169.254.176.217.1.1") } catch {}
|
|
Start-Sleep 2
|
|
|
|
$box = "TIID^设备 1 (EtherCAT)^模块 3 (EK1100)^模块 10 (EL6695)"
|
|
$cands = @(
|
|
"$box^IO Outputs^IO Outputs",
|
|
"$box^IO Outputs^IO Outputs[0]",
|
|
"$box^IO Inputs^IO Inputs",
|
|
"$box^IO Inputs^IO Inputs[0]"
|
|
)
|
|
foreach ($c in $cands) {
|
|
$it = $null
|
|
try { $it = $sm.TryLookupTreeItem($c) } catch { Write-Host "err $c : $_" }
|
|
if ($it) {
|
|
$sz = ""
|
|
try { $sz = $it.BitSize } catch {}
|
|
Write-Host "OK: $c name=$($it.Name) type=$($it.ItemType) bitsize=$sz"
|
|
} else {
|
|
Write-Host "MISS: $c"
|
|
}
|
|
}
|
|
|
|
$varAin = "TIPC^PlcSync^PlcSync Instance^PlcTask Inputs^GVL_Sync.aIn1"
|
|
$varAout = "TIPC^PlcSync^PlcSync Instance^PlcTask Outputs^GVL_Sync.aOut1"
|
|
foreach ($v in @($varAin, $varAout)) {
|
|
$it = $null
|
|
try { $it = $sm.TryLookupTreeItem($v) } catch {}
|
|
if ($it) { Write-Host "PLC OK: $v" } else { Write-Host "PLC MISS: $v" }
|
|
}
|
|
|
|
Write-Host "--- unlink existing ---"
|
|
try { $sm.UnlinkVariables($varAin, "$box^IO Inputs^IO Inputs") ; Write-Host "unlinked aIn1" } catch { Write-Host "unlink aIn1: $_" }
|
|
try { $sm.UnlinkVariables($varAout, "$box^IO Outputs^IO Outputs"); Write-Host "unlinked aOut1" } catch { Write-Host "unlink aOut1: $_" }
|
|
|
|
Write-Host "--- link whole arrays ---"
|
|
try { $sm.LinkVariables($varAin, "$box^IO Inputs^IO Inputs"); Write-Host "linked aIn1" } catch { Write-Host "link aIn1: $_" }
|
|
try { $sm.LinkVariables($varAout, "$box^IO Outputs^IO Outputs"); Write-Host "linked aOut1" } catch { Write-Host "link aOut1: $_" }
|
|
|
|
$xml = $sm.ProduceMappingInfo()
|
|
[System.IO.File]::WriteAllText("C:\Users\tonycao\work\ethercat-linux\tmp_mapping2.xml", $xml, [System.Text.Encoding]::UTF8)
|
|
Write-Host "mapping saved"
|
|
|
|
Write-Host "--- save + activate + restart ---"
|
|
try { $dte.Solution.SaveAll(); Write-Host "saved" } catch { Write-Host "save: $_" }
|
|
try { $sm.ActivateConfiguration(); Write-Host "activated" } catch { Write-Host "activate: $_" }
|
|
Start-Sleep 10
|
|
try { $sm.StartRestartTwinCAT(); Write-Host "restart issued" } catch { Write-Host "restart: $_" }
|
|
Start-Sleep 10
|
|
Write-Host "done"
|