Modbus tcp/ip write.

I've got an iologik e2240 Moxa device and I'm using a Modbus protocol via TCP/IP to communicate with it. Using the NI Modbus Library, I have no problem with reading coils and registers but when it comes to writing any data to device, the MB_Ethernet_Master_Query.vi is returning an exception code 6 ( Busy, rejected message).
I got to know what Modbus is yesterday so I am a complete newbie.
Does anybody know why this exception occurs ?

06/0x06 Busy, Rejected Message Specialized use in conjunction with programming commands.
The server (of slave) is engaged in processing a long-duration
program command. The client (or master) should retransmit
the message later when the server (or slave) is free.
Kudos and Accepted as Solution are welcome!

Similar Messages

  • Write values to PLC addresses via MODBUS/TCP

    I am trying to write values to some addresses on a PLC connected to my computer with MODBUS/TCP. I've mapped the addresses that I would like to write to on my project's MODBUS library as shared variables. However, I seem to neither be able to read from nor write to them these addresses. I've tried viewing the variables in LabVIEW's Distributed Systems Manager and the variables, when configured as read-only or read/write, report an unknown value, and when configured as write only, they do not display a value.
    I've verified that the PLC is connected properly, and I am able to read from other addresses on the PLC that I do not wish to write to. There also does not appear to be a communication error either. I have also successfully read from and written to the addresses using a third-party application, but for some reason, Labview will not do the same.
    Any suggestions on what might be wrong?
    Thanks!

    Hello Griffon,
    How did you set up your Modbus I/O Server? Did you follow the steps in this document?
    Connect LabVIEW to Any PLC With Modbus
    Make sure when setting up your server that you put in the IP address of your PLC (not localhost, or 127.0.0.1). 
    Also make sure that you're adding variables using the "create bound variables" dialog.
    If you did set everything up in that way, and it still not working, can you clarify what you mean with this sentence?
    "I've verified that the PLC is connected properly, and I am able to read from other addresses on the PLC that I do not wish to write to"
    Does this mean that you can read values out of the PLC using modbus, just not the values you want?
    Colden

  • 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

  • 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 with Beckhoff (Wago)

    Hi,
    I'm looking for examples/how to/lib/dll to build a communication to a Beckhoff BK9000(similar to Wago 750) which have a Ethernet - Modbus TCP Option.
    I'm able to write via LabVIEW-TCP-Functions but only once after powering on and the result/answer is more confusing.
    For the lookout OPC variant i heared there is still some additional software needed - true? or is it possible to set up the communication with lookout OPC without third party driver?
    Thanks for any help
    Hans

    Hi JAMR,
    There are plenty of examples that setup up the tcp server communications. If you open up the NI Example Finder and double click on the Networking Folder (under the Browse tab). You can then select the TCP & UDP folder and find several examples that use TCP. Also, there is a great knowledge-base article that provides information about network communication with TCP/IP messaging protocol. Essentially, what you are going to want to do is establish basic connectivity between the computer and the device and then assign the device an IP address. Before you do anything with the driver for the device, you might try to ping the device first. Once you can get this working, then you can set up the TCP/IP communication. I hope this helps!
    Carla
    National Instruments
    Applications Engineer

  • MODBUS/TCP in CVI

    Dear All,
    I need help to write MODBUS/TCP coding to read data from a third party device.
    The deveice is getting connected with help of "ConnectToTCPServer" function. But i am not able to get the data from the module. Any idea how to send the qurey and get the data.
    regards,
    Kumar.E

    Hi Kumar,
    I have a few questions that will really clear up a few things for me. Are you actually using Modbus or are you using the TCP functions in CVI? What are you trying to do, basically what do you want to be able to do? The actuall functions that you need to call should be in your device manual. Do you have this information?
    We have a Modbus library for LabVIEW but we do not have one for CVI. Please reply with more information on what you are trying to do.
    Regards
    Krista S.
    Applications Engineering
    National Instruments

  • 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  

  • Modbus TCP/IP configuration steps

    Hi everybody.
    I have an application where I have to connect a robot with a NI CVS1455. Both, robot controller and NI CVS support Modbus TCP/IP communication protocol, so, I want to configure robot like “Modbus master” node and compact vision system like “Modbus slave” node.
    I have downloaded the NI Modbus library (I’m using LabView 8.2) and I’m trying to understand how Modbus communication works with NI products using my computer (instead the robot controller) and CVS. To do that:
    - First, I have configured in “VI Server:configuration” the right TCP/IP address and, then, the port as 502
    - I have enabled the access for both, computer and CVS, in “VI Server:access list”
    - I have deployed the Modbus slave program (VI) in CVS
    At the moment when I start the Modbus master program (VI) in my computer I receive first “error 66” and then “error 62” .
    I have already tryied to use “TCP Communicator Active and Passive Vis” and the communication is ok.
    I think, I’m making some mistake in Modbus configuration. I didn’t find NI Manuals that explain step by step how to configure the different panels for Modbus TCP/IP communication, moreover, the Modbus functions don’t have the context help.
    So, my questions are: 
    a) Can someone, experienced in Modbus, give some advice about my problem?
    b) There is a manual or an “application note” about the “configuration steps”?
    c) Can I use “shared variables” in a “NI Modbus slave” device even if the “Modbus master” isn’t a NI device?
    Thank you in advance.
    Michele
    AUROS-Ing.Michele Rossi
    Software e Tecnologie per Automazione

    Modbus is used to read and write registers in slave devices. The master in your simulation should be the device reading and writing the registers, so if the CVS is supposed to read data from the robot, you need to reverse what you're doing.
    In general, Modbus has nothing to do with the VI server. You can change the VI server settings back to their original values (port 3363).
    The NI Modbus library has two example VIs - one for the slave device and one for the master. If you want to simulate this, you need to run those examples in their respective locations and give the master example the IP address of the slave.
    Of course, in any case you need to know which registers you're going to read and write, but those are device specific.
    Try to take over the world!

  • Tcp/ip write help - need to send a motor command with parameters

    hello - i have one small, main labview 7.0 vi that i use to control a drill's two motors.
    right now i press a button on the front panel to move the motor, and when i do, a sub vi window pops up so the operator can set a couple of parameters and press an ok button.....the vi then sends the command with the parameters to the drill's motors.
    i am trying to change it so i can send the move command from another computer, in another room, while the main vi sits on the computer with the drill. i know i will use TCP listen, write, read, and close in both the main vi (the TCP server?) and the client which is on the remote computer.
    my problem is with setting the parameters for the subvi's that usually pops up. how do i set the parameters from the remote-client and have them be sent into the subvi on the main vi. if i can do this, i would have to also have a way to close the sub vi after it pops up in the main program too.
    OR should i use something else like and application reference or an invoke node function?????
    please help
    thanks!!!!
    sam

    Hi again,
    If the VI in the lab will be running continuously, then you will need
    to alter some things from the example I sent you or look at an
    alternate implementation. The example I sent you assumed that the VI in
    the lab was not running. This technique actually starts the VI and runs
    it somewhat like a subVI. It inputs values into the connector pane,
    runs it, and then returns values from the outputs on the connector pane
    after it finishes executing. It will not work to call a VI by reference
    if it is already continuously running.
    Instead I imagine you would want to have your VI in the lab have some
    sort of State Machine that polls a certain control value, such as an
    enum control, to determine which state to execute next. You could
    modify the technique I first sent to still open a reference to the VI
    in the lab, but it wouldn't try to run it. Instead you could use the VI
    method Set Control Value to set the value of a certain control or
    controls in the lab VI to certain values. The VI in the lab would then
    hopefully be in some Idle state where it polled one of those control
    values continuously to decide what to do next. That would allow the VI
    in the office to programmatically send commands to the other VI, as
    well as parameters for those commands. Simply set control values for
    the VI in the lab and let the VI in the lab go about its business. I've
    attached an example below.
    That's just one idea. Other options you have would be to use a
    DataSocket connection to send parameters and commands back and forth
    between computers. This is a pretty simple API to use. If you have
    LabVIEW 8, Shared Variables are an option. Or you might look into
    simply using Remote Front panels, which allows you to connect to a VIs
    Front Panel across the network. You could then have the whole VI in the
    Lab, but you could connect to it, view it, modify the controls and so
    on from your office. If you want to view and control a VI without
    having LabVIEW installed on the viewing computer, you can use the Web
    Publishing Tool to create a web interface for your front panel. Lots of
    options. Let me know what sounds interesting.
    Jarrod S.
    National Instruments
    Attachments:
    Lab_VI.vi ‏29 KB
    Office_VI.vi ‏51 KB

  • 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

  • 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

  • MODBUS TCP Error 56

    Hello,
    I am having trouble with MODBUS TCP communication.  I am trying to read the input registers on a master.vi after a slave.vi has written to it.  Attached you will find my slave and master vi's.  I have made sure I had the correct IP address, same starting address for master and slave, and also the same port number.  The input register is array size 4 and I've also wired that in on the master for the quantity to read.  Could someone please give me some pointers?
    Greatly appreciated!
    Attachments:
    Master.vi ‏15 KB
    Slave.vi ‏13 KB

    I found my problem.  I was missing the TCP communication in the slave.vi.
    Thanks

  • Watlow PM with Modbus TCP

    Hi community,
    I have a watlow pm temperature controller connected to my computer with an ethernet cable. I need to communicate with the device via modbus tcp. I know for sure that the unit is functioning as if I use a modbustcp test program (see the first attachement), then I can read the temperature of the K type thermocouple which is connected to the unit. (the IP is 192.168.10.3, and I read two words from address 360). The temperature on the screenshot is 23.61992C
    I would like to do this from LabVIEW by using an IO server. My problem starts at the beginning. I right click on my computer >> new >> I/O server >> Modbus
    then in the popup window I select "Modbus ethernet" in the top right corner. I have attached this popup window. What is the Address in the communication settings section. The IP need to be entered at the bottom, so I have no clue what is the Address field is referring to.
    Then I try to create bound variables... I see a huge list of registers, but honestly I dont understand how the address 360 I use in the standalone program translates to this list. Which one should I select from the list? Whatever I select gives me either 0 or FALSE if its a boolean. According to the documentation 360 is the relative address and the absolute is 400361. Actually there are a register list from 400001-465535, but if I select 400361-400362 I still read zero.
    Reading only zeros and FALSE values... thats suspicious. Something is wrong.
    Please help out with your thought! 
    Attachments:
    modbustcp_OK.png ‏132 KB
    modbus_config.png ‏56 KB
    modbus_reg_list.png ‏98 KB

    OK, just a quick (and dirty) test. Can you try this VI.
    Kees
    Attachments:
    MB TCP test.vi ‏20 KB

  • Is there a Modbus TCP driver built into Lookout ?

    Is there a built in ModbusTCP driver or do I need to add-in a third party OPC server.
    Thanks!
    Greg.
    Schneider Electric.

    The Modbus object in Lookout supports Modbus RTU/ASCII, Modbus Plus, and Modbus TCP.  I am using all three protocols with great success.

Maybe you are looking for