LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Project with many streams - LLB fails due to duplicate files

Hello folks,

 

i have a lv project and using in multiple vis the new tag streams. I tried to compile the llb but went into a couple of problems.

 

First of all the instanciate vi for every tag has the same name, resulting in a whole mess of vis separated from the llb, as this is causing naming issues with lv (duplicate filenames on the same level).

 

Secound while compiling the llb, labview is missing files and is searching the whole computer but there are no vis missing. I suppose this is caused by the naming issue and lv moving the files outside the llb.

 

If I ignore the missing files, the llb is built and works. There is no indication of missing files.

 

So my question is: How can I solve this? It seems like creating a stream reader/writer the lv scripting is creating new vis with its respective functionality but does not give unique filenames.

 

Attached you'll find the references list from my project.

 

Thank you, nice greetings

 

Nils

0 Kudos
Message 1 of 9
(1,203 Views)

When you say "compile the llb", do you mean that you have your VIs in an llb and that the VIs do not compile and are therefore not executable, or do you perhaps mean that you create some kind of build and create an llb for the VIs?

 

Anyway, Channel wires don't handle naming or namespace change well (at least they didn't in LV2019). I guess that for example channel wires and ppl:s can have issues, and maybe you mean ppl when you say llb?

 

I'm guessing you let the build place everything in a folder but without preserving hierarchy. When building, do you get messages about VIs being renamed?

Certified LabVIEW Architect
0 Kudos
Message 2 of 9
(1,169 Views)

Yes, my source is a lvproj, the destination is a LLB.

 

I don't really understand, what labview is doing. Why are those files in the users/documents folder, and not within the project folder? If someone else pulls this project from git, they are all missing?! Who told NI this is a good idea?

Anmerkung 2022-11-24 135057.png

 

And why can't labview put all files into the llb and is instead creating more and more extern files and folders? (second picture)

git.png

0 Kudos
Message 3 of 9
(1,148 Views)

Is the destination just on big llb with many streams in it? That will probably not work for channel-instances. I would report it to NI though because of course it should work and the application builder should take care of it, or give you an error during the build.

 

Try to at least separate so that you have one llb per "Channelnstances". Or if you need the source code preserved, just have it as a folder with preserved hierarchy.

 

I am curious of what your goal is. Who will be using the llb? An application, other developers,a plugin architecture? If you explain your goal, maybe we can give advice on the best build spec. One big llb is probably not the best solution for most goals.

 

The ChannelInstances are created when another user opens the code. That had some hiccups before LV2020 but I have not seen any issues with it since then. So it should not be an issue.

Certified LabVIEW Architect
0 Kudos
Message 4 of 9
(1,144 Views)

Hi thols,

 

the structure is not that complicated. We build specific test routines for every dut and export this as an llb. Each LLB contains a vi with a test software template, that will be called dynamically by our test interface (executable written in labview). Point is: the vis within llbs can be executed by the labview runtime without the need of having the full development on the test pc. So the llb is part of our "plugin" system. The structure has grown in one and half decade so please don't question it. I'd be the first to change it but that's "none of my business"...

 

however: I just found out vis are being placed in the <extralib> folder, that is per default in the userdata folder. I tried to move the code to the project but this just triggers labview to throw numerous file missing and reference fault exceptions eventually triggering the rebuild of the stream vis. Simply deleting the extralib content triggers it too, so yes, there is no need in caring about it.

 

So eventually there seems to be only one issue: duplicate file names in the auto generated extralib lvlibs (streams).

 

Building the LLB causes a load of warnings:

Spoiler

LabVIEW prevented a file name collision during the build. Duplicate file names cannot be copied to the same destination. You can rename files as part of the build process to avoid name conflicts.

The following files were moved to a unique location:

C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Enqueue.vi
C:\Program Files (x86)\National Instruments\LabVIEW 2021\resource\ChannelSupport\_ChannelSupport\PipeLogic\Enqueue.vi
C:\Program Files (x86)\National Instruments\LabVIEW 2021\resource\ChannelSupport\_ChannelSupport\PipeLogic\SetSize.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\SetSize.vi
C:\Program Files (x86)\National Instruments\LabVIEW 2021\resource\ChannelSupport\_ChannelSupport\PipeLogic\Dequeue.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Dequeue.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Initialize.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Read.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Read.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Read With Abort.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Read With Abort.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\EndpointRead.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\EndpointRead.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Initialize.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Get.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Instantiate.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Instantiate.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Read.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\))Channel.ctl
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\))Channel.ctl
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Read With Abort.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\EndpointRead.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\))Channel.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\))Channel.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Instantiate.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Initialize.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\TagData.lvclass
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\TagData.lvclass
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Get.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Set.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Set.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Tag-FPGA-))Channel-NoOp.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Tag-FPGA-))Channel-NoOp.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Write.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Write.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Write With Abort.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Write With Abort.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Stream-bool\Endpoint.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-t'M-NET-control_F6AE1631_0830DDDA.ctl'\Endpoint.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Write.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Write With Abort.vi
C:\Users\user_name\Documents\LabVIEW Data\2021(32-bit)\ExtraVILib\ChannelInstances\Tag-bool\Endpoint.vi

And also it causes two files declared as missing:

FIND_VI.png

 

Both the "Instanciate.vi"s from the tag streams.

 

If I ignore those items, build will eventually succeed but I don't trust it and can't test it either right now.

 

Filing a bug report is somehow pointless. NI doesn't seem to have tested those new functions properly. Introduced 2020 it still has bugs. My company will not go into the subscription so even if this is a real bug and it will be fixed in 2023, it neither will help me now nor will I be able to use it.

 

I hope I cleared some things out now 🙂

0 Kudos
Message 5 of 9
(1,117 Views)

I understand your situation.

 

If you open a service request, NI can and will try to help you get unstuck. I think you have a very clear case that could easily be reproduced. The downside may be that either you send them all your code or you may need to create a project that shows these issues. The latter should be easy though. Just opening a request with the info in this thread is should be a good start or enough.

 

Some thoughts: you need to create an llb, but do you have to have everything in that llb? Could you have that llb use code that is deployed as folders with VIs, for example, or a zip?


Certified LabVIEW Architect
0 Kudos
Message 6 of 9
(1,099 Views)

Well via a config file i point to the interface vi in the llb. Honestly i never tried to simply give a vi path. The only thing that matters is the labview runtime to be able to run the vis. If they are in a llb, or not, doesn't really matter?!

0 Kudos
Message 7 of 9
(1,096 Views)

Minor quibble about terminology -- Tags and Streams are two very different types of Asynchronous Channel Wires (or "Channel Wires", for short).  There is no such thing as a "Tag Stream".

 

A recent reply to another Post by a recently-retired NI "developer" who knows a bit about Asynchronous Channel Wire... shows two ways you might be able to have your cake (or pie, this being Thanksgiving Day) and enjoy it, too.

 

Bob Schor

0 Kudos
Message 8 of 9
(1,054 Views)

@Nils_Thomsen wrote:

Well via a config file i point to the interface vi in the llb. Honestly i never tried to simply give a vi path. The only thing that matters is the labview runtime to be able to run the vis. If they are in a llb, or not, doesn't really matter?!


It doesn't matter for LabVIEW. Maybe your test interface requires it. If it does, you could for example only have the main VI in the llb and the rest outside.

Certified LabVIEW Architect
0 Kudos
Message 9 of 9
(1,040 Views)