How to introspect a PandA#
Using a combination of commands
it is straightforward to query the PandA
to list all blocks, and all fields inside each block, that exist.
Call the following script, with the address of the PandA as the first and only command line argument:
import asyncio
import pprint
import sys
from pandablocks.asyncio import AsyncioClient
from pandablocks.commands import GetBlockInfo, GetFieldInfo, GetPcapBitsLabels
async def introspect():
# Create a client and connect the control and data ports
async with AsyncioClient(sys.argv[1]) as client:
# Get the list of all blocks in the PandA
block_info = await client.send(GetBlockInfo())
# Find and print all fields for each block
for block in block_info:
field_info = await client.send(GetFieldInfo(block))
pprint.pprint({block: field_info})
# Get the labels for every PCAP.BITS[n] fields
labels = await client.send(GetPcapBitsLabels())
pprint.pprint(labels)
if __name__ == "__main__":
# One-shot run of a co-routine
asyncio.run(introspect())
This script can be found in examples/introspect_panda.py
.
By examining the BlockInfo
structure returned from GetBlockInfo
for each Block the number
and description may be acquired for every block.
By examining the FieldInfo
structure (which is fully printed in this example) the type
,
sub-type
, description
and label
may all be found for every field.
Lastly the complete list of every BITS
field in the PCAP
block are gathered and
printed. See the documentation in the Field Types
section of the PandA Server documentation.