Author Topic: Program that can log/control many multimeters and other devices.  (Read 1616045 times)

0 Members and 158 Guests are viewing this topic.

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4375 on: August 11, 2025, 06:47:49 am »
I have made a Release Candidate definition file for the Yokogawa 7551/7552/7561/7562 Digital Multimeter

...

I will update with the feedback to a 1.00 version, that can be included in the next release of the TestController suite. I will also add support for the Yokogawa 7563 Digital Thermometer without supporting the thermo-couple functions so it will function like a 7561,

I will release a 1.00 version, and HKJ can then add this to the release.

I have added this version and will update it when you post an updated version.
And thanks for the definitions.
 
The following users thanked this post: flash2b

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4376 on: August 11, 2025, 01:19:48 pm »
I am writing an improved version of the setup menu for the Yokogawa where I store 9 settings from the OS command into 9 variables. This works great and is 5 times more quick than before, however I run in a problem.

This is an example of one of the variables:

I initialize the variable
#scpiCmd setVars none
:setvar: avgSamplesVal="255"

; Note avgSamplesVal==255

During processing I set the variable to the value of the meter response
:readmath: getElement(OSresponse,5,"[\n]")
:readmath: getElement(value,1,"SM")
:setvar: avgSamplesVal = substring(value,0,1)

; Note avgSamplesVal == 1 (from meter OS response)

I have made a scpiCmd to get the value
#scpiCmd avgSamples? none?
:readmath: avgSamplesVal

; Note avgSamples? == 1 , this is correct !!

There is a radio control to set the value from 0 to 1 or 1 to 0
#cmdSetup radio Averaging_Mode Measure
:read: avgSamples?
:write: avgSamples #;[500]
:tip: Use Disabled for maximum speed, Enabled for maximum accuracy
:updatedelayed: 0.3
Disabled 0
Enabled 1
:updatemodechange:

; Note avgSamples is set to 0 by the user (Disabled)

If a values is changed I need to update the meter AND the save the variable
#scpiCmd avgSamples tx SM(value)
:setvar: avgSamplesVal=value

; Note value == 0 as set by user, SM0 is transmitted however avgSamplesVal is NOT set to 0 but some previous received value !

The variable avgSamplesVal has now a WRONG value
#scpiCmd avgSamples? none?
:readmath: avgSamplesVal

; Note avgSamples? produces and error or a timeout (no exception)

The avgSamples? command does not work after this since avgSamplesVal is not correct any more.

What do do wrong, how can I save the value during the tx SM(value) command ?

I did try several other methods to save it without success, so a solution is very welcome !!
« Last Edit: August 11, 2025, 01:21:47 pm by flash2b »
They say attention is a shovel. It's time to dig 'em out.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4377 on: August 11, 2025, 01:37:10 pm »
I am writing an improved version of the setup menu for the Yokogawa where I store 9 settings from the OS command into 9 variables. This works great and is 5 times more quick than before, however I run in a problem.

