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

0 Members and 24 Guests are viewing this topic.

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5350 on: December 26, 2025, 09:59:33 pm »
No joy in replaceAll()

However, that led to a simple existing function that perhaps could be exposed?

replaceEach(txt, fromList, toList)

https://stackoverflow.com/questions/9382697/where-can-i-access-stringutils-replaceeach
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5351 on: December 27, 2025, 11:53:56 am »
No joy in replaceAll()

However, that led to a simple existing function that perhaps could be exposed?

replaceEach(txt, fromList, toList)

https://stackoverflow.com/questions/9382697/where-can-i-access-stringutils-replaceeach

It is not a standard Java function, but from some 3. party library that can be installed.

You can chain the existing replace functions, it may not look nice, but it works.

To do the above kind of function the parameters would have to be array, i.e. something like:

replaceEach(txt, array(element1,element2,element3), array(result1,result2,result3))

Of course the array can be build elsewhere and just used in the function.
 

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5352 on: December 27, 2025, 06:43:46 pm »
replaceEach(txt, fromList, toList)
https://stackoverflow.com/questions/9382697/where-can-i-access-stringutils-replaceeach

It is not a standard Java function, but from some 3. party library that can be installed.
Yep. Or perhaps copy in the code? What's it take to code in a new function? You mentioned a programming possibility.

You can chain the existing replace functions, it may not look nice, but it works.
Correct. Making it readable and more easily coded (without a zillion nested parens ;) ) is why I suggested the alternative function.

replaceEach(txt, array(element1,element2,element3), array(result1,result2,result3))

Of course the array can be build elsewhere and just used in the function.
Yep! Hmmm... perhaps I can code up a ReplaceRx loop. Shouldn't be TOO slow.

@HKJ, a couple of QUESTIONS about coding/programming:
a) Do you use any particular coding/debugging environment?
b) Is there any kind of general debug output function (eg that understands data structures etc, and can emit the entire contents of an object without writing a bunch of code to cover each object element or array member, etc)?
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5353 on: December 27, 2025, 07:07:17 pm »
Yep. Or perhaps copy in the code? What's it take to code in a new function? You mentioned a programming possibility.

It is fairly easy to add functions, but I only want to add functions I see a reason for.
Your idea is at the edge, I can see the reason for it, but it can be already be done without that much extra code.


Yep! Hmmm... perhaps I can code up a ReplaceRx loop. Shouldn't be TOO slow.

To get it "fast", make it is a function (See Batronic scope definition).
All script/programming is interpreted and that makes it fairly slow, but my interpreter is two pass, most of the time the two passed it done together, but for functions and some other special cases they are separated. Each pass uses (very) roughly 50% of the time. I.e. for code execute once, it do not matter, but for code executed many times splitting it up can be a significant improvement.

@HKJ, a couple of QUESTIONS about coding/programming:
a) Do you use any particular coding/debugging environment?
b) Is there any kind of general debug output function (eg that understands data structures etc, and can emit the entire contents of an object without writing a bunch of code to cover each object element or array member, etc)?

a) I use Eclipse at the current time, but I have used other. It is not really important, Java is standardized and I try to do my projects in a way that do not lock them to a specific environment (That requires refraining from using some stuff).

b) Sort of, there is 3 functions to dump vars to log window (printLog), console (PrintConsole) or a window (displayVar), the last one has the most advanced understanding of how to display stuff, but the others are not completely hopeless. The first two are based on functionality build into each variable, the last one uses it own code to interpret the var.

 
The following users thanked this post: MrPete

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5354 on: December 27, 2025, 07:19:42 pm »
One more note about my interpreter:

It can run in 3 different mode:

1) Expression, this is one statement that must return a value, i.e. statement with a return value will fail (There are functions to get around this).
2) Program, this makes it possible to write a program, i.e. multiple statements with or without a return value, this mode can return a value, but is not required to.
3) Embedded, this is modeled on PHP, i.e. you can embed code in a text. This mode is not used in TC.


And as you probably figured out from above it can either be execute directly, or pre-parsed and then executed multiple times.

