LabVIEW Idea Exchange

Community Browser
cancel
Showing results for 
Search instead for 
Did you mean: 
Post an idea

The current implementation for remote debugging needs two ports to be opened on a stand-alone firewall in between.

  • Port 3580 to connect to the NI service locator on the target machine
  • A random port for the application on the target to connect to
    This port is dynamically assigned to the application by asking the OS for a free one

 

This dynamic port cannot be pre-configured on the stand-alone firewall except by opening up the whole port rang above 1024.

The latter is something no IT person with any sense of security will do !

 

So we need to be able to pre-configure a certain port for the target application, so that we can open a dedicated port for this connection on the firewall as well.

Otherwise this whole remote debugging feature is useless to many companies.

 

There have been multiple cases in the last few years where customers (huge ones) have come across this issue. 

If you are using TCP to communicate to a different code environment, you may want to set some of the socket options. For example, for responsive control, you will want to disable Nagle's algorithm. There is currently no obvious or easy way to do this. TCP Get Raw Net Object.vi in <vi.lib>\utility\tcp.llb will provide the raw socket ID, but you then need to call setsockopt() on your particular platform using the call library node. You can do this with the code provide here. A much better way would be adding a property node to the TCP reference that allowed you to set and query the options directly.

When a client performs an HTTP request to a LabVIEW WebService, if the resource exists but the method is not supported (e.g. PUT instead of GET), the WebService responds with a 404-Not Found status code, giving the (wrong) impression that the resource name is wrong or non-existent. It would be better to have the service respond with a more informative 405-Method Not Allowed or 501-Not Implemented.

To support modern web thin clients, the LabVIEW webservice needs to support the OPTIONS request. When a web browser makes a cross origin request there are a few rules that the response must comply with before the browser will provide with the result to the web application. The OPTIONS request is needed to respond to these requests.

 

A cross origin request is any request where an application running on one domain needs to make a request to another domain. For example, if there was a javascript application running on the domain www.labview.com and it needed to make a AJAX request to api.labview.com, the browser considers this a cross origin request. This is a common setup when the thin client is being hosted by one server, and the webservice is being hosted by another server. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

 

Depending on the request, the browser may issue a "preflight" request. "Standard" requests are GET and POST requests without custom header fields only require the response has an additional headers. Other requests (PUT, DELETE, GET w/ headers, POST w/ headers) require a preflight request. A preflight request is an OPTIONS request. If the OPTIONS request doesn't get an appropriate response, the browser will not even make the actual request. https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

 

For example, I'm starting an application and here's how I'd like it setup.

 

1. Windows PC. This is the central server for the application. There will be a normal LabVIEW application running on this computer. There will also be a web service run on this computer. The web service will mainly host a web application written using HTML/CSS/Javascript (although it could be written using HTML vis from NXG).

 

2. A bunch of CRIOs. These CRIOs will also host their own web service to get system information, measurements, and diagnostics. As new CRIOs are commissioned, they'll report to the Windows PC.

 

Now a user uses their web browser to access to the windows PC. The Javascript Application (which is hosted on the Windows web service) provides the user with a list of all commissioned CRIOs. They then click on one and the javascript application starts to make requests directly to the CRIO's web service. Since these CRIO's are on a separate IP address, the browser flags this as a CORS request. This means that an OPTIONS request can be sent. Since I can't handle an OPTIONS request in a LabVIEW web service, I can't implement this.

 

This is just one example. Another case would be an Apache hosted web application hosted on an Amazon EC2 needs to make requests to a LabVIEW web service running in a different domain. Basically any time a web application (AKA something running in the browser) needs to communicate with a LabVIEW web service you'll run into this problem.

LabVIEW's HTTP Request client currently does not support the PATCH method. This method is becoming increasingly more popular within RESTful API's and has been an officially recognized verb since 2010 (RFC 5789). It should be fairly simple to integrate, since LabVIEW runs cURL under the hood and cURL implements it with curl --request PATCH

 

Not just via Datasocket. All of them, property nodes, programmatic creation, controls bound to, etc.

Selection_002.png

Screenshot from 2017-12-11 16_52_41.png

Is there some intrinsic reason why SVE is possible only on Windows, like (I read) is said for OPC?

Add TRDP (Train Real-time Data Protocol)

 

Train Real-time Data Protocol (TRDP) supports the increasing network requests on board of trains and railways. For more information:

https://sourceforge.net/p/tcnopen/trdp/923/tree/trunk/trdp/doc/TCN-TRDP2-D-BOM-011-18%20-%20TRDP%20User%27s%20Manual.pdf?format=raw

 

[admin edit: added description of TRDP and link to user manual]

NI LabVIEW Database Connectivity Toolkit Windows 10 64-bit
(Using 64-bit Software)
Not Supported.big problem!!!.

regards,

eyal.

Hi,

 