You are missing a important piece of information:
To access the input/parameter value to a scpiCmd use inputValue instead of value (That is the answer from the device).
It is also possible to use multiple SCPI commands including scpiCmds in any :write: statement, just put a ; between them.
 

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4378 on: August 11, 2025, 01:50:17 pm »
Use of inputValue produces an Java Exception
Code: [Select]
;; YOKO7552: Tx <tx SM(value)
:setvar: avgSamplesVal=InputValue>
;; COM3: Tx: <SM0.> 53 4D 30 0A
dk.hkj.script.ProgramExceptions$UnknownException: Variable not found InputValue
var  avgSamplesVal=InputValue____<----____
        at dk.hkj.script.Script.getVar(Script.java:77)
        at dk.hkj.script.Script.parseValue(Script.java:285)
        at dk.hkj.script.Script.parseBitOp(Script.java:320)
        at dk.hkj.script.Script.parseProduct(Script.java:392)
        at dk.hkj.script.Script.parseSum(Script.java:474)
        at dk.hkj.script.Script.parseCompare(Script.java:529)
        at dk.hkj.script.Script.parseLogical(Script.java:565)
        at dk.hkj.script.Script.parseQuestionMark(Script.java:591)
        at dk.hkj.script.Script.parseExpression(Script.java:616)
        at dk.hkj.script.Script.statementVar(Script.java:941)
        at dk.hkj.script.Script.statement(Script.java:1065)
        at dk.hkj.script.Script.doExecute(Script.java:1254)
        at dk.hkj.script.Script.execute(Script.java:1276)
        at dk.hkj.script.Script.execute(Script.java:1282)
        at dk.hkj.devices.DeviceAscii$TranslatingCommInterface.write(DeviceAscii.java:388)
        at dk.hkj.main.SCPICommand.writeReadInternal(SCPICommand.java:316)
        at dk.hkj.main.SCPICommand.writeRead(SCPICommand.java:365)
        at dk.hkj.main.SCPICommand.write(SCPICommand.java:413)
        at dk.hkj.devices.SetupFormats$RadioField.actionPerformed(SetupFormats.java:2474)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
;; YOKO7552: Delay: 500ms
;; YOKO7552: Tx <avgSamples?>
;; YOKO7552: Tx <none?
:readmath: avgSamplesVal>
;; YOKO7552: Rx <1>
;; YOKO7552: Rx as number <1.0>

One good thing, avgSamplesVal is unchanged... but it is not set to 0. I have followed the documentation, where a similar example is explained.

The value from SM(value) needs to be save, but the statement below cannot access it.
« Last Edit: August 11, 2025, 01:55:03 pm by flash2b »
They say attention is a shovel. It's time to dig 'em out.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4379 on: August 11, 2025, 01:54:21 pm »
Use of inputValue produces an Java Exception

:setvar: avgSamplesVal=InputValue>
;; COM3: Tx: <SM0.> 53 4D 30 0A
dk.hkj.script.ProgramExceptions$UnknownException: Variable not found InputValue
var  avgSamplesVal=InputValue____<----____

You did not use inpuValue, but InputValue, variables are case sensitive!
 
The following users thanked this post: flash2b

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4380 on: August 11, 2025, 01:58:31 pm »
Your (again) my hero HKJ, it works !

Code: [Select]
:setvar: avgSamplesVal=inputValue>
;; COM3: Tx: <SM1.> 53 4D 31 0A
;; YOKO7552: Delay: 500ms
;; YOKO7552: Tx <avgSamples?>
;; YOKO7552: Tx <none?
:readmath: avgSamplesVal>
;; YOKO7552: Rx <1>
;; YOKO7552: Rx as number <1.0>
;; YOKO7552: Tx <avgSamples 0>
;; YOKO7552: Tx <tx SM(value)
:setvar: avgSamplesVal=inputValue>
;; COM3: Tx: <SM0.> 53 4D 30 0A
;; YOKO7552: Delay: 500ms
;; YOKO7552: Tx <avgSamples?>
;; YOKO7552: Tx <none?
:readmath: avgSamplesVal>
;; YOKO7552: Rx <0>
;; YOKO7552: Rx as number <0.0>

Here is what written in the documentation:

The first example should be inputValue instead of value, am I right ?
« Last Edit: August 11, 2025, 02:02:57 pm by flash2b »
They say attention is a shovel. It's time to dig 'em out.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4381 on: August 11, 2025, 02:19:06 pm »
The first example should be inputValue instead of value, am I right ?