It do not directly support declaring functions, but functions can be added with a function call and they will be pre-parsed. The reason for this "silly" idiosyncratic is that declaring a function while running a script once is rather silly, it is more logical to declare the function elsewhere and then use it from the script. I.e. the script declaring the function is supposed to be run sometimes before the script that uses the function.
 
The following users thanked this post: MrPete

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5355 on: December 27, 2025, 07:30:53 pm »
It do not directly support declaring functions, but functions can be added with a function call and they will be pre-parsed. The reason for this "silly" idiosyncratic is that declaring a function while running a script once is rather silly, it is more logical to declare the function elsewhere and then use it from the script. I.e. the script declaring the function is supposed to be run sometimes before the script that uses the function.

Another note:
Adding a function from Java in Java or in script is nearly as easy as doing it from a script.

One of my requirement to my programming language was that it integrated with both Java and its own programming in a easy way. Java can create and use vars and nearly as easy as you can from script, creating functions are also easy, but using them requires the overhead of running them from script (It do not require much code), they cannot be called directly.
 
The following users thanked this post: MrPete

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5356 on: December 28, 2025, 12:56:32 pm »
@HKJ, I can't get listVars() to produce a result. Have tried a number of variations. Possible regression.  :(
« Last Edit: December 28, 2025, 07:49:28 pm by MrPete »
 

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5357 on: December 29, 2025, 12:28:10 am »
This seems like a VERY basic misunderstanding:

how is the variable "handle" defined? For example, in the Batronix device, it is used in many many places yet never defined, other than #handle -- yet if I try to do that I get "variable handle underfined" :(
 

Online KungFuJosh

  • Super Contributor
  • ***
  • Posts: 5945
  • Country: us
  • TEAS is real.
Re: Program that can log/control many multimeters and other devices.
« Reply #5358 on: December 29, 2025, 01:34:12 am »
This seems like a VERY basic misunderstanding:

how is the variable "handle" defined? For example, in the Batronix device, it is used in many many places yet never defined, other than #handle -- yet if I try to do that I get "variable handle underfined" :(

What is it you're trying to do? #handle is how the device is listed in TC. For example, when I have 5 devices running, I can right-click and select which device I want to be active to access the setup dialog buttons on the Commands tab (first tab that opens when you open TC). The  #handle (Magnova) will be listed among those 5 devices. That's all the handle does.
"Experience is something you don't get until just after you need it." - Steven Wright
Best Continuity Tester Ever
 

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5359 on: December 29, 2025, 03:09:48 am »
What is it you're trying to do? #handle is how the device is listed in TC. F The  #handle (Magnova) will be listed among those 5 devices. That's all the handle does.
Look at the descriptor *.txt file for the Magnova device. handle is also a parameter to many function calls. That's what I am trying to do as well.

I imagined it's defined by #handle, yet that isn't working.
 

Online KungFuJosh

  • Super Contributor
  • ***
  • Posts: 5945
  • Country: us
  • TEAS is real.
Re: Program that can log/control many multimeters and other devices.
« Reply #5360 on: December 29, 2025, 04:47:59 am »
What is it you're trying to do? #handle is how the device is listed in TC. F The  #handle (Magnova) will be listed among those 5 devices. That's all the handle does.
Look at the descriptor *.txt file for the Magnova device. handle is also a parameter to many function calls. That's what I am trying to do as well.

I imagined it's defined by #handle, yet that isn't working.

I wrote the Magnova definition; I know it well. ;)

#handle is exactly what I said, and nothing else. Items like deviceRead(handle, ":CHAN1:STATe?") are not related to or defined like that. That line item:
Code: [Select]
var chan1=deviceRead(handle, ":CHAN1:STATe?");
The purpose of that line is to set a variable based on the device response to the SCPI command :CHAN1:STATe?.

Thanks,
Josh
« Last Edit: December 29, 2025, 05:49:34 am by KungFuJosh »
"Experience is something you don't get until just after you need it." - Steven Wright
Best Continuity Tester Ever
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5361 on: December 29, 2025, 08:12:17 am »
@HKJ, I can't get listVars() to produce a result. Have tried a number of variations. Possible regression.  :(

