Showing results for 
Search instead for 
Did you mean: 

Question about Custom Periodic IO Servers

I have some single-precision.  Are they also converted to 'variant', as stated here: (From Labview Help)


Use double-precision, string, and Boolean data types when you create a VI to convert into a custom I/O server. These data types are the most efficient to use when publishing data items. LabVIEW converts other data types to variants, which can slow down the performance of the server.


0 Kudos
Message 1 of 10

Hi Gretchen,

It looks like you are looking at the LabVIEW Help File titled Using Periodic I/O Servers (DSC Module). Is this right?  If you are using single precision numerics in a cusom I/O server, they are being converted to variants.  If you aren't experiencing slower than required performance, there is no reason to change data types, but if you are, you will want to move to double-precision to remove that additional processing overhead.

0 Kudos
Message 2 of 10


Thanks for your comments.

Yes, I am Using Periodic IO Servers with the DSC Module.

I have changed all single numeric values in my IO Server to double (all 48 of them!).  However, I have a couple more questions/comments.

There were two reasons I had originally specified the output values to be single 1) because the subVIs given to me by the manufacturer of the flow monitors/controllers return the readings as single, and 2) I am storing the values via the DSC Module (Citadel DB) so I wanted to save disk space - the values change with every reading, which is every 8 seconds.  


Thus, should I modify the manufacturer's subVIs to return double to avoid single-double conversion at that level?  


In addition, the shared variables in my library/process that are bound to the server output values (doubles) are single.  Is that okay?


I just noticed that, even though I have the library shared variables defined as data type single, Distributed System Manager has them listed as double!



0 Kudos
Message 3 of 10

Hey GretchenSkellyZimmer,

It is up to whether you want to go into the VIs and change the output values to doubles.  As long as the values being monitored or written are doubles, you should be fine.  Regarding the variables in your library that are bound to the server output values, you can leave them as singles if you would like to.  I would want to keep everything the same time for consistency, but I don't see any glaring issues with leaving the library as a single type.  You will obviously limit your range of valid data points, but that is up to you.


You commented that DSM (Distributed System Manager) sees that values as doubles.  This makes sense since your IO server has the values interpretted as doubles.  This is what I would expect to see.

0 Kudos
Message 4 of 10

Thanks for the info.  Another question!!!  I actually have a total of 5 I/O Servers, communicating with different com ports, etc.

I have to have them launch in a certain order, so I have a Windows system service that launches first, upon reboot, and that task deploys each library associsted with the IO Servers.  I have come to the conclusion that I have to launch the library we have been discussing first.  If it is not first, it does not launch properly - I get Error Code: 1003.  As I said, it does return alot of values - 48 of them, mostly double, some string.  But otherwise, I have tried to make it as simple a VI as possible.  Any ideas as to why it has to be launched first?  I would really rather it be the 2nd one.  I have a I/O Server that controls an APC Switch, and one outlet on the switch turns on the power for the monitored hardware points, so that one really needs to launch first.


I might as well post my other question/concern.  My last IO Server is one that does not talk to any hardware.  It reads values from the other servers, does some math, and returns the values.  It contains my alarms variables.  It has no shared variables.  I read the variables via Open Variable Connection / Read Variable under the Shared Variable Node palette.  It runs properly if I launch it manually, but I get Error 1 when my Windows system Service launches it.  It contains no other subVIs besides the Shared Variable VIs I mentioned.  The IO Server VI only returns 4 values.  The rest of the shared variables in the library require no calculation, so they are bound to shared variables in other libraries - which have already been deployed by the time my Windows System Service launches this last one.  I have waits in my system service, to ensure that the other libraries have been launched.



0 Kudos
Message 5 of 10

Hey Gretchen,

Its hard to say for sure exactly why your Windows system service can't deploy the libraries.  Error 1003 status that the VI trying to be run is not executable.  Apparently in your system, if you try to deploy the libraries from that service, there is some interference.  Is this a service you created to deploy the libraries?


Error 1 states that an input parameter is invalid.  Typically this occurs if a file path contains something like a ? or an @ symbol or something of that type.  It's totally possible that for some reason, the service is not launching the variable with an absolute file path aka C:\etc etc etc.  It sounds like this is another service you built, is this right?  Is there a reason you can't manually launch all of these servers and variables manually instead of using a service?  Also, your shared variables should be launched with the Shared Variable Engine, are you trying to deploy them again?

0 Kudos
Message 6 of 10

This is the one that returns an Error 1:

(the comment at top-right is just a reminder to me)



Yes, it is a custom IO Server that I built.  As you can see, it is very simple, and does not contain any invalid paths.

Yes, I am trying to launch it from my Windows System Service.  It is the last of six that I am deploying.

The reason I am deploying them from the service, as opposed to letting SVE launch them is because I need to launch them

in a specific order.  In addition, I have to have all Custom IO Servers launch automatically upon reboot - so I cannot depend on always launching them manually.  This Project VI monitors tritium, and must come up after a reboot without user interaction.

0 Kudos
Message 7 of 10

Hi Gretchen,

I wasn't able to clearly see the VI from the image you posted, is there anyway you can post your project for us to take a look at?


Additionally, let me clarify a few things to make sure I have a clear picture on the issue.


You've built several IO server that are launched through a LabVIEW exe.  That exe is being launched by a system service that you've built.  Is this right?


Do you know if you have a service contract with us?  This specific issue may be easiest to work through via a slight more direct method.  I primarily ask because if there is an actual service request, it is easier for me to escalate this issue to one of our LabVIEW experts, etc.

In the short term, can you confirm my above statement, and is it possible for you to post your code for us to look at?

0 Kudos
Message 8 of 10


I will attach & send a copy of all of my Custom IO Servers, eventually!

Right now, I have one more question:

If I have 5 Custom IO Servers, in what order does the SVE launch them upon reboot?  alphabetically? or perhaps the order in which they appear in the Project?


0 Kudos
Message 9 of 10

Hi Gretchen,

I'm not 100% positive, but I believe the IO Servers are launched alphabetically.  It is entirely possible that the IO Servers are launched based on the order they are cached, but like I said, I'm not completely sure.  If these IO Servers are being launched by a a system service such as the Shared Variable Engine, the order is going to be dependent on how the SVE caches the servers as part of a file somewhere.  I'm going to need to get in touch with one of our developers from R&D to actually determine if there is a predefined order or if this is something that is not predictable.


Give me a little time and I will see what I can find.  So you know, a question like this is usually best supported through a service request as it will take some time to get in touch with our developers to get this information and the escalation process is MUCH more streamlined.  If you have a support contract, you might want to try calling in to our support line and getting help from one of our Applications Engineers through that route.


In the mean time, I will see what I can find.

0 Kudos
Message 10 of 10