Look like I need to fix some documentation  :)
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4382 on: August 11, 2025, 02:24:43 pm »
Another detail that may be useful to know is that TC cache some communication, i.e. sending the same question multiple times in fast sequence will usually use a cached value and not redo the communication. This speeds up when multiple values must be decoded from the same message in separate queries.
The cache is flushed when a command is send to the device or on timeout, if you have logging enabled you will see when the cache is used.
 

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4383 on: August 11, 2025, 02:34:44 pm »
I have seen TC messages about receive from cache (or somewhat similar). This meter has all its present settings in a 10 lines response, not very SCPI like. But my method storing them into variables and reading them instead has made a significant performance improvement. I re-fetch the variables during a askMode event, so even if they are changed on the meter it self, they will be in sync.
They say attention is a shovel. It's time to dig 'em out.
 

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4384 on: August 12, 2025, 06:45:31 am »
Why do I always see the text "Trigger_settings" in my Setup menu even when sampMode? == 0? The buttons are invisible, so the that at least works, but I also want the text to be invisible/removed when a 0 value is returned. When sampMode? <> 0 the string "Trigger_settings"  is also replaced by "Trigger_Execute", so that also works.

In the documentation the selector is specified as an invisible control.

#cmdSetup buttons Trigger_Execute Single Measure
:write: triggerExe
:tip: Trigger Execution for Single
Trigger_Single 1

#cmdSetup buttons Trigger_Execute N_RDGS Measure
:write: triggerExe
:tip: Trigger Execution for N RDGS
Trigger_N_RDGS 1

; ------ Mode menu selector Hidden ------
#cmdSetup selector Trigger_settings Measure
:read: sampMode?
0 Auto.
1 Single.
2 N_RDGS.


I have added this:
#cmdSetup separator Trigger_Execute Auto Measure
2 100 empty

And now it works, although the line spacing still shows that there is something there that is not visible.

I understand that the selector needs a name, but this name should never be shown since that is the idea of a hidden control. Please elaborate.
 
« Last Edit: August 12, 2025, 07:15:11 am by flash2b »
They say attention is a shovel. It's time to dig 'em out.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4385 on: August 12, 2025, 09:21:12 am »
Why do I always see the text "Trigger_settings" in my Setup menu even when sampMode? == 0? The buttons are invisible, so the that at least works, but I also want the text to be invisible/removed when a 0 value is returned. When sampMode? <> 0 the string "Trigger_settings"  is also replaced by "Trigger_Execute", so that also works.

In the documentation the selector is specified as an invisible control.

#cmdSetup buttons Trigger_Execute Single Measure
:write: triggerExe
:tip: Trigger Execution for Single
Trigger_Single 1

#cmdSetup buttons Trigger_Execute N_RDGS Measure
:write: triggerExe
:tip: Trigger Execution for N RDGS
Trigger_N_RDGS 1

; ------ Mode menu selector Hidden ------
#cmdSetup selector Trigger_settings Measure
:read: sampMode?
0 Auto.
1 Single.
2 N_RDGS.


I have added this:
#cmdSetup separator Trigger_Execute Auto Measure
2 100 empty

And now it works, although the line spacing still shows that there is something there that is not visible.

I understand that the selector needs a name, but this name should never be shown since that is the idea of a hidden control. Please elaborate.

Something is wrong with your script.

The syntax is
#cmdSetup controlName name page

But you have an extra parameter

And in the selector you do not reference the names.



 

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4386 on: August 12, 2025, 10:27:05 am »

Something is wrong with your script.

The syntax is
#cmdSetup controlName name page

But you have an extra parameter

And in the selector you do not reference the names.

Ok,
my selector is called: #cmdSetup selector Trigger_settings Measure, so that is conform syntax.
my buttons are called #cmdSetup buttons Trigger_Execute Single Measure and #cmdSetup buttons Trigger_Execute N_RDGS Measure, so also conform syntax.

sampMode? returns to the selector:
0 Auto.
1 Single.
2 N_RDGS.

(There must be a "." at the end of each line of values, otherwise it does not work. I got these statements from other definitions could not find it in the documentation but may be I did not look at the right place)

So I expect #cmdSetup selector Trigger_settings Measure to call #cmdSetup buttons Trigger_Execute N_RDGS Measure in case value==2