listVars() has output to console, this means the output is usually hidden, you need to run TC in debug mode and look at the console window.
On command line:

=var a="hello world"
=listVars(a)

On console output:

a={string}hello world



TC programming language do not have the concept of std out, it can return values to what called the program, but it cannot print stuff out. To get around that a few "debug" functions has output directly to console (That is hidden for normal program execution).
TC add some output functions that can print to log window or show a window with output, but that cannot be used on functions that already output to console.

That is also the reason for stuff like:
return1(displayVar(split(getVarList(1),"\n")));

the getVarList(1) returns a list of defined variables. It can be directly used like =getVarList(1) from the command line in TC, the above is for use inside device definitions.
the split() converts it to a array, this gives a better display.
the displayVar() opens a window with the contents.
the return1() secures that the line has a return value, i.e. when used places that requires a return value it will not crash.

You might also want to use the return1() with listVars(), if you use it inside a device definition, but because it has a build in output path, you do not need the other stuff.

« Last Edit: December 29, 2025, 08:34:16 am by HKJ »
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5362 on: December 29, 2025, 08:15:51 am »
This seems like a VERY basic misunderstanding:

how is the variable "handle" defined? For example, in the Batronix device, it is used in many many places yet never defined, other than #handle -- yet if I try to do that I get "variable handle underfined" :(

