5/12/2010 12:02 PM | |
Joined: 1/17/2007 Last visit: 8/21/2024 Posts: 1545 Rating: (537) |
Function code 4 is a single or multiple read (as are all read function codes) and can read more than one regsister. In fact in can between 1 register and 127 registers. You specify the start offset and the number of data points (in this case registers) you want to read. I have included the relevent section of the manual below:- [code] SEND Source DB Structure of SEND Source Area: Address Name Type Initial value Comment +0.0 address BYTE B#16#5 Slave address +1.0 function BYTE B#16#4 Function code +2.0 reg_startadr WORD W#16#0050 Register start address +4.0 reg_anzahl INT 3 Number of Registers [/code] The example above reads 3 registers from modbus address 30001 (input register base address) + 80 (50Hex) = 30081. To change the amount of registers to read, simply change the reg_anzahl member. Note each request can only read sucessive registers (i.e. registers that are in one contiguous block). If you want to say read 3 registers from 30081 and another 3 from 30101, you would need to either:- i) Have two seperate requests: one reading 3 regsisters from 30081 and another read 3 registers from 30101 or ii) Extend the request to read 23 registers from 30081 (so registers 30081 to 30103). Obviously, with this you would get some data that you are not interested in (30084 to 30100), and the slave must be able to supply the whole number of registers (23) for the whole request. |
Programming today is the race between software engineers building bigger and better idiot proof programs, and the universe producing bigger and better idiots. |
|
6/8/2010 11:44 AM | |
Joined: 4/28/2010 Last visit: 2/27/2023 Posts: 23 Rating: (1) |
Hi Smiffy, It's me again, I want to clarify some issues in MODBUS Multipoint configuration. I've already created a typical for my communication program,but is it right that I can use an array with a UDT of the send work DB such that for a single CP with a 18 ABB SACE slaves, I'll just change that DB offset for the P_SND_RK? Also, this is the same configuration I'll be doing in the R_RCV_RK such that I'll just offset it so I can acquire the data from different slaves. However as I've noticed when I try to produce the instances, the CP TXLED and RXLED seems to flickers differently and slowly and errors such as 1E 0D, E 32H, and 830H resulted. But if the program is only one " meaning 1 instance is produce" the system works ok and a continuous increment in NDR (new data received) of receive block is obtained. Also, should the EN_R of the R_RCV_RK is always 1 and the REQ of P_SND_RK must be connected to a pulsing bit? I was thinking that a baudrate is a factor in the multipoint config, right now I'm using 19200bits/s. P.S. Attached here are some of the screen shots of my configuration. Looking forward again to your response and support. Regards, PCS7_PHI AttachmentAttachments.zip (241 Downloads) |
Follow us on