Read
The Read-TcValue Cmdlet can be called via IndexGroup/IndexOffset (Raw Data), via Handle or with Symbolic Information (Symbol path or Symbol Object). If symbolic information is used, then the calls will be type safe and the returned data is automatically mapped to appropriate (dynamically) created .NET types.
Read type safe data with symbolic information
PS> $session = New-TcSession -NetId '1.2.3.4.5.6' -Port 851
PS> $symbol = $session | get-TcSymbol -Path 'TwinCAT_SystemInfoVarList._AppInfo.ProjectName'
PS> $symbol | Read-TcValue
ADS_DynSymbols
Create an ADS Session/Connection, determine the 'ProjectName' Symbol from the running PLC Project, read the current value of the symbol and print it to the console.
Read amount of bytes from IndexGroup/IndexOffset
PS> Read-TcValue -IndexGroup 0x4040 -IndexOffset 0x1247a8 -NetId 172.17.62.105.1.1 -port 851 -size 0xff | format-hex
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 41 44 53 5F 44 79 6E 53 79 6D 62 6F 6C 73 00 00 ADS_DynSymbols..
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000080 11 00 01 01 A0 86 01 00 14 00 5E 01 21 C2 15 00 .... ?....^.!A..
00000090 00 7F F1 57 3B 83 6C 07 1E 00 00 00 00 00 00 00 .⌂ñW;?l.........
000000A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000C0 41 44 53 5F 44 79 6E 53 79 6D 62 6F 6C 73 5F 50 ADS_DynSymbols_P
000000D0 6C 63 54 61 73 6B 00 00 00 00 00 00 00 00 00 00 lcTask..........
000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............
Reads 256 Bytes via IndexGroup/IndexOffset from the specified target system and prints the out formatted as hexdump.
Read data with IndexGroup/IndexOffset and specify the returned data type.
PS> Read-TcValue -session $session -IndexGroup 0x4040 -IndexOffset 0x1247A8 -ValueType String
ADS_DynSymbols
Reads a string typed value from IndexGroup / IndexOffset.
In this example the ProjectName of the running PLC Project resides at that ProcessImage Address.
Read data by Symbol handle
PS> $route = Get-AdsRoute -Name 'CX-123456'
PS> $session = $route | New-TcSession -Port 851
PS> $handle = $session | Send-TcReadWrite -IndexGroup SymbolHandleByName -WriteValue "GVL.vgInt" -ReadType Int32 -force
PS> $session | Read-TcValue -IndexGroup SymbolValueByHandle -IndexOffset $handle -ValueType Int16
42
Create a session to the PLC (Port 851) of a target system, determine the SymbolHandle by InstancePath and use this handle to read its 'Int16' Value (INT on PLC System).
Accessing Complex Objects (e.g Structs or FBs)
Also complex types will be resolved transparently. E.g. a DT type with 3 fields (vBool, vInt, vString) on the PLC side can be accessed as a whole.
Reading the Symbol Information
Getting the value of the struct. The subvalues will be created type-safe on-the-fly as .NET Types
Also SubValues can be accessed. This doesn’t trigger a new ADS Read (and uses internally cached data). The data is consistent to the timepoint of the ‘Read-TcValue’
To access the more detailed internal Data of the Value, the ‘PSValue’ can be accessed.