I have two maestro views from which I extract my outputs using SKILL. Each view is in a different virtuoso version. The SKILL code used is the same in both versions:
; get session IdsessId = maeOpenSetup(myLib myCell "maestro"); get result DBresDB = maeReadResDB(?historyName myHistory ?session sessId); select one arbitrary point and cornerpoint = car(resDB->points())corner = car(point->corners()); iterate tests and outputsforeach(test corner->tests() foreach(output test->outputs() ; evaluate wave outputs when(output->value == "wave" myWave = calcVal(output->name test->name) print(myWave) ) ))
This works for one version of virtuoso and extracts the waves of all tests and corners across all points and corners. The other version has two problems:
Is there a way to make both versions behave the same (e.g. an environment variable?). Any help would be appreciated.
Are we supposed to guess which versions you're using? i.e. the version that works and the version that doesn't? I for one am not going to do lots of experiments to try to figure if there's a version dependency on this working or not, or whether it's down to something else. If I knew the versions, I might be rather more inclined to experiment (it's been a long week, so excuse me being blunt).
Thank you for your reply. I thought you might be aware of this, but no need to guess the versions The code works on 12.3-64b.8 and doesn't work on 12.3-64b.500.20.
Apologies for the lack of info. It's been a long week here as well
Update: if I "View Results" from the GUI, the code at least returns the correct value for calcVal( .. ).
Using maeOpenResults( .. ) does not change anything
Is there a known workaround for this issue in version 12.3-64b.500.20?
I'm not entirely sure what the problem is here. For a start, your script looks incorrect - it says it is picking the first point and first corner, but it had no car() on each, and so it failed for me (in any version). I then updated the calcVal expression to try to pick the specific corner, history and result (for signals) and added the check for nil - but then I realised your calcVal are trying to reference previous waveform expressions rather than signals. For me, the calcVal doesn't work in any version if I'm trying to retrieve waveform expressions this way.
I suggest you contact customer support so that you can provide a bit more information and somebody can investigate in more detail. Here's my updated version of your script, in case it helps.
; get session Id
sessId = maeOpenSetup(myLib myCell "maestro")
; get result DB
resDB = maeReadResDB(?historyName myHistory ?session sessId)
; select one arbitrary point and corner
; ANDREW - didn't have car here before, so this wouldn't have worked
point = car(resDB->points())
corner = car(point->corners())
; iterate tests and outputs
printf("%L %L %L\n" output->name output->value output->test()->name)
; ANDREW - need to map corner name for nominal (for some reason)
; evaluate wave outputs
; ANDREW - have to be more explicit about which corner and history you want
when(output->value == "wave" || output->value==nil
myWave = calcVal(output->name test->name ?cornerName cornerName ?historyName myHistory ?result 'tran)