Example Code

LabVIEW TFTP VIs

Products and Environment

This section reflects the products and operating system used to create the example.

To download NI software, including the products shown below, visit ni.com/downloads.

    Software

  • LabVIEW

Code and Documents

Attachment

Overview

The attached VIs contain a partial implementation of the TFTP protocol for a TFTP client (Put File and Get File functions) and can be run on any LabVIEW target which supports UDP. This does not contain a TFTP server implementation.

 

Description

TFTP (Trivial File Transfer Protocl) is a simplified version of FTP and is used to quickly transfer files within a secure environment between networked systems. One common application of TFTP is to retrieve the application that will be run on a real-time or embedded system controller from a server. The controller only contains a simple boot loader, and the boot loader retrieves the application to be run using TFTP from a predefined server location. This allows the system to update the application run on the controller by simply updating the files on an easily accesible server location and there is no need to deploy software to the embedded controller. A more advanced implementation of this use case is covered by PXE (Preboot eXecution Environment) which includes TFTP.

 

TFTP is based on UDP.

 

http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol

 

This implementation support binary mode (octet) and handles NetASCII between two machines using the same OS. The NetASCII implementation does not handle conversion between different operating systems such as accouting for different EOL characters in a file.

 

TFTP servers can be found by searching the Internet and several free servers are available. These VIs have only been tested with one specific server (Tftpd32).

 

Requirements

  • LabVIEW 2012 (or compatible)

 
Steps to Implement or Execute Code

1. Set all parameters
2. Choose a file
3. Select if is it binary
4. Run VI

 

Additional Information or References

VIs Block Diagram

TFTP Get File.vi

TFTP Get File LV2012 NI verified.png

TFTP Put File.vi

TFTP Put File LV2012 NI verified.png

 

Links

http://elqui.dcsc.utfsm.cl/util/redes/TCPIP%20Tutorial%20and%20Technical%20Overview/3376c43.html
http://www.faqs.org/rfcs/rfc1350.html

 

**This document has been updated to meet the current required format for the NI Code Exchange.** 

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  

Example code from the Example Code Exchange in the NI Community is licensed with the MIT license.

Comments
Pechmann
Member
Member
on

Hi ChristianL,

thanks for the VIs.

Worked for me and saved me a lot of time.

Working with the TFTP-Server provided by the BusyBox I found one thing to optimize in the VIs.
The ' NetASCII' string for giving the mode has a space at the beginning.
With this space in the mode string, the BusyBox TFTP-Server always responded 'mode missing'.

Just removed the space (in Put and Get) and everything worked well.

Kind regards,

Ralf

Christian_L
Active Participant
Active Participant
on

Thank you Ralf for noting the error. I have corrected the VIs and reposted them.

Christian

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
iZACHdx
Active Participant
Active Participant
on

The VIs are helpful for binary mode but I'm not seeing where NetASCII is accounted for. From my understading, this implementation is fine as long as the two machines are using the same operating system, but if the file is going between a UNIX and Windows machine, the NetASCII mode will not be proper. In order to convert to NetASCII, an end of line marker should be translated to a CR LF and any CR must be followed by either a LF or null for transmission from a host. Likewise, when the client receives the file, it is the client's job to translate back into its own format in order to comply with the encoding of the file system. Am I missing something?

Regards,

Zach

Christian_L
Active Participant
Active Participant
on

Zach,

Thank you for the comments. You are correct, this is only a partial implementation of the TFTP protocl, and I should have stated that clearly in the original posting. This code was developed for a particular application and is therefore not intended as a product-type distribution.

If you will be updating this code to support NetASCII it would be great to post the updated version in this document.

Christian

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
Sonti_11532
Member
Member
on

can you please explain the difference between host and net adress in TFTP put file.vi. Is it possible to transfer the file from one directory to another directory in localhost?

Christian_L
Active Participant
Active Participant
on

Host is the name or IP address of the remote system that you are talking to. 

net address is the IP address of the local network interface (NIC) that you want to use to make the connection. It is included so that you can choose which specific local network (e.g. wired or wireless) you want to use. 

If you setup a local TFTP server I think it should be theoretically possible to move files locally, but I have not tried this out. Is there a reason you are not using the advanced file functions in LabVIEW for this purpose? They include functions to copy or move files on the local system.

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
Sonti_11532
Member
Member
on

can you forward me the example VI to move or copy the files locally.

Sonti_11532
Member
Member
on

I am trying to put a file in one of our network PC, it is throwing UDP read error. Kindly let me know the procedure how to use this VI.Fut file error.png

Christian_L
Active Participant
Active Participant
on

All of the LabVIEW functions are described in the LabVIEW Help which is available in-product or on the web site. Specifically the File VIs are described here.

http://zone.ni.com/reference/en-XX/help/371361L-01/TOC126.htm 

Examples in LabVIEW can most easily be found using the Example Finder, which is available in the Help menu under Find Examples...

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
Christian_L
Active Participant
Active Participant
on

Error 56 means you are not getting any response from the TFTP server, which means that either you do not have a TFTP server running on the target or some of your IP or port settings are incorrect. 

What TFTP server are you using? The TFTP server should have a diagnostic view or log function that can tell you if it is receiving the request from LabVIEW.

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
mithras
Member
Member
on

Hello,Christian.

I am very happy to find your TFTP VIs.Our company is making a platform that use TFTP protocol to transmmit data.I want know if there are some known BUGs in your VIs?