The variable handle is internally defined by TC in some cases and has the actual handle for the device (That is usually the value defined by #handle).

The parameter handle used in documentation of functions, must have a handle value and can/will be the variable handle in some cases.

The cases where the handle variable is defined by TC, is when programming in a device definition, then it will be defined with the actual handle value for that device.
« Last Edit: December 29, 2025, 08:17:42 am by HKJ »
 

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5363 on: December 29, 2025, 06:00:41 pm »
The variable handle is internally defined by TC in some cases and has the actual handle for the device (That is usually the value defined by #handle).

The parameter handle used in documentation of functions, must have a handle value and can/will be the variable handle in some cases.

The cases where the handle variable is defined by TC, is when programming in a device definition, then it will be defined with the actual handle value for that device.
Hmmm... by any chance:
* For the Batronix device, is it usable because the usage is in a #pgm# block?
* In my case, I was attempting as a direct command, and perhaps that isn't possible?

I am NOT getting complaints when using in a #pgm# block, so that's a win in my book. :)

Next challenge is to get addFunc to do something. I have done some simple yet deep tests and tentatively have learned:
* If I use addFunc() in a #pgm# block, it is ONLY usable in #pgm# blocks. It's not available to Execute in general
* One instantiation of #scpiCmd func #pgm# -- actually runs the #pgm# twice :(

Here i, pretty simplistic. I have the following in my test device file:

Code: [Select]
#scpiCmd testAddFunc #pgm#
  print("Entering testAddFunc\n");
  addFunc("testPete","""
     print("Hello World");
  """);
  print("Done with testAddFunc\n");
#

#scpiCmd testUseFunc #pgm#
  print("Entering testUseFunc\n");
  globalvar isTouched=(testPete());
  print(isTouched);print("\n");
  print("Done with testUseFunc\n");
#

Interactively (in debug mode):
* I type "testAddFunc" and it appears to work, at least no errors in the debug window.
    (ANOMALY #1: based on the print() results, it actually ran twice?!)

Code: [Select]
testAddFunc
;; OEL1530: Tx <testAddFunc>
;; OEL1530: Script start
;; OEL1530: Script end <Entering testAddFunc
Done with testAddFunc
>
;;Entering testAddFunc
Done with testAddFunc

* Let's use it in #pgm#
Code: [Select]
testUseFunc
;; OEL1530: Tx <testUseFunc>
;; OEL1530: Script start
;; OEL1530: Script end <Entering testUseFunc
Hello World
Done with testUseFunc
>
;;Entering testUseFunc
Hello World
Done with testUseFunc

* Now on command line execution, I get Function not found
Code: [Select]
=testPete();
;; Error: Function not found testPete
testPete();____<----____
dk.hkj.script.ProgramExceptions$UnknownException: Function not found testPete
testPete();____<----____
        at dk.hkj.script.Script.getFunc(Script.java:103)
...

That's the result with everything I have attempted, other than additional #pgm# blocks.

My actual use case is using a new function in #askModeMathFormat
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5364 on: December 29, 2025, 06:08:20 pm »
The variable handle is internally defined by TC in some cases and has the actual handle for the device (That is usually the value defined by #handle).

The parameter handle used in documentation of functions, must have a handle value and can/will be the variable handle in some cases.

The cases where the handle variable is defined by TC, is when programming in a device definition, then it will be defined with the actual handle value for that device.
Hmmm... by any chance:
* For the Batronix device, is it usable because the usage is in a #pgm# block?

And the #pgm# block is inside a device definition, i.e. handle is predefined.

* In my case, I was attempting as a direct command, and perhaps that isn't possible?

TC has lots of different contexts that programming runs in and generally vars and functions must be defined in the same context as they are used!
There is a exception to that: The global context, use addFuncGlobal() and it can be used in all contexts, it is the same for variable definitions.
 
The following users thanked this post: MrPete

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5365 on: December 29, 2025, 06:10:21 pm »
I wrote the Magnova definition; I know it well. ;)
I realize that, which is why I referred to your code. What did YOU think the first parameter to deviceRead() is there for? And how was it defined? You didn't define it anywhere.

That line item:
Code: [Select]
var chan1=deviceRead(handle, ":CHAN1:STATe?");
The purpose of that line is to set a variable based on the device response to the SCPI command :CHAN1:STATe?.
Of course. But you skipped an important bit: "the device" is defined by handle. It is a parameter to deviceRead().

HKJ has now clarified: the handle variable is defined in some contexts but not all, at this point. In this case, the device definition file predefines it.

Looks like the same is true for functions. We're making good progress toward understanding some of the more esoteric parts of the system. :)

THANK YOU for your work in that regard, Josh!
 

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5366 on: December 29, 2025, 06:15:25 pm »
@HKJ addFuncGlobal() did the trick. Thanks!

So at this point I see one anomaly: the #scpiCMD #pgm# is actually run twice.

AND, I have another bugaboo showing up sometimes. At the top of the debug window, my test device file somehow produces one more more of the following errors, before execution.

Quote
Definition is not valid: null

There's zero context given. Any ideas how to diagnose such a generic thing, given with no line numbers, no reference to what is being defined, etc?
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5367 on: December 29, 2025, 06:30:08 pm »
@HKJ addFuncGlobal() did the trick. Thanks!

Doing it for you own purpose is fine, but doing it from a device is not nice. Device definitions are supposed to only affect a single instance of a device, i.e. not create anything global.

So at this point I see one anomaly: the #scpiCMD #pgm# is actually run twice.

I expect you are using the command twice, or TC for some reason uses it twice.


AND, I have another bugaboo showing up sometimes. At the top of the debug window, my test device file somehow produces one more more of the following errors, before execution.

Quote
Definition is not valid: null

There's zero context given. Any ideas how to diagnose such a generic thing, given with no line numbers, no reference to what is being defined, etc?

That error message is from a invalid device definition, usually it will display the device name instead of null, but obvious it did not catch a name.

The test for a valid device definition is fairly simple for this error:
Quote
if (idString != null && handleName != null && deviceName != null && devicePort != null) return DefinitionType.Device;
System.out.println("Definition is not valid: " + deviceName);

 

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5368 on: December 29, 2025, 09:44:45 pm »
Doing it for you own purpose is fine, but doing it from a device is not nice. Device definitions are supposed to only affect a single instance of a device, i.e. not create anything global.
Of course. Good reminder.
So at this point I see one anomaly: the #scpiCMD #pgm# is actually run twice.
I expect you are using the command twice, or TC for some reason uses it twice.
I just type the command at the interactive prompt. Once.
At least for now, this is 100% repeatable.

Oh, hang on. I think I may understand... Am I interpreting the output correctly below?

From the debug console:

A. This part is what I typed:
Quote
testAddFunc
B. Then TC is emitting what it did
Quote
;; OEL1530: Tx <testAddFunc>
;; OEL1530: Script start
;; OEL1530: Script end
C. Then this is showing the results "print()" ed...
Quote
<Entering testAddFunc
Done with testAddFunc
>
D. And finally, is this the final debug result or value?
Quote
;;Entering testAddFunc
Done with testAddFunc

Thus, if the above is correct, I am getting two sets of that text because #1 is what was generated by print(), and #2 is the final result?
Is that about right?? :)

AND, I have another bugaboo showing up sometimes. At the top of the debug window, my test device file somehow produces one more more of the following errors, before execution.

Quote
Definition is not valid: null

There's zero context given. Any ideas how to diagnose such a generic thing, given with no line numbers, no reference to what is being defined, etc?
That error message is from a invalid device definition, usually it will display the device name instead of null, but obvious it did not catch a name.

The test for a valid device definition is fairly simple for this error:
Quote
if (idString != null && handleName != null && deviceName != null && devicePort != null) return DefinitionType.Device;
System.out.println("Definition is not valid: " + deviceName);
VERY helpful, thanks. Found it: my editor was saving *.BAK files in the same (Devices) folder.

Suggestion: maybe someday incorporate the filename being processed into startup error messages?

« Last Edit: December 30, 2025, 12:23:20 am by MrPete »
 

Offline MrPete

  • Regular Contributor
  • *
  • Posts: 66
  • Country: us
Re: Program that can log/control many multimeters and other devices.
« Reply #5369 on: December 31, 2025, 03:30:11 am »
@HKJ I suspect I've found a parser bug.

This produces a crash:
Code: [Select]
#scpiCmd defineCustomFunctions #pgm#
addFunc("getModeData","""
  popupShowInfo("Line1\r\nLine2",3);
""");

#scpiCmd getModeVal? #pgm#
  getModeData();

So does this:
Code: [Select]
addFunc("getModeData","""
  var sCRLF="\r\n";
  popupShowInfo("Line1"+sCRLF+"Line2",3);
""");

But this workaround is ok:
Code: [Select]
#scpiCmd defineCustomFunctions #pgm#
  var sCRLF="\r\n";
  addFunc("getModeData","""
    popupShowInfo("Line1"+sCRLF+"Line2",3);
  """);

Version 1 produces this error:

Code: [Select]
;; OEL1530: Tx <getModeVal?>
;; OEL1530: Script start
dk.hkj.script.ProgramExceptions$ExpectedException: Linebreak found before "

____<----____("Line1
Line2",3);

        at dk.hkj.script.Program.nextTokenWhiteSpace(Program.java:576)
        at dk.hkj.script.Program.nextToken(Program.java:680)
        at dk.hkj.script.Script.next(Script.java:112)
        at dk.hkj.script.Script.parseParamList(Script.java:131)
        at dk.hkj.script.Script.parseValue(Script.java:277)
        at dk.hkj.script.Script.parseBitOp(Script.java:326)
        at dk.hkj.script.Script.parseProduct(Script.java:398)
        at dk.hkj.script.Script.parseSum(Script.java:480)
        at dk.hkj.script.Script.parseCompare(Script.java:535)
        at dk.hkj.script.Script.parseLogical(Script.java:571)
        at dk.hkj.script.Script.parseQuestionMark(Script.java:597)
        at dk.hkj.script.Script.parseExpression(Script.java:622)
        at dk.hkj.script.Script.statement(Script.java:1109)
        at dk.hkj.script.Script.doExecute(Script.java:1260)
...

and version 2:

Code: [Select]
;; OEL1530: Tx <getModeVal?>
;; OEL1530: Script start
dk.hkj.script.ProgramExceptions$ExpectedException: Linebreak found before "

____<----____
";
popupShowInfo("Line1"+sCRLF+"Line2",3);

        at dk.hkj.script.Program.nextTokenWhiteSpace(Program.java:576)
        at dk.hkj.script.Program.nextToken(Program.java:680)
        at dk.hkj.script.Script.next(Script.java:112)
        at dk.hkj.script.Script.statementVar(Script.java:944)
        at dk.hkj.script.Script.statement(Script.java:1071)
        at dk.hkj.script.Script.doExecute(Script.java:1260)
« Last Edit: December 31, 2025, 11:37:58 am by MrPete »
 

Offline Fire Doger

  • Frequent Contributor
  • **
  • Posts: 250
  • Country: gr
  • Stefanos
Re: Program that can log/control many multimeters and other devices.
« Reply #5370 on: December 31, 2025, 05:55:47 am »
While I was reading SDM30xxx to create config for Rigol DM858 I noticed that some ranges in capacitor are off by x10.
Just pointing out so someone with more experience and SDM30xxx can double check it...

#cmdSetup comboboxHot Range Capacitance
:write: Cap:RANGE
:read: Cap:RANGE?
2nF +2.00000000E-08  E-09
20nF +2.00000000E-07  E-08
200nF +2.00000000E-06  E-07
2uF +2.00000000E-05   E-06
20uF +2.00000000E-04   E-05
200uF +2.00000000E-03   E-04
2mf +2.00000000E-02   E-03

10000uf +1.00000000E-02
20mf +2.00000000E-02
100mf +1.00000000E-01
:updatemodechange:
 

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5371 on: January 02, 2026, 08:43:35 am »
@HKJ I suspect I've found a parser bug.

This is a bit tricky, but logical enough.

The \r\n is parsed while reading the """ string, i.e. the result that as added as a function is:
Quote
popupShowInfo("Line1
Line2",3);
And the error message is logical enough


You can get around it by using \\r\\n, the double \\ will be converted to a single \ when parsing the """ string and you get \r\n in the function.


 
The following users thanked this post: MrPete

Offline HKJTopic starter

  • Super Contributor
  • ***
  • Posts: 3896
  • Country: dk
    • Tests
Re: Program that can log/control many multimeters and other devices.
« Reply #5372 on: January 02, 2026, 08:50:45 am »
While I was reading SDM30xxx to create config for Rigol DM858 I noticed that some ranges in capacitor are off by x10.
Just pointing out so someone with more experience and SDM30xxx can double check it...

#cmdSetup comboboxHot Range Capacitance
:write: Cap:RANGE
:read: Cap:RANGE?
2nF +2.00000000E-08  E-09
20nF +2.00000000E-07  E-08
200nF +2.00000000E-06  E-07
2uF +2.00000000E-05   E-06
20uF +2.00000000E-04   E-05
200uF +2.00000000E-03   E-04
2mf +2.00000000E-02   E-03

10000uf +1.00000000E-02
20mf +2.00000000E-02
100mf +1.00000000E-01
:updatemodechange:

I can see the issues and has fixed it.
I wonder why the meters has 2mF, 10mF and 20mF ranges, why is there a 10mF range and why is it listed as 10000uF? I supposed it is related to how the meter works, but it is strange.
 

Offline flash2b

  • Frequent Contributor
  • **
  • Posts: 351
  • Country: nl
  • Everything I like about myself is better with you.
Re: Program that can log/control many multimeters and other devices.
« Reply #5373 on: January 02, 2026, 01:21:17 pm »
The additional 10mF is to support the different metadef. There are #removeLine to remove some of them based on each device.
« Last Edit: January 02, 2026, 01:23:04 pm by flash2b »
They say attention is a shovel. It's time to dig 'em out.
 

Offline Messtechniker

  • Frequent Contributor
  • **
  • Posts: 892
  • Country: de
  • Old analog audio hand - No voodoo.
Re: Program that can log/control many multimeters and other devices.
« Reply #5374 on: January 02, 2026, 03:18:10 pm »
Found this Animal: ADC_16_F103R. A 16 Channel 12 bit ADC
similar to its 10 channel brother.
Here some pics with 4.7k:4.7k voltage divider
attched to CH0 for 2,5 V. All other channels left open.

And the matching device definition ADC_16_F103R for the next TC update.
Agilent 34465A, Siglent SDG 2042X, Hameg HMO1022, R&S HMC 8043, Peaktech 2025A, Voltcraft VC 940, M-Audio Audiophile 192, R&S Psophometer UPGR, 3 Transistor Testers, DL4JAL Transistor Curve Tracer, UT622E LCR meter, UT216C AC/DC Clamp Meter
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf