CI Pipeline To Control Versions to Productions

Blogs, LabVIEW Blog
Embracing Continuous Integration for LabVIEW TestStand Projects After months of advocating for improved control and audit readiness in our software releases, our proposal to introduce a CI pipeline for all production test software (built on the LabVIEW TestStand platform) has been approved! This marks a significant milestone in customer's journey towards more robust, reliable, and compliant software development practices. The need for a CI pipeline became evident through various challenges we encountered with manual processes and fragmented workflows. To illustrate the CI pipeline, the process begins with developers working on their local machines, setting the local experimental builds v0.0.0 to clearly distinguish it as a development version. Upon committing changes to Bitbucket, the build server pulls these changes and updates the change log with commit messages. The build server then…
Read More

CI CD with TestStand Deployment

Blogs, LabVIEW Blog, Snippets
Lately I have been working a lot with TestStand deployment utility to organize the proper release verisoning of TestStand project. One of the consistent feedback of a customer is that they find hard contorl the various TestStand sequence file and numerous versions and dependencies floating around the manufacturing floor. I suggested them to use TestStand deployment utility and put those up in a CI (Continuous Integration) server so that whenever the test engineer changes the sequence, there will be a package spits out from the server with proper versioning. What I really ended up is helping them to setup and burying myself in the mysteries of TestStand deployment utility unknown areas. First thing I came across is the BuildTSD.exe that helps in command line execution for TestStand Deployment utility. I…
Read More

Adventures in LabVIEW GDevCon#4 Developer Conference

Blogs, LabVIEW Blog
Hey there, LabVIEW enthusiasts and curious minds! Buckle up because I'm about to take you on a thrilling ride through the highlights of GDevCon4, the LabVIEW event of the year. Whether you're a seasoned LabVIEW wizard or just dipping your toes into the world of code, this event had something for everyone. So, let's dive into what made G Devcon 4 an absolute must-attend. LabVIEW: More Than Meets the Eye First things first, I need to forget any preconceived notions I had about LabVIEW being confined to the realm of test and measurement. At the conference, I discovered that LabVIEW can boldly go where no LabVIEW has gone before - even to the land of ERP systems! Matthias wowed us with a case where LabVIEW was used to develop an…
Read More

Window Losing Focus

Blogs, LabVIEW Blog, Snippets
TLDR: When any window in Windows OS loses focus after closing a dialog, the best method that works for me to get back to normal behavior is by killing the explorer.exe from the task manager. For safety, I keep the command prompt open so that I can reopen Windows Explorer again if it doesn't reopen automatically. Just pass the explorer.exe command in the command prompt. Quite a few times, I found while working in LabVIEW that when I open some dialogs like VI properties or LabVIEW Options and close those dialogs, focus is lost and my Ctrl+Space or Ctrl+W doesn't work in the previous window I was working with. Initially, I thought it was due to some bug in LabVIEW, but later found that Windows Explorer is taking on some…
Read More

Pipeline: Repository Variables in GitHub Bitbucket for Version Info

Blogs, LabVIEW Blog, Snippets
Recently I've been working a lot with pipelines to automate the build aspects of a LabVIEW framework development and it's quite interesting how it all takes in various directions. To be frank, I think there are too many options when you come into this world from a fixed monolithic application world. Anyways a new learning today is the repository variables used as version info. LabVIEW Project & Version Limitation When it comes to LabVIEW (or maybe in other environments too, I'm not sure), you can save the version info of a built config only to the source file, ie., .lvproj in the LabVIEW case. You can't change this version info in the .lvproj file after your build server builds the executable because you usually don't want the build server to…
Read More

NI-DIAdem & Acquisition History

Blogs, LabVIEW Blog
When I started with DIAdem most recently I felt immediately it's such a powerful tool that I haven't explored. I was intrigued when one of my friends told me that it was originally built by a German company Gfs and later acquired by National Instruments. While searching, I found that pretty much most of the features are very intact including the GUI components from the original software. Here is a glimpse of some of the old docs I can extract. For some reason, NI didn't integrate LabVIEW and DIAdem tightly. Can we consider it as software-killing 😀? Nevertheless, if you have been in LabVIEW and NI platforms for quite a while, never miss a chance to look at DIAdem. I would say the DIAdem market is automotive. A sidenote on…
Read More

Merging LabVIEW VIs with SourceTree

Blogs, LabVIEW Blog
After 10+ years of working in LabVIEW, I finally got to merge one of the projects properly. Though we can use source control like SVN & Git with LabVIEW file types (such as .vi, .ctl), there is very little chance our LabVIEW developers get to diff and merge the LabVIEW file types. This is mainly due to the visual complexity that we go through, the binary format of LV files and real estate needs, and the simplicity of silos in most LabVIEW projects. Of them, LabVIEW merge is very less used than LabVIEW diff. I had some directions on how to apply it for sourcetree from Endigit here but later found that it partly worked. So I customized it further in order to get it working. Here is the working…
Read More

TestStand Execution Aborts Unexpectedly

Blogs, LabVIEW Blog
TestStand persisted data (like a watch window data) could be a reason behind such aborts or stopping of sequence unexpectedly. In my case, I tried to check function AbortAll() in the watch window and ran into an infinite loop of aborts whenever I try to pause the sequence. To add more trouble, it didn't allow me to delete it as Watch View becomes inaccessible (see greyed out below) after sequence aborts. Watch Window in TestStand is executing unexpected functions of TS-Engine To overcome this issue, the Watch expressions are persisted in the TS common app data can be edited in a simple text editor. Open TeststandPersistedOptions.opt found in below path in a notepad and remove the section as highlighted in following screenshot. C:\ProgramData\National Instruments\TestStand 2021 (32-bit)\Cfg\TeststandPersistedOptions.opt Delete the section which…
Read More

Integrate LabVIEW with Python to access SaaS Services

Blogs, LabVIEW Blog
The world is bombarding with SaaS services all over and it's time to connect LabVIEW to the SaaS world. Most of the SaaS service provides Python API and integrating Python API to LabVIEW is gradually becoming a norm. Recently I spoke on GLA Summit 2021 about how we can integrate the LabVIEW with SaaS services with a producer-consumer loop in the python layer. Demonstration Video This video explains a top-level view of how this really works for a simple email SaaS from mailersend. https://www.youtube.com/watch?v=YQeJaod8Ti8 Presentation Slides Here are the slides where I explained one of the Python to LabVIEW integration techniques that I adopted for integrating the SaaS services to LabVIEW. GLA Summit 2021: Python Integration & Door to SaaS worldDownload
Read More

Imperative vs Declarative programming paradigm

Blogs, LabVIEW Blog, New Learnings
This is a series of blogs where I collect some interesting programming concepts, new things I learn As LabVIEWers we're familiar with few programming paradigms like object-oriented (OOP). Have you heard of functional programming?Imperative Programming changes the state of the program. OOP is an imperative programmingDeclarative Programming: doesn't change the state of the program. Functional is a declarative programming Wikipedia has more details on the programming paradigm 2 main principles of Functional Programming Don't mutate. Don't change the state of the program, whatever data comes into the function make a new copy of the function and return the new data without modifying the original data. Keep the function purely independent ie., even if you want to play with the global variables, then pass that global variable as arguments to that function…
Read More