This is not really specific to LabVIEW but I can find where to put this idea...

 

It will be nice to have a function to the dump the value of all shared variables (at least those of standard types) from a target into a file. 

 

It will really help debugging applications as we can ask customers to dump the values and send us the file when they report bugs.  Most of the time, they have restarted the application and we lost important information for debugging.

From:

https://forums.ni.com/t5/LabVIEW/possible-to-change-opc-ua-alarm-limits-at-runtime/m-p/3688481

 

The request is mostly in the title. Right now it seems as though changing an alarm limit requires stopping the OPC UA server. It seems reasonable to expect that users may wish to adjust alarm limits on the fly -- for my use case, tuning the system during a long commissioning process. It might be many months before a system is fully ready to go, and during that time alarm limits change regularly and we still want to report alarms to operators during this period.

It would be nice to improve documentation created by Tools->Import->Web Service... wizard.

Especially, I suggest to automatically create Description in created .lvlib Documentation so that it would be immediately clear which WSDL URL is handled by that library. Currently, WSDL URL is only placed as a String constant in Open Web Service.vi which is not really convenient.
Thanks for understanding and support.

As far as I understand the philosophy of RESTful services, one should also be able to address the same web resource with different methods, e.g. GET and PUT.

 

As a practical example, suppose I'm creating a REST API for controlling a data acquisition board, and I implement a method such as:

http://.../acquisition_board/sampling_rate

Here it would be desirable to use the GET and PUT methods on this very same resource, in order to retrieve the sampling rate (GET) and set the sampling rate (PUT).

 

At the moment, LabVIEW WebServices only allow to set a unique method for each resource, whereas it would be useful to allow multiple methods on the same resource, as shown in the example above.

The Set HTTP Response Code VI allows to insert a custom HTTP response code, but does not allow to insert a custom text description of that code.

It would be useful to have a string input that allows to insert such description.

I have been recently asked by NI to answer a poll about what feature I would like to see as far as data management and access and at that time, I didn't really think about mentioning something which is dearly missing in LabVIEW: cloud storage access.

The reason for this request is that increasingly, files used by collaborations cannot always be copied locally (for instance due to their size or because of frequent updates), or managing local copies and updating the central cloud repository is getting prohibitively time consuming and cumbersome.

 

There exist a few attempts in this direction (e.g. GDrive for LabVIEW, a third party skeleton of a toolkit to access Google Drive, or LabVIEW Interface for Amazon S3), but there are some glaring absent ones such as Dropbox, OneDrive, Box or iCloud to name the most popular ones.

As I mentioned before, GDrive is a starting point but is missing some basic features such as folder list, comments, etc.

I cannot comment on Amazon S3, as I don't use it.

Obviously, there is no way to predict which cloud storage solution will disappear in a few years from now or which one will pop-up tomorrow and become popular, but most of the work has been done by those vendors, who provide .NET API for their cloud solutions (maybe not Apple) or at the very least a RESTful API. These APIs could of course be made community projects (like GDrive is to some extent), but their importance would seem to justify a minimal investment from NI.

 

 

As we increasingly integrate with HTTP servers the LabVIEW functions appear more and more limited.

 

Authentication is a major concern and in enterprise environments one option is NTLM (or Windows Authentication).

 

I would like to see the HTTP client support this as in this case we had to abandon using LabVIEW for the integration.

In Ethernet/IP library actualy not suport to use specail service code only get attribute service code 0EH and set attribute 10H, i suggest to add a new Vi to use special service with inputs (Service code , clas,instance , data(array U8) ) with option to use/not use attribute , and  output as array U8

See attache image

molex.jpg

Interfece to the Microsoft OneDrive Cloud storage.

It would be nice to be able to declare the port number of a web service in the service locator, so clients could be a little more port-agnostic. Extra points if we could bootstrap it such that the URL required to hit the web service didn't require a port number at all, and the port could be resolved via the Service Locator. But I would settle for a way to do a manual two-step process to request the port number by name and then use that number when building the URL.

 

The current low level implementation of TCP functions only accesses a data stream, but not the raw data of the tcp telegram. It would be nice to have a low level TCP "Read/Write Telegram" function to get additional information from header or footer, like time stamps. Maybe as a buffered stream, like the current functions.

 

The resulting cluster could look something like this:

http://www.cisco.com/c/dam/en_us/about/ac123/ac147/downloads/customer/internetprotocoljournal/ipj_3-2/images/figure01.gif

About the function palette session in (Connectivity -> Webservice)...

 

The function generate a cookie, but we cannot change the name of the cookie (random value) or the property http only.

It would be nice to have more access to the structure of the cookie.

 

An other issue of this palette:

If I use the function Get Session and Destroy Session the http request of the client application (or browser) ends with a bad request, while the cookie is deleted from the client.

 

kind regards 

 

Christof