All of this works perfectly (same I used in the Mode_settings for the Mode menu).

Which extra parameter you mean?

My question is when the value from the :read: is not in the listed possible values, the #cmdSetup selector Trigger_settings Measure shows itself in the Setup menu as a "Trigger_settings" line with nothing to the right. I would expect a hidden control not to show up at all, but maybe this is intentional i do not know.
« Last Edit: August 12, 2025, 10:30:10 am by flash2b »
They say attention is a shovel. It's time to dig 'em out.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4387 on: August 12, 2025, 10:54:21 am »
my buttons are called #cmdSetup buttons Trigger_Execute Single Measure and #cmdSetup buttons Trigger_Execute N_RDGS Measure, so also conform syntax.

I see one extra parameter in each of them, names are: Trigger_Execute and Trigger_Execute and pages are Single and N_RDGS
The reason you need the . is because you are selecting pages, not control names.
Specifying: Single.Trigger_Execute and N_RDGS.Trigger_Execute (i.e. page.name) would be nicer

There must be a "." at the end of each line of values, otherwise it does not work. I got these statements from other definitions could not find it in the documentation but may be I did not look at the right place)

https://lygte-info.dk/project/TestControllerConfigDevice%20UK.html#Control_selector


My question is when the value from the :read: is not in the listed possible values, the #cmdSetup selector Trigger_settings Measure shows itself in the Setup menu as a "Trigger_settings" line with nothing to the right. I would expect a hidden control not to show up at all, but maybe this is intentional i do not know.

It is intentional, it makes it easier to see you have a bug with that selector  :).
 

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4388 on: August 13, 2025, 03:01:44 pm »
Hi HKJ and others,

I have made a Final Version definition for the Analogic DP100 and Rohde & Schwarz UDL45 Multimeter.



This new version has nicer autorange controls as the RC version.

Please note that to function properly use V2.62 of TestController (see some posts above for the JAR file) as the #modifyIDN command does not work properly in last release V2.61 of TestController.


I have also made a Final Version definition file for the Yokogawa 7551/7552/7561/7562 Digital Multimeter and Yokogawa 7563 Digital Thermometer. Should also work for the Omega 7563 Digital Thermometer.

Please note: For the 7563 model all theromcouple functions are not supported, basically it is a 7561.



This new version has a new Setup menu that is 6x faster and Range switching that is 2x faster than the RC version. Also included are Trigger Execute for Single and N RDGS Sample modes and some cleanups. Oh, and I added the Yokogawa 7563 as promised  :)

The definition files are attached below. Just copy it into the $documents\TestController\Devices folder.

HKJ, please add these 1.00 Final versions to the next release of the wonderfull TestController !


All definitions are part of the latest TestController release.
« Last Edit: March 05, 2026, 09:37:14 am by flash2b »
They say attention is a shovel. It's time to dig 'em out.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4389 on: August 13, 2025, 03:57:55 pm »
I have made a Final Version definition for the Analogic DP100 and Rohde & Schwwarz UDL45 Multimeter.

HKJ, please add these 1.00 Final versions to the next release of the wonderfull TestController !

I have added them to TC's database (Thanks).

I wonder about 7563, when I do a preview it looks like the other meters, is there not supposed to be some setting/selection related to measuring temperature?
 

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 968
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log from many multimeters.
« Reply #4390 on: August 13, 2025, 04:08:05 pm »
I made this comment in the definition file and readme:

For the 756302 model all theromcouple functions are not supported, basically it is a 756102.

They implemented the thermocouple functions on the DC A, AC A, AC FREQ V and AC FRE A, removed the 20A and put a switch there. So its like a 7561 model, found reference on EEVBlog in a topic about Yokogawa DMM's. Searched the internet and also found the made a RS232 version, that's why I added it. It is a Multi Meter & Temperature Meter, but that didn't fit on the face plate.  :)
They say attention is a shovel. It's time to dig 'em out.
 

