Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations KootK on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

Basler DECS-200N to ControlLogix Prosoft - Modbus

Status
Not open for further replies.

lobear71

Electrical
Jun 30, 2010
7
I'm having trouble writing a setpoint to the DECS-200N via a Prosoft MVI94-MCM module. I am able to read values over the Modbus link (RS-485) but I am having trouble writing a setpoint to it. I continue to get an error code of 3. I'm curious if anyone has had success using a Prosoft Modbus card in a ControlLogix system to write setpoints? Any and all helpful would be greatly appreciated!!
 
Replies continue below

Recommended for you

Haven't done your specific application before but I've used a prosoft modbus scanner on a compact logix to a number of VSD's with out any issues. But modbus error code 03 is as follows:

03 ILLEGAL DATA VALUE A value contained in the query data field is not an allowable value, because it is one of the following:
• Outside min. or max. limits.
• Parameter is read-only.
• Message is too long.

Are you trying to write the voltage setpoint or a power factor setpoint?, What mode of operation is the DECS in?
 
Right now I'm trying to write the FCR setpoint. Once I prove I can get that working, I'll then move on to Voltage, PF and VAR setpoints. The DECS is currently in FCR mode.
 
So your trying to write to address 47621 and 47622, is your address offset correct?, some modbus implementations add 1 to the address. Also this is a floating point value, and the DECS is expecting to see valid data in both registers.
 
This is correct, I'm attempting to write to address 47621 and 47622. My command list is:

[Commands]
# Internal Poll Reg Swap Node Modbus MB Address
# Enable Address Interval Count Code Address Func in Device
START
1 0 1 57 0 247 3 7250
1 1000 1 5 0 247 16 7561
1 1020 1 4 0 247 16 7620
END

The 1st 2 commands work fine, the 3rd one is the problem. As you can see, I only have a reg count of 4 as I'm only trying to do the FCR setpoint right now. My line of code in the ControlLogix is:

COP(TEST_REAL_2, MCM.Data.WriteData[20],2);
TEST_REAL_2 is a "REAL" value
 
What is the actual value of TEST_REAL_2 that you are trying to send?

xnuke
"Live and act within the limit of your knowledge and keep expanding it to the limit of your life." Ayn Rand, Atlas Shrugged.
Please see FAQ731-376 for tips on how to make the best use of Eng-Tips.
 
First - sorry for posting multiple threads. I thought I'd try the the other forum for further expertise - I just signed up for this yesterday so I'm learning.

Anyhow - I have varied the value of "TEST_REAL_2" from 0 to 5000 with no luck in the DECS. I continue to get an error code of "3" - Illegal Data Value.
 
I'm guessing the real format in ControlLogix is not the same as the floating point format used in the Basler, so you get error code 03. A little internet research should help you figure this out.


The link under "See Also" at the bottom of the page may be helpful.

xnuke
"Live and act within the limit of your knowledge and keep expanding it to the limit of your life." Ayn Rand, Atlas Shrugged.
Please see FAQ731-376 for tips on how to make the best use of Eng-Tips.
 
xnuke - thanks a ton!! This website helped. However, I'm still having trouble. I swapped the words (low word first) and I'm able to write the FCR setpoint. Since that worked, I increased my "REG COUNT" in the Prosoft module to 4, so that it would cover the AVR setpoint as well. As soon as I increase the REG COUNT to 4, I get an error code of 3. I then tried to set up a separate command just for the AVR setpoint, but had the same outcome. Any ideas?

[Commands]
# Internal Poll Reg Swap Node Modbus MB Address
# Enable Address Interval Count Code Address Func in Device
START
1 0 1 57 0 247 3 7250
1 1000 1 5 0 247 16 7561
1 1020 1 2 0 247 16 7620
END
 
The first step was to break the "REAL" values into 2 "INT" values - this was done using the COP instruction. Next, the 2nd INT was moved into the first register, and the 1st INT moved into the 2nd register:

Step 1:
COP(SETPT, SETPT_INT[0],2); /Example Setpoint

Step 2:
MCM.Data.WriteData[xx] := SETPT_INT[1]; // Low Word
MCM.Data.WriteData[yy] := SETPT_INT[0]; // High Word
 
Thanks for the feedback. Sorry I didn't reply after my last message. I've been on vacation and away from a computer.

xnuke
"Live and act within the limit of your knowledge and keep expanding it to the limit of your life." Ayn Rand, Atlas Shrugged.
Please see FAQ731-376 for tips on how to make the best use of Eng-Tips.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor