Industrial Communications

cancel
Showing results for 
Search instead for 
Did you mean: 

CAL 9500P Temperature Control Modubus RTU >> Connecting LabView 2013 to controller

We have a test machine using a CAL 9500 P temperature Controller using Modbus RTU. Temperature is defined as a 001C Hex address. We set up our modbus to have a variable 300028 (input register with 028 as the decimal for 001C) We linked it to the network address 300001-6XXX un16bit. We are trying to read temperature on a numeric display. The Master and the slave are clearly communicating since we aren't getting an error, but we aren't getting a value for the return. Any suggestions?

0 Kudos
Message 1 of 11
(7,886 Views)

The I/O servers use a 1-indexed address space (hence the reason it is 300,001 not 300,000). Modbus addresses are defined as being 0-indexed. That is, register 1 is at address 0. I/O servers operate on the register number (1, or 29) not the address (0, or 28).

 

If you just link your variable to 300029 you should be OK.

Message 2 of 11
(7,849 Views)

We tried this. We were not getting errors, but the return signal was not being displayed. Our block diagram was the i/o > numeric we had a time denomination and a stop TF. When running, no values would appear in the numeric window.

0 Kudos
Message 3 of 11
(7,840 Views)

If you open distributed system manager, you should be able to look at some of the details of the I/O server, including errors, timeouts and the like. You can also request that the server access specific registers without having to reconfigure your variables in the project.

 

You might also try the separate library, version 1.1.5.39, from here: https://decibel.ni.com/content/docs/DOC-30140

It isn't as easy to use as the I/O servers, but it may give you a better idea of what is going on. You should  be able to just use the master example and change the "read input registers case" to have a start address of 1C (the API uses 0-indexing). 

Message 4 of 11
(7,835 Views)

Alright, we got it set up. 400029 started working. We tried that last time and didn't but we can't figure out what we are doing differently. So now we are collecting data, and getting an accurate numeric value for temperature. I read that the data is being collected in the "Citadel" or what not and is an obscure file type. How should i set up my VI/ Block to save data or collect data in a type that would be most useful? We will run these collections to take one data collection every minute/every day.

0 Kudos
Message 5 of 11
(7,815 Views)

Citadel is a database which can be accessed through NI MAX or through an API in the product.

 

If you have LabVIEW DSC (it sounds as though you do) and you have an existing relational database (ie Oracle, SQL server, etc), you can log directly from DSC. Help is here: http://zone.ni.com/reference/en-XX/help/371618F-01/lvdscconcepts/dsc_relational_db/

 

Since it sounds like the rate is extremely low, the easiest option is probably just "write to measurement file" which lets you select a "measurement file" (CSV with a special header), TDMS (binary file which can be loaded in excel or diadem), or an excel xlsx file.

0 Kudos
Message 6 of 11
(7,812 Views)

Why can't we log the data locally. We have DSC, but all I want is it to save to a folder on my C: drive.

0 Kudos
Message 7 of 11
(7,797 Views)

Attached images are how I am trying to set up the write to measure. My issue it's saying is the integer being produced and logged is different from the data type I am trying to record. The numeric value is temperature. I am trying to log that in a .CSV. I configured the Write to Measure. I have an idea of how to set it up, but our output numeric has no output node to send to the write-to-measure. See attached.

0 Kudos
Message 8 of 11
(7,795 Views)

It looks like you are writing to an xlsx file, not a csv file. In addition, you are only writing one sample every time you run the VI, since your write to measurement file is not in the loop. I've attached a few examples of how you might do what you want.

 

0 Kudos
Message 9 of 11
(7,775 Views)

 

Alright, so we used the NI MAX to at least show our data being logged. We want to create a block/VI that takes the data stream from the designated test unit and data URL and have it show a graph in the VI. We want to set parameters so that if it falls out of the temperature range, it will alarm. We also want the block/VI to have  the functionality to save to Excel files when we want by also selecting the date range we want. Here's how I started.

 

Attached is the VI, is this the correct way to start it?

0 Kudos
Message 10 of 11
(7,741 Views)