Offline punaise

  • Newbie
  • Posts: 2
  • Country: nl
Re: Program that can log from many multimeters.
« Reply #4391 on: August 13, 2025, 06:35:02 pm »
Hello all,

Last week I found this amazing forum and the Test Controller software. Makes my day!
I am developing a logging solution to measure dc current and dc voltage.
Therefore I have the abilty to use a RIGOL DM3058 DMM. I already have the ability to collect current measurements. I made a small modification into the driver because I am using LXI.

In addition this DMM also has the ability to do a second measurement. It is possible to do both a current and a voltage measurement. This is also shown on the display as a 2nd value.

How can I integrate this 2nd measurement into the Test Controller software?

The 1st measurement is configured using :FUNCtion:CURRent:DC,
the reading of the value is done using :FUNCtion2:VALUe1?
to configure a 2nd measurement I can send the command :FUNCtion2:VOLTage:DC
for reading thie 2nd value I can use :FUNCtion2:VALUe2?

As far as I can see it is not possible to request both values using a single command. I can use :FUNCtion2:VALUe1?;:FUNCtion2:VALUe2? but this is send as two separate commands to the DMM.

Many thanks for reading my question.

Best regards,
Punaise.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4392 on: August 13, 2025, 06:58:51 pm »
As far as I can see it is not possible to request both values using a single command. I can use :FUNCtion2:VALUe1?;:FUNCtion2:VALUe2? but this is send as two separate commands to the DMM.

TC has no issues with using multiple commands to obtain the values for logging, it is done regularly for power supplies.
The commands will be send separately, but TC will combine the results for its input.

But it will take some work to control the columns, basically TC has to maintain two modes at a time (That is not a issue for TC) and it requires some work in the definition file.

If it is more specific application you want to use it for, you can also make a specialized driver for it that only support a specific mode. That is much simpler.

I do not really like to use a DMM for dual measurements, often the meter needs to toggle relays to switch between the modes (But then I have multiple bench meters).
 
The following users thanked this post: punaise

Offline Gulftown

  • Regular Contributor
  • *
  • Posts: 72
  • Country: de
Re: Program that can log from many multimeters.
« Reply #4393 on: August 14, 2025, 06:25:39 am »
Hi,

i also still got the problem with my HP 6811A and i looked into the manual and there seems to be no way to define a custom command to request all measurements.
It would be very nice, if there was a way in Test Controller to send multiple commands in one request.
Maybe there is a possibility to add a way to escape the sequence, maybe with brackets or something?
So you don't have to change that much code.
Or implement another send command like the deviceWrite command?

As soon as the definition is ready i will share it here.

Best regards.
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4394 on: August 14, 2025, 12:24:50 pm »
i also still got the problem with my HP 6811A and i looked into the manual and there seems to be no way to define a custom command to request all measurements.
It would be very nice, if there was a way in Test Controller to send multiple commands in one request.
Maybe there is a possibility to add a way to escape the sequence, maybe with brackets or something?
So you don't have to change that much code.

I have been thinking about it and looked at my code and find way to many issues with it.
But maybe I can do something with another delimiter (like [|]) and replace it with a ; at the last possible moment.

Or implement another send command like the deviceWrite command?

Output from deviceWrite goes through mostly the same chain as other commands.

As soon as the definition is ready i will share it here.

I am looking forward to it.
 

Offline Gulftown

  • Regular Contributor
  • *
  • Posts: 72
  • Country: de
Re: Program that can log from many multimeters.
« Reply #4395 on: August 14, 2025, 02:25:33 pm »
Whatever works best for you.
Thank you for your work!
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4396 on: August 15, 2025, 07:25:47 am »
Looking at the problem this way made it easy to solve.

http://lygte-info.dk/pic/Projects/TestController/TestController.jar

Combining multiple commands on a single line

This can be used to set or query multiple values by sending one line with multiple commands (TC usually only sends one command on a line, even if they are listed on the same line in TC). It is only recommended to use this format when it is required by the device.
This is done by replacing the ; between commands by [|]

