Driving an Analog Output Module of Phoenix Contact with Foxboro IA System


We use 2878696 IL MOD BK DI8 DO4-PAC modbus copuler with these components at this order:<pre>
1- 2878696 IL MOD BK DI8 DO4-PAC
2- 2878447 IB IL AI 4/EF-PAC
3- 2861302 IB IL AI 2/SF-PAC
4- 2861302 IB IL AI 2/SF-PAC
5- 2861315 IB IL AO 1/SF-PAC
6- 2861315 IB IL AO 1/SF-PAC</pre>
We can read first 8 AI values from the module with these registers (40194 40195......40201).

But we can not drive 5th and 6th modules with the registers 40580 and 40581.

Our control system is Schneider's Foxboro I/A system (V8.2) and our Modbus module is FBM230.

When we create a block (IOUT block) it gives an error at 40580 or 40581. Also we tried 40582, 40583 etc...We have no solution.

Could you help me about this problem?
Can you link me the manual to the Phoenix Contact device? Did you use the Phoenix contact software to properly configure the IO?

Do you need an ECB201 for each I/O module, or is the Phoenix Contact 1 addressable device?

What is the error that you see on the default detail display of an IOUT block? W..something? Is the PNT_NO parameter correct?

one ecb201 for phoenix bus coupler is enough. Bus coupler automatically detects added IO modules.

When i try 40585 (also tried 40580 40581....40589), now i have no error. But sometimes Lout parameter turns to blue.

I also tried addresses 30585 etc. When i try this, block gives invalid point address.

I wanted to attach pictures of ICC and manuals of phoenix. I couldn't find how to do it here.


Address 30585 is a Modbus Input address/register.

An analog output value will not likely to be in an 'input register' (by convention), but will be in a Holding Register in the 4xxxx address block.

Function code 04 fetches Input registers at 3xxxx
Function code 03 fetches Holding registers at 4xxxx
Hi Mr David_2;

At PHX's manual it is said that:<pre>
Modbus Register Table
192-383 (16 bit Word)(Analog Inputs) fc4
576-767 (16 bit Word)(Analog outputs) fc3 fc6 fc16</pre>
Yes, my statement agrees with the manual.

If you want to read/fetch analog output values, then you use Function Code 3 to read (4)0576 - (4)0767.

If you want to write to the analog output registers, then you use Function Code 16 (FC16 decimal, FC10 hex) to write the values to Holding register(s) (4)xxxx.

Some masters do not use the leading numeral 4 for holding registers, (4)xxxx, or 3 input registers, (3)xxxx; the master just uses the Function code and the address offset.

The leading numeral is not part of the Modbus message, it's just a convention to allow humans to recognize a data map,

(4)xxxx is a holding register; (3)xxxx is an input register.

An example of the Modbus message that writes two 16 bit word values to two successive 4xxxx registers is here:
Hi zapo,

It's been a while, but I'm wondering if you need to specify something like :U2 or :W1 in the PNT_NO parameter (example (40001:U2)).
Hi mrAnon,

I will try your advice. Could you check bus coupler's manual which I have attached the download link? For first AO channel, should I use address 580?
From a page in FoxDoc:
"Certain DCI block parameters (such as PNT_NO and INI_PT) must be encoded with a data identifier to enable the FBM to identify specific data in the I/O data steam. Refer to the I/O Device Driver."

I would try Pnt_No: 40575:S2:W1 or 40576:S2:W1
assuming signed 16bit integer.

Change S2 for U2 if unsigned. W1 is for byte swapping - try with or without.
Hi All;

Eventually i solved the problem. At phoenix there is Plug & Play mode. This feature helps automatic detection of added IO modules. To write an analog output module, when configuration finished, P&P mode must be OFF. If not, writing to analog outs is prohibited.

I made P&P mode OFF and it worked.

I used IOUT block and addresses 40585 and 40586.

Thank you all for helping me. :D