"""
This script opens a window with chart, and plots values of target
arrays given as command line args.
This script requires 'matplotlib' to be installed.
"""
import matplotlib
import sys
import pylab as pl
import time
import argparse
import isystem.connect as ic
winidea_id = ''
matplotlib.use('TkAgg')
def _initTarget():
cmgr = ic.ConnectionMgr()
cmgr.connect(ic.CConnectionConfig().instanceId(winidea_id))
debugCtrl = ic.CDebugFacade(cmgr)
debugCtrl.download()
debugCtrl.deleteAll()
debugCtrl.runUntilFunction('main')
debugCtrl.waitUntilStopped()
dataCtrl2 = ic.CDataController2(cmgr)
return debugCtrl, dataCtrl2
def getDataFromTarget(debugCtrl, dataCtrl2, arrayNames):
targetData = []
for arrayName in arrayNames:
exprType = dataCtrl2.getExpressionType(0, arrayName)
exprInfo = exprType.Expression()
numElements = exprInfo.ArrayDimension()
dataCtrl2.release(exprType)
targetArray = []
for i in range(numElements):
val = debugCtrl.evaluate(ic.IConnectDebug.fMonitor, arrayName + f"[{i}]")
targetArray.append(val.getInt())
targetData.append(targetArray)
return targetData
def plotArrays(arrayNames, targetData):
for idx, data in enumerate(targetData):
pl.plot(data, label=arrayNames[idx])
pl.legend()
pl.xlabel('t')
pl.ylabel('values')
pl.title("Target Data")
pl.grid(True)
pl.show()
def _parseArgs():
parser = argparse.ArgumentParser(description="Specify names of arrays containing plot data.")
parser.add_argument('targetVar', metavar='targetVar', type=str, nargs='*',
default=['g_intArray1'],
help='list of arrays on target')
return parser.parse_args()
def main():
args = _parseArgs()
print(args.targetVar)
debugCtrl, dataCtrl2 = _initTarget()
targetData = getDataFromTarget(debugCtrl, dataCtrl2, args.targetVar)
plotArrays(args.targetVar, targetData)
if __name__ == "__main__":
main()