volt 5;curr 3   This will send two lines one with "volt 5" and one with "curr 3"

volt 5[|]curr 3   This will one lines one with "volt 5;curr 3", the [|] is replaced with a ;

The same can be used to query values:
volt?;curr?   This will send two lines and expect a answer line after each transmitted line.

volt?[|]curr?   This will send one lines and expect a single line with a answer for both queries.

If the device send multi line answers, a special tag is used to increase the expected line count:
volt?[|]curr?[?2]   This will expect a two line answer, in the tag [?n] n can be any positive number and will define the expected number of answering lines. Using to high value of n will hang TC for multiple timeout periods (Each line received has its own timeout)

To do settings with this function the "multi" control is usually the control of choice.
When receiving it might be necessary to use a :readformat: or :readmath: to adjust the line(s) for parsing.

It is not possible to include delays in this string, but adding a ; and then a delay is fine:
volt 5[|]curr 3;[500]
« Last Edit: August 15, 2025, 09:23:06 am by HKJ »
 
The following users thanked this post: KungFuJosh, jmurray, Gulftown

Online Gertjan

  • Frequent Contributor
  • **
  • Posts: 340
  • Country: nl
Re: Program that can log from many multimeters.
« Reply #4397 on: August 15, 2025, 01:23:39 pm »
Hi HKJ,
I wote a configuration file for the Wrytech PDVS 2 mini v2.

PDVS = Portable Digital Voltage Source.
This is a very stable voltage Reference, adjustable from 0V tot 10,22222V in steps of 10µV.


IMG_4449__Wrytech_PDVS_2_mini_V2-2000pix.jpg

The original PDVS 2 was designed by Ian Johnston. It was a Handheld Precision Digital Voltage Source, based on a LM399 with a 18bits DAC.

Later Ian developed the  PDVS 2 further to the PDVS 2 mini. Smaller, cheaper and more precise. (20bits DAC)  A very successful design.
Ian "semi-retired" himself, and sold the design to Wrytech.  They are now selling this current version, the v2. Now with an ADR1399 instead of the LM399, and less noise, and less tempco.


TC-screenshot-PDVS2mini-v10-1000pix.png

With this driver one can set the Output voltage, and read / log the Set Voltage, Internal Temperature, and Battery Voltage.  Additional Status info is read out in the Setup Menu.

More and more, I used an ARB  as a DC voltage generator, to let TestController control other things. Now this PDVS2 mini v2 is not only a very handy Reference, it can also be used for letting  TC control other things. Much more precise and stable then the ARB I was using before :)

Please note: This configuration file is for the PDVS 2 mini v2. Unfortunately Wrytrech made changes to the communication protocol. So this driver won't work with older PVDS2 mini's. However, it won't be too difficult to adjust the device file to the older commands.

Please find the definition file here: WrytechPDVS2miniV2.zip

Regards, Gertjan.
 
The following users thanked this post: Furna

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 4837
  • Country: dk
    • Tests
Re: Program that can log from many multimeters.
« Reply #4398 on: August 15, 2025, 01:45:16 pm »
I wote a configuration file for the Wrytech PDVS 2 mini v2.

I have the original version, I did know about the PDVS 2 mini, but not that it was updated and moved to another source.

It looks very nice with a computer controlled reference, with TC you can easily do a computer controlled sweep and using math channels make a curve that shows the difference between the reference and a voltmeter.

I have added the definition to TC, thanks
 

Online Gertjan

  • Frequent Contributor
  • **
  • Posts: 340
  • Country: nl
Re: Program that can log from many multimeters.
« Reply #4399 on: August 15, 2025, 02:05:17 pm »
with TC you can easily do a computer controlled sweep and using math channels make a curve that shows the difference between the reference and a voltmeter.

Yes, that is exactly what I intend to do when I have the 3458A again at my disposal :).
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf

 

-->