
Cap (Customer) asked a question.
This is a Ramble to get the conversation started on I/O Link. It's great stuff, but hard to implement in 'Less Common' PLC's that do not already have Native Firmware for it.
The reason I’m writing this, is I was a fish out of water looking for any information on how to implement all of this I/O Link stuff.. I was determined to make this work.. This is how I did it.
I just Graduated into the BRX Realm a few years ago, from the 205 series.
Presently my View on things comes from a Small Wastewater Plant, Controlled by a BRX/C-More System. Inhouse Design and Built.
Wasteplants are like a Filter Skid.. Lots of Analog Levels with Motors Controlling Levels and Pressures.. Usually done with Freq Drives.
The thing I hang up on, is the ‘Analog Input’.. Presently I get lots of Variable Input that is not necessarily best represented by a 4-20 MA Sig. AND if I have ~60 some odd 4-20 Analog Signals, someone has to land them on a Terminal Strip SOMEWHERE, and make sure they are Secure.
I decided to branch off in to the I/O Link Realm.. Just because of the ‘Not Having to Terminate’ all of the Analog Stuff with a Screw Terminal SOMEWHERE.. We were moving the WastePlant, and a new Control Scheme was needed.. This was my time.
I chose IFM’s I/O Link, as I’m Using a LOT of Pressure Sensors and Flow Meters. AD does not offer I/O Link Flow Meters and Pressure Sensors.
I used the IFM AL1343 I/O Link ModBus E-Net Block to read the I/O Link Sensors. 16 possible blocks located in various cabinets in the plant.
I’m Using the BRX PLC and in Discussions with IFM, the BRX will not do the proper type of E-Net Read Necessary for the IFM E-Net I/O Block, So my communication is through E-Net ModBus to the I/O Block. The AL1343 is the ModBus Version of the IFM Sensor Block.. Through E-Net ModBus.
Here is the Link for the Manual I ended up using for the IFM ModBus Interface.
https://www.ifm.com/mounting/80284137UK.pdf
The IFM I/O Link Block needs to have the E-Net Addresses set using the Proprietary Software called ‘LR Device’.. No Other way to program the E-Net Address. As I remember it was ~$500.
There are TWO E-Net Addresses required for each Block. First one is the Address of the LoT where the Programming of the Sensor Block takes place, the Second Address is of the Actual ModBus Read Address.. I just put them ‘Next Door’ to each other on all my 16 Sensor Blocks assigned to this Project.
The ‘Bulk’ of what I’m interested in starts on Page 82 of the Manual I links to.
How to get the ModBus Channel Information out of the I/O Block.
Generally Channel 1 Data is available at ModBus 1001, and the First 6 Data Registers ( 1001-1007) I put into N100-N105. This data will be.
N100 0 no Sensor, 256 Sensor Good
N101 OK=1 No Sensor =7
N102 Pressure reading in -65534/+65535 [ Edit actually it's -32767 to + 32768 ] That is whay the N Memory Location was chosen.. No Decimal Points.. Value is *10
N103 I Forget
N104 Flow Reading. Same Format as Pressure.
N105 I Forget
Next thing needed is the Type of Sensor is Plugged into Port 1, so the Software knows how to convert it. That Information is Available at ModBus Address 34. I put that into N106 by a separate ModBus Read.
N106 is the Sensor Type..
390 = 0-160 GPM Flow Meter
475 = 0-14.7 PSI Gauge
477 = -15/+15 PSI Gauge
533 = Insertion Flow Meter
964 = 0-33 GPM Flow Meter
This is a VERY awkward read Routine.. and takes a while to write, as I have TWO ModBus Reads Per Channel.. and for my scenario, I’ve programmed 16 Possible Block Read Routines.
The ‘Next Channel Data’ is available at 2001-2007.. then 3001-3007… On up to 8001-8007..
Like wise on the Sensor Type of Data.. 34 is Port 1, 44 is Port 2. On up to 104 for Port 8.
There are other ways to get Data out of the I/O Block, but I settled on this way.. Not any better than any other way, just the way I did it.. My brain could not handle any other way.
After Figuring out what the Port 1 Data was.. and How I needed to Convert it.. I placed it into R1 Location in BRX Memory. I ended up using the BRX R1-R128 for the Converted Port Data of the Reads of all 16 I/O Blocks.
I had Built a 64Channel ‘Analog Conversion Routine’, that takes the 15 or 16 Bit Analog Data from the BRX ‘WX’ Data Memory, and placed it into R memory starting at R501-R564. This Routine has LookUp Tables for the ‘Analog’ Inputs for Range, Start Reading, Calibration, Low Range Error, High Range Error. These Nicknames for the R Memory are Ch1-Ch64 and that is how I ‘Reference’ my Allowable 64 Analog Channels in Program. These initially were for only the 4-20 or 0-20 Ma Inputs.
Initially the 64 Analog Inputs could only be assigned to ‘WX’ Memory Locations for Look Up as to what WX goes to what Ch Number. This allowed assignment of ANY WX Location to ANY CH Number..
After Solving all the Programming as to the ModBus Reads, I figured I wanted to be able to assign them to my ‘Normal’ Analog Ch Number for Programming. Installed another LookUp Table, that would work with the original ‘WX’ look up table. This allowed me to assign ANY Memory Type to ANY of my Ch Numbers used in Programming using the REFRead, REFWrite Instructions.
Now my Modbus Inputs and My ‘4-20’ Analogs can be addressed in Program as ‘Ch1-Ch64’. This also allows me to Switch from a 4-20 and a ModBus Input from my Touchscreen, without having to grab the Lap Top and change programming..
Cap
Thanks for posting. 👍 This will be very helpful for other users.
What version of Do-more designer are you using? In version 2.9 they came out with the Modbus Scanner feature. Take a look at help topic DMD0493.
It processes Modbus Read and Modbus Write requests similarly to the way it handles local I/O and Ethernet Remote I/O. It does this by creating a Scanner Device for any combination of up to 32 Modbus/TCP or Modbus/RTU servers. The Scanner Device can additionally perform any required format conversion on the data, removing the need to add ladder logic to process the data before it is sent or after it is received.
This then saves the profile that can be used in other projects. You can even share your profile on our GitHub site for other customers to use:
https://github.com/AutomationDirect/Do-more-BRX-Modbus-Device-Profiles