Using modbus tcp/ip to control vfd speed

Hi, I'm brand new to Modbus and fairly new to LabVIEW. I do not have any code constructed yet, so I'm posting to here so that hopefully I can get led in the right direction. I have downloaded the free modbus library because after explaining to NI what I needed, they told me that this would give me enough functionality. I am trying to read the vfd frequency and display it on my front panel, as well as be able to adjust the frequency of the vfd through the front panel. I'm sure that this is a fairly simple and straightforward solution, but since I am brand new to modbus, I really am not sure what values I need to get in order to make this happen. I'm assuming that I need to initialize a tcp master, but what values do I need to feed it so that it can read anything from my vfd? I have an ABB ACS355 VFD with a FENA-01 ethernet adapter. I have the manuals for both and I see lots of parameters and numbers but I don't know how to make sense of them. Are there any keywords I should be looking for in these manuals? Sorry for posting such a general question but I really don't know how to begin this properly. Thanks in advance for any help!

Hello,
A great place to get started will be the shipping examples in the example finder. In LabVIEW, if you go to Help>> Find Examples and the search "Modbus" you will see and example called Modbus Fundamentals.lvproj. This uses shared variables and can communicate with TCP/IP (or ethernet etc) and is set to connect to the localhost. This example also shows how to read and write  using Modbus. There is a readme also included in the project if you need more information.
Additionally, there is a great getting started white paper that may be helpful for you. I've linked it below:
Introduction to Modbus: http://www.ni.com/white-paper/7675/en/
I hope this helps!
Best regards,
Anna L
Applications Engineer
National Instruments

Similar Messages

  • Controlling a Load Drive using Modbus TCP or Ethernet IP

    Hello,
    My name is Francisco Loras. My team and I are looking forward to building a dynamometer in order to obtain test standards for motors. We're going to use a Load Drive in order to control the Load Motor. The Drives we have been looking at are either from ABB or from Yoskawa (a1000), both offer the option of connecting via Modbus TCP/IP or via Ethernet IP. I was wondering if someone has previously worked with them and could give me some feedback on either the drive or connection type. I would preferrably use Ethernet because the complete system we're building requires at least one more ethernet connection (for a Power Analyzer).
    Besides this, we were counting on using a Chassis from NI to put everything together. When looking at the specific modules, we considered two options:
    1- Using an ethernet module (from NI that fits in the Chassis) to drive in both the Power Analyzer and the Load Drive.
    2- Using an ethernet switch setting specific IP addresses. 
    Has someone used any of these before? A switch would be close to 50 times cheaper than using the ethernet module itself so I'm a bit worried there might be something that limits it or that I'm missing (noise maybe?).
    To conclude, I'm looking forward to se if someone has:
    1) Used Ethernet IP or Modbus TCP/IP to control a Load Drive, which connection type is best if any.
    2) Recommended any specific load drive
    3) Experience with using an ethernet switch or an ethernet module.
    Thankyou very much for your help and time,
    Francisco
    PD. If something is unclear (which I sense it is) please ask me and I can develop more on it.

    Florasga,
    Which ethernet module are you looking at? And what kind of chassis are you planning on using?
    There's some more information on Modbus here. Also, have you seen this forum post? 
    Kyle T.
    Applications Engineering
    National Instruments

  • Using Modbus TCP I/O Server with new DSC Shared Variables in LabVIEW 8.6

    Hello,
    I'm using LabVIEW 8.6 and want to communicate with a Beckhoff BK9000 Ethernet TCP/IP Bus Coupler via Modbus TCP. Instead of using the NI Modbus Library, I've tried the new LabVIEW 8.6 feature "DSC Shared Variables" as described at the bottom of this page: Latest NI LabVIEW DSC Module Features and Demos. Reading of analog input bus terminals works fine. However, I haven't figured out yet how to write on an anolog output bus terminal with these shared variables.
    It's about a 16 bit analog output and I need to write to the registers 0x1121 and 0x0801. It works with the NI Modbus Library (just using function code 6 and choosing the registers), but on the other hand I don't know which shared variables I have to choose for these registers. I've tried several data items (e.g. 400001 upwards as well as 402049 for 0x0801) but none of them worked. I would be glad for a short explanation - thanks in advance for your support!
    Regards
    utechle

    The Beckhoff documentation says, that holding registers start with 0x0800. I've checked this by using the NI Modbus Library. I used the "MB Ethernet Master Query.vi" togehter with the function code 6 for "Write Single Registers", changed the settings of the starting address to hexadecimal view and entered 801 (since it starts with a control byte in 0x0800 and the data out word follows in 0x0801). Furthermore, I had to address register 0x1121 in the same way for resetting the watchdog. As I've mentioned in my first post, this method works fine. However, I haven't found out yet which shared variables i have to use for accessing these registers.
    On the other hand, it's no problem to read data from analog input bus terminals using shared variables. They start with 0x0000 (status byte) and 0x0001 (data in word) and I can read data with the shared variable and data item 300001, respectively.
    Message Edited by utechle on 01-27-2009 11:12 PM

  • Using modbus/TCP with USB ethernet adapters

    I have a test stand where I have a handful of USB instruments and a single modbus/TCP slave.  I'm considering adding a USB ethernet adapter to the stand so that there is a single USB cable connecting the computer to the hardware rather than both a USB and an ethernet connection.  Does anybody out there have experience (good or bad) using USB ethernet adapters with modbus/TCP slaves?
    The existing USB instruments all use ASCII/SCPI-style command sets.  The Modbus/TCP slave is an Automation Direct EBC-100.  Nothing high-bandwidth or low-latency.  Basically, the computer issues no more than a handful or command or request (ether SCPI or Modbus/TCP) per minute.
    Mark Moss
    Electrical Validation Engineer
    GHSP

    Adam G wrote:
    Hello Mark,
    I was wondering what NI hardware you are going to be using in your application? Also are you going to be using LabVIEW for the programming? Have a great day!
    Best Regards,
    Adam G 
    The test software is written in LabVIEW, and the test stand uses M-Series cards for data acquisition.
    Mark Moss

  • Problems using Modbus TCP accessed by NI OPC Server

    Hi there,
    i'm using NI OPC-Server to access a measurement module. The buildup is quite easy, my system with NI OPC, a modbus gate and there the module connected with RS485.
    There's a thermocouple to provide me some sample data.
    But there's the point. I know, my data is in the Holding Registers and I can access them, but every data type I'm trying doesn't bring my my data out, just any other (sometimes Huge with e34, sometimes very small like e-13...) sorts, i can't understand.
    The type provided by the module should be single precision.
    In Lookout the address used to be is 41000 in Labview it's just 999 and in the "target" OPC-Server I get some values at 401000 but not useful.
    I also get the same results accessing 301000 in different types.
    Read/Write or Read Only is equal.
    I've tried to tell my OPC that the values are Strings, Floats, Words, BCD and all other possible ways OPC offers me, but nothing results in a usable temperature.
    I hope I missed something and you could suggest it.
    Cateros
    Solved!
    Go to Solution.

    Thanks for your reply.
    in LabVIEW I'm using the provided Modbus Libraries. If I unbundle the Holding registers, my value appears at Holding Register [0], I'm type casting it to single and get the sample temperature. (Address 999->unbundle->typecast->value)
    In NI OPC, I'm reading ( [depends on zero based addressing]  300999/301000 equal to 400999/401000) an already typecasted Holding Register [1] compared to LabVIEW (and the value changes in the second or third digit behind the comma and they are changing at the same time). Data type in the tag is float.
     Another disturbing thing is even if I change in the options "using zero-based addressing in registers" my value does not change.
    If I'm reading two addresses close to each other (as you mentioned 401000-401001) I'm getting an unknown data type and no results. How do I read multiple addresses without such errors? And how do I specify a special register to read?
    Scaling should not be the problem, I am having three ways to get my value (FTP-Server on the gate (just a *.dat file with correct type), software the the module manufacturer (while measuring and configuring the module) and LabVIEW(as can be seen above)) .
    Sadly, I have not found any useable modbus documentation about the module (just it can use modbus, you have the registers, you could read/write and fine)
    When I'm adding a second couple to the module, in LabVIEW Values in Holding Register [2] and Holding Register [3] appear and are changing.
    Cateros

  • How to comminucate with multiple PLCs with Modbus TCP/IP using dynamic multithreads?

    I have an application in which I communicate with several PLCs using MODBUS TCP/IP toolkit. There is an array of IP addresses that the user can configure. Using for loops allows to work with this however if one PLC is out, the program waits for the timeout before polling the next PLC. I would like to use a multithreading type in order that all PLCs are polled at once and is not dependent of each other. In other words, I would like to dynamically simulate several while loops happening at the same time. Is this possible?
    Thanks
    arikb

    arikb wrote:
    Thanks A_Patel,
    I thought of doing that but do I need to run this as a VI server in that case? How would I pass inputs and outputs of the subvi?
    Appreciate the help,
    arikb
    Take a look at my Nugget on dynamically creating occurences found here.
    Just ignore the Occurence stuff and the rest of the code and verbage should help you. The example code creates a bunch of background processes and passes a unique parameter to each.
    Have fun,
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • Access to Cisco Switch Modbus Register Map? via Modbus TCP or Modbus RTU

    Hello Folks, I have been trying to find out how to access the Modbus Register Map(s) of Cisco switches, of particular interest is that of an IE 3000 as it is din rail mountable (but for models 2960s, 3560s are also of interest).  A google search for: Cisco Switch Modbus TCP results in (if I may) how to configure a Cisco 2520 to do what I am trying to do.  I would be very grateful for any hints anybody might have.  Thanks

    Though I am not familiar with the specific drives in question, I have used Modbus/TCP in LabVIEW a few times recently.
    As the previous posters pointed out, there are a couple of VI libraries available.  LabVIEW 2014 added Modbus VI's with the DSC and LabVIEW Real-Time.  The others you would have to get and add in yourself.
    Another option is to use LabVIEW I/O Servers; as long as you have DSC or Real-Time, you can create Modbus I/O Servers as library items and deploy to a target.  You don't get as much direct control in this way (and may run into difficulties if you need them to be field-configurable and do not have DSC) and use bound network shared variables, but they are very fast and easy to setup and I have yet to have any issues with using them in my applications.
    A tutorial on setting up a Modbus I/O Server: http://www.ni.com/tutorial/13911/en/
    A tidbit on deciding between Modbus VI's and a Modbus I/O Server: http://zone.ni.com/reference/en-XX/help/370622M-01/lvmve/choose_modbus_ioserver_vi/
    As for using an Ethernet switch to connect multiple devices, I have used this approach many times to simultaneously connect and control numerous PC's, real-time controllers, and drives without issue.  I would not expect there to be any problems unless you have extenuating circumstances.  In fact, if you only have one network interface on your device at the moment, I would recommend against adding a second, as this would mean that you / your controller would have to be extra aware of which interface everything is assigned to go through.

  • Modbus/TCP Queries

    Hi,
    I am trying to use Modbus TCP to set the time / date on my cFP-2120
    running Labview Real-Time 5.0.1. For this purpose I have set up four holding
    registers that hold two single precision floats, one for the time (format:
    hhmmss) and one for the date (mmddyy). The idea is that each time the Modbus Master writes to the holding
    registers, the time / date of the cFP2120 gets set.
    In my application, I have implemented Modbus communication
    similar to the MB Ethernet Example Slave.vi, which came with the NI Modbus library
    for Labview 8.2. This is also similar to the Modbus tutorial here. Essentially,
    I am reading the appropriate Modbus holding registers using the MB Register
    Manager.vi (also part of the Modbus library) and use their values to set the
    controller.
    The problem arising is that I set the controller time even
    if the Master has not written to the holding registers, which results in
    wrong times/dates. Is there a way to determine whether these holding registers
    have been written to by the Master, so that I can react on it as soon as this happens?
    Thanks,
    Volker

    Devin,
    thanks for the response.
    Your suggestion are a possibility, especially the first one.
    However, as these registers are holding registers (read/write), I was hoping to also post to them the current time by the slave to be read by the master.
    In case the time needs to be synched, the master posts the correct time to the same registers upon which the slave will update its time and again start posting its current time to these registers.
    I realize that the easiest way to accomplish this would be to just use different registers for posting the time by the slave and have the holding registers reserved to be written to by the Master. In a previous implementation in C ( ... please forgive me) I used to listen to the traffic and parsed each message coming in in order to determine whether (a) my device was queried and (b) which function code was used for which registers. Based upon the info I decided whether to just send back the current time of the slave to teh master or take the incoming time value and set the time of the slave.
    How would I implement something like this in Labview? Or am I better off just having different registers for reading from and writing to the slave?
    Volker  

  • Problem communicating via Modbus TCP with Honeywell UDC3200

    Hello:
    I have to read the temperature of the Input 1 of this controllers. I've succesfully read the temperatures in the controllers. I'm using Modbus TCP/IP for the communication through the NI Modbus Library 1.1. I'm working on LabVIEW 8.5.1. However, sometimes when I open the connection, I get error 56 (timeout), despite that the controller responds to a ping. When I can initiate all the connections to the controllers, some hours after the monitoring has started, randomly, I get an error 66 (the connection was closed by the peer). This error interrupts the connection and the temperature readings stop. This is not acceptable.
    Also, I've found out that if you don't request some data from the controllers in 5 seconds or more, also the error 66 appears. To solve this, I poll twice a second the controllers but the error 66 still shows up.
    The controllers and the PC are interconnected via an Ethernet switch. The switch works well.
    In brief, I can communicate with the controllers but the communication is not reliable. Sometimes when I start the communication I get an Error 56 and sometimes after the communication starts I get Error 66. It cannot be predicted when this will happen.
    Why does the error 66 appears?
    Has somebody communicated succesfully with this controllers?
    I'd really appreciate your help, I'm running out of time.
    Thanks in advance.
    Robst.
    Robst - CLD
    Using LabVIEW since version 7.0

    Hello:
    Thanks for answering Pedro. I've read the document you told me to, but it refers to problems with VI Server, the application is not using VI server, so I guess the problem comes from somewhere else. I still haven't figured out why this is happening.
    About the Error 56, well, I'll try to slow down the communication, I'm not doing any delays after sending the information. I wasn't aware that I needed to do this.
    Any other ideas?
    Thanks in advance.
    Robst.
    Robst - CLD
    Using LabVIEW since version 7.0

  • Using Modbus RTU in Labview 8.5 for Terminator Field I/O

    We have on site Terminator: T1H-EBC100 Field I/O's and are trying to use Labview to control it.  We currently use Labview with our NI Fieldpoint modules and RIO's.  We have been trying to find a way to use LabView to control the Terminator Field I/O and it uses ModBus RTU for its protocol.  Does Labview 8.5 support this and any suggestions on getting the process started in using it.

    Our modbus solutions don't work with max. 
    Instead you send a message over TCP/IP or serial with a message for a particular node address. Only the node at that address will respond or act on the message. 
    Modbus is much different that FP in this respect. The modbus specification doesn't require pre-discovery of every node. 
    Additionally, because of this you should be able to send a message to the terminator even though it isn't discovered. You just will be need to configure the address correctly. 
    Jesse Dennis
    Design Engineer
    Erdos Miller

  • Modbus TCP server/slave implementation

    Does anybody have experience to implement a modbus server or slave application? My computer needs to communicate with a PLC. The configuration is: computer is TCP server or slave, PLC is TCP client or master. Computer to write input registers for PLC to read. Computer read holding registers from PLC. Cannot find any labwindows examples.
    Thanks a lot.

    Thank you all for the replies. Most the links are for modbus tcp client (master) instead of modbus server (slave).
    Now I am trying to use a modbus slave activeX control (trial version) from Automated Solutions Inc: http://www.automatedsolutions.com/products/modbusslave.asp.
    I created an instrument driver using Create ActiveX Controller wizard. I can get a correct object (modbusHandle) with the first line below (status = 0). But the second function (set a property) gives negative status return (status = -2147418113).
    status = ASMBSLVLib_New_DASMBSLV (NULL, 1, LOCALE_NEUTRAL, 0, &modbusHandle);
    status = ASMBSLVLib__DASMBSLVSetDataMode (modbusHandle, NULL, ASMBSLVLibConst_DATA_MODE_MB_TCP);
    Did I create the activeX control correctly? Automated Solutions told me that the ActiveX control is a windowless control. It's a runtime control. Is it a problem?
    Thanks in advance.
    jzhu0000.

  • MODBUS/TCP very slow execution

    Dear all
    We are new user to Labview and to LabVIEW forum.
    We are designing a LabVIEW application that interacts with PLCs.
    We are trying to exchange information between a PC/labview and a PLC. Both support the MODBUS/TCP protocole. We have designed the 2 programs easily, the PC/LabVIEW one being easily made with VI Library.
    We first the PC/LabVIEW as a cleint and the PLC as server and it works perfect. It is quite fast as it takes less than 1 second.
    We test the reverse configuration ie PLC as client and PC/LabVIEW as server. Of course we use different programs there and monitor the MODBUS/TCP frames with WireShark.
    It works also but the execution on the PC/LabVIEW is very long (in the debug mode) : it takes 5 secondes to execute the Write Multiple Register function ( 2 data to write) to prepare the response frame and to send it back. It is very nice to see the animation on the diagram but why is it so long ? This long time frame is a very big problem for our application.
    We re not sure to know where to dig in !
    Thank you in advance for your help.
    Regards
    Thierry

    It sounds like you need to learn more about the LabVIEW development environment if you were confused about the slow speed of highlight execution.
    I would recommend looking at the online LabVIEW tutorials
    LabVIEW Introduction Course - Three Hours
    LabVIEW Introduction Course - Six Hours

  • Modbus tcp on c-rio

    Hello everyone. I already wrote an application to control via modbus tcp the plc of my brushless motor. It works fine.  Now i'd like to do the same thing using 2nd ethernet port of c-rio (just set like ni guide). It's possible this application?
    thanks a lot
    Francesco

    Ok, I understand what you would like to do.
    Yes you can do this, as soon as the shared variables hosted on the cRIO will not be served  to both subnets at the same time. I found this information in the following link, under NI Dual Ethernet Technology.
    Introduction to Dual Ethernet Architectures
    http://zone.ni.com/devzone/cda/tut/p/id/7103
    I think that also this example will help you:
    Using Secondary Ethernet Port on a Remote Target for Data Transfer:
    https://decibel.ni.com/content/docs/DOC-8744
    Antonios

  • Communicate through Modbus TCP

    Hi every one,
    I'm new at researching the LabVIEW Software.
    I'm having a thesis in University.
    My project is, use LabVIEW draw in PC a model of automation system. Then, use two Schneider Premium PLCs in mode Redundancy to control and supervisory this model through Modbus TCP.
    I don't know how to Model LabVIEW in my PC communicate with PLC? Do i need any device for that communication (Ex: any Card?...)?
    Anyone used to solve this problem can help me now.
    Thanks all.

    The only HW you need is an ethernet port.
    For the SW, see this discussion about the Modbus libraries for LabVIEW. You will find links to :
     third-party library (SAPHIR)
     current (never really supported) library from NI
     new, not yet officially released library from NI
    I have developped several applications with the second library how still works with the current version of LabVIEW.

  • To run OHS at port 80 using solaris role based access control

    Hi.
    I already know & have done setuid root to ohs/bin/.apachectl to allow ohs to listen to port 80. Now on a new OFM 11.1.1.4 install, I want to use Solaris Role Based Access Control (RBAC) instead. Is it possible? RBAC does work as I can run a home built apache2 httpd at port 80 withOUT suid root.
    On Solaris 10, I enabled oracle uid to run process below port 1024 using RBAC
    /etc/user_attr:
    oracle::::type=normal;defaultpriv=basic,net_privaddr
    Change OHS httpd.conf Listen from port 8888 to port 80.
    However, opmnctl startproc process-type=OHS
    failed as below with nothing showing in the diag logs:
    opmnctl startproc: starting opmn managed processes...
    ================================================================================
    opmn id=truffle:6701
    0 of 1 processes started.
    ias-instance id=asinst_1
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ias-component/process-type/process-set:
    ohs1/OHS/OHS/
    Error
    --> Process (index=1,uid=187636255,pid=25563)
    failed to start a managed process after the maximum retry limit
    Thx,
    Ken

    Just to add my two cents here.
    The commando used on Solaris to assign the right privilege to bind TCP ports < 1024 is:
    # usermod -K defaultpriv=basic,*net_privaddr* <your_user_name>
    Restart the opmnctl daemond.
    After that OHS/Apache user can bind to lower TCP ports.
    Regards.
    Edited by: Tuelho on Oct 9, 2012 6:05 AM

Maybe you are looking for

  • How to get real value from selectOneChoice with javascript?

    Hi, How to get real value from selectOneChoice with javascript? The event.getNewValue() only gets me the index of the selected item, not the value/title. JSF page: <af:resource type="javascript"> function parseAddress(event) alert("new value: " + eve

  • System.exit(0); reboots PC..........

    Hello all, I compiled and ran this program with no problems about 5 or 6 times as soon as I finished writing it. I walked away for about 15 minutes and tryed to run it again. The program runs fine up until the end; now, however, at the System.exit(0)

  • Steel Industry Business Scenario  and Requirement

    Dear Experts, Business Scenario: Material is procured and made Goods Receipt ,Material is issued to Shop floor. Shop floor records the number of cycles or heats the material has under gone  and gives a report to finance . based on report finance inti

  • Image of contacts during a phone call

    I've just updated mi iphone 5, and when i either make or recieve a call, the image of the contact is much smaller than what it used to (Now it's a small circle in a corner).. How can I get larger images back again?? Thank you!

  • Auto Trace in Illustrator CS5

    I am not able to perform the Auto Trace function in Illustrator. When I bring up the Tracing Options dialog box from the Live Trace, my button in the top right corner does not say "trace". It says "set default". I have also seen it said that there is