Thanks.

Miz

Christian_L
Active Participant
Active Participant
on

I'm not aware of any bugs, but these VIs have not gone through any formal testing or certification. They are provided AS IS under the Sample Code License.  http://www.ni.com/samplecodelicense  You should test them thoroughly as part of application to make sure they satisfy your needs and do not introduce any unwanted behavior.

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
mithras
Member
Member
on

Got that.Thanks for sharing~

Best regards,

Miz

Sonti_11532
Member
Member
on

Dear sir,

My PC which is TFTP Client having windows 8.1pro is connected to one of my customized FPGA board which is TFTP server and I am trying to put a file in server using attached VI. When I execute TFTP Put File.vi I received error code 56 which we were already discussed. The same VI is converted to .exe and copied into my test PC which is having windows7 Professional operating system and I executed it is working fine.

Please let me know is there any OS related issues for this VI.

Regards,

S Nagaraju

Christian_L
Active Participant
Active Participant
on

Sonti, 

There should be no OS related issues regarding the basic TCP VIs in Windows, assuming you have the standard network driver support for your network interfaces including IP v4. 

On your Win8.1 PC, do you have more than one network interface (NIC), such as multiple Ethernet interfaces and/or a wireless network interface. If so please try disabling all interface in the Windows control panel, except for the one connected to your FPGA board and try your VI again. Most likely you have more than one NIC, and the LabVIEW TCP function is using a different interface than you intend.

Using the net address input on the TFTP you can specify the IP address of the local interface that you would like to use for the communication. So if you have more than one interface, use this input to select the Ethernet interface connected to your FPGA card.

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
Sonti_11532
Member
Member
on

Thank you very much sir......

Now everything is going fine.

Rus_K
Member
Member
on

Hello. I am trying to use TFTP Put.vi to write binary file to microcontroller.

When I watch network trafic I can see that TFTP request went out, but it only sends packet 1.

After that I get generic error code -1.

I attached screen shot of the setting I set in the GUI. I did try to leave net address blank and with IP address of my system but get the same error.

When I send the tftp command from Command promt it programs MU just fine.

I use Win10 and labview 2016

Thank you

2016-10-28_09h18_38.png

Christian_L
Active Participant
Active Participant
on

Rus, 

Without being able to test anything here, and based on your description it sounds like the micro-controller is not sending the expected or any response after LabVIEW sends the first data packet of the file.

I suggest that you use the Highlight Execution option and Single Point execution to run and debug the VI and see what is going on and where/when exactly the error is occurring.  These options can be turned on in the diagram window using the Lightbulb button in the tools bar at the top of the window and the arrow buttons to the right.

https://www.ni.com/getting-started/labview-basics/debug

http://zone.ni.com/reference/en-XX/help/371361N-01/lvconcepts/debug_techniques/ 

Using the Probe Tool (see Debugging Techniques) in LabVIEW you can also monitor the value on specific wires, to see for example what the response from the micro-controller is after sending the data packets.

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
Rus_K
Member
Member
on

Hi Christian

When I ran in highlight mode I was able to get to the second packet.

I read response back from first packet , but on the second packet I get error 56.

When I run in normal mode it errors out on first packet.

I tried toi increase timeout, but it did not help. Do you think maybe I am missing responce from MCU? Maybe I shoiuld put Read UDP vi in parallel with Write?

TFTP message.png

Christian_L
Active Participant
Active Participant
on

You mentioned that you are able to transfer the file correctly using the command prompt. So I suggest looking at the content of each of the packets and acknowledgements and seeing where they differ when you send the file from the command prompt compared to LabVIEW. I assume the packet sniffer tool you are using can show you the content of each of the interactions.

Also the tracelog seems to indicate that the second acknowledge is not able to be sent from the MCU back to LabVIEW, as if the MCU is no longer able to find/communicate with LabVIEW. What does the tracelog look like when you run LAbVIEW nomally? Do you see the same ICMP error after the first packet?

Does the MCU provide any more information about its TFTP interface/implementation?

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
alexis29
Member
Member
on

Hello,

I have to realize a vi for tftp, I found your proposal which seems really complete but I dont understand various things: 
Remote path?
Net adress?

Is it possible to have some information on their utility please?

Cordially

 

Alexis

Christian_L
Active Participant
Active Participant
on

I have to realize a vi for tftp, I found your proposal which seems really complete but I dont understand various things: 
Remote path?
Net adress?

If you look through the code and the listed references, you should be bale to find your answers pretty easily.

 

Net Address is wired directly to the input of the same name on the UDP Open function. You can look up the use of this parameter in the LabVIEW Help.

 

http://zone.ni.com/reference/en-XX/help/371361R-01/lvcomm/udp_open/

 

Remote Path is the filename and path of the file on the server, i.e the location of the file you are reading or writing.

 

 

 

 

 

 

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX


  
Sinan_Ismael
Member
Member
on

Hello everyone,

 

is it possible to use the example to transfer files between 2 PCs ?? I tried to do that but I got an error:

 

image.png

 

Christian_L
Active Participant
Active Participant
on
is it possible to use the example to transfer files between 2 PCs?

To transfer files using these VIs, you will need to run a TFTP server on one of the computers, and use these VIs on the other computer. This code does not include the TFTP server, so you will need to get it from a different source. e.g. http://tftpd32.jounin.net/

 

authored by
Christian L, CLA
Applications Engineering Senior Manager - Automotive and Transportation
NI - Austin, TX