pturmel
November 15, 2016, 9:44pm
1
Automation Professionals is pleased to announce the public beta for its latest module in the showcase: Ethernet/IP Class 1 Communications :[quote]Provides I/O Scanning and I/O Emulation on top of partial emulation of a Logix processor (Controller Tags and User-Defined data types). Use robust, low latency UDP packets to communicate with Logix processors as one or more I/O modules (passive slave mode), and with a variety of Ethernet/IP I/O modules as an I/O scanner (active master mode). With the Controller Tag emulation, you can minimize unnecessary network traffic using Data Table messages initiated as needed by your control system, eliminating the corresponding OPC driver polling.[/quote]Please give it a spin!
Direct link to the module .
Direct link the PDF User Manual .
pturmel
November 16, 2016, 3:11pm
3
KathyApplebaum:
:thumb_left:
Much appreciated. I'm especially interested in comments / suggestions for improving the user manual. It's very dense with technical information, but I'm not sure what I could leave out or present more simply.
pturmel
November 16, 2016, 5:04pm
4
Already found a bug in run/program mode indication. Direct link above fixed.
pturmel
November 16, 2016, 5:09pm
5
I’ve been testing with a 1734-AENT Point I/O assembly with four I/O modules: IE2C, OE2V, IB4, and OB4. You can use the configuration file I’ve constructed to run them as a template for your own setup:
<Controller>
<DataTypes>
<DataType Name="AB:1734_DI4:C:0" Handle="1124">
<Member Name="Pt0FilterOffOn" DataType="INT" Dimension="0" />
<Member Name="Pt0FilterOnOff" DataType="INT" Dimension="0" />
<Member Name="Pt1FilterOffOn" DataType="INT" Dimension="0" />
<Member Name="Pt1FilterOnOff" DataType="INT" Dimension="0" />
<Member Name="Pt2FilterOffOn" DataType="INT" Dimension="0" />
<Member Name="Pt2FilterOnOff" DataType="INT" Dimension="0" />
<Member Name="Pt3FilterOffOn" DataType="INT" Dimension="0" />
<Member Name="Pt3FilterOnOff" DataType="INT" Dimension="0" />
</DataType>
<DataType Name="AB:1734_DI8:I:0" Handle="2c1f">
<Member Name="Fault" DataType="DINT" Dimension="0" />
<Member Name="Data" DataType="SINT" Dimension="0" />
</DataType>
<DataType Name="AB:1734_DO4_NoDiag:C:0" Handle="2e4f">
<Member Name="FaultMode" DataType="SINT" Dimension="0" />
<Member Name="Pt0FaultMode" DataType="BIT" Target="FaultMode" BitNumber="0" />
<Member Name="Pt1FaultMode" DataType="BIT" Target="FaultMode" BitNumber="1" />
<Member Name="Pt2FaultMode" DataType="BIT" Target="FaultMode" BitNumber="2" />
<Member Name="Pt3FaultMode" DataType="BIT" Target="FaultMode" BitNumber="3" />
<Member Name="FaultValue" DataType="SINT" Dimension="0" />
<Member Name="Pt0FaultValue" DataType="BIT" Target="FaultValue" BitNumber="0" />
<Member Name="Pt1FaultValue" DataType="BIT" Target="FaultValue" BitNumber="1" />
<Member Name="Pt2FaultValue" DataType="BIT" Target="FaultValue" BitNumber="2" />
<Member Name="Pt3FaultValue" DataType="BIT" Target="FaultValue" BitNumber="3" />
<Member Name="ProgMode" DataType="SINT" Dimension="0" />
<Member Name="Pt0ProgMode" DataType="BIT" Target="ProgMode" BitNumber="0" />
<Member Name="Pt1ProgMode" DataType="BIT" Target="ProgMode" BitNumber="1" />
<Member Name="Pt2ProgMode" DataType="BIT" Target="ProgMode" BitNumber="2" />
<Member Name="Pt3ProgMode" DataType="BIT" Target="ProgMode" BitNumber="3" />
<Member Name="ProgValue" DataType="SINT" Dimension="0" />
<Member Name="Pt0ProgValue" DataType="BIT" Target="ProgValue" BitNumber="0" />
<Member Name="Pt1ProgValue" DataType="BIT" Target="ProgValue" BitNumber="1" />
<Member Name="Pt2ProgValue" DataType="BIT" Target="ProgValue" BitNumber="2" />
<Member Name="Pt3ProgValue" DataType="BIT" Target="ProgValue" BitNumber="3" />
<Member Name="Pad" DataType="DINT" Dimension="0" />
</DataType>
<DataType Name="AB:1734_DO8:O:0" Handle="a272">
<Member Name="Data" DataType="SINT" Dimension="0" />
</DataType>
<DataType Name="AB:1734_DOB8:I:0" Handle="f497">
<Member Name="Fault" DataType="DINT" Dimension="0" />
<Member Name="Status" DataType="SINT" Dimension="0" />
</DataType>
<DataType Name="AB:1734_IE2:C:0" Handle="1cca">
<Member Name="Ch0LowEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch0HighEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch0DigitalFilter" DataType="INT" Dimension="0" />
<Member Name="Ch0LAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch0HAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch0LLAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch0HHAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch0RangeType" DataType="SINT" Dimension="0" />
<Member Name="Ch0LimitAlarmLatch" DataType="SINT" Dimension="0" />
<Member Name="Ch0AlarmDisable" DataType="SINT" Dimension="0" />
<Member Name="Ch1LowEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch1HighEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch1DigitalFilter" DataType="INT" Dimension="0" />
<Member Name="Ch1LAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch1HAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch1LLAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch1HHAlarmLimit" DataType="INT" Dimension="0" />
<Member Name="Ch1RangeType" DataType="SINT" Dimension="0" />
<Member Name="Ch1LimitAlarmLatch" DataType="SINT" Dimension="0" />
<Member Name="Ch1AlarmDisable" DataType="SINT" Dimension="0" />
<Member Name="NotchFilter" DataType="SINT" Dimension="0" />
<Member Name="RealTimeSample" DataType="INT" Dimension="0" />
</DataType>
<DataType Name="AB:1734_IE2:I:0" Handle="b81e">
<Member Name="Fault" DataType="DINT" Dimension="0" />
<Member Name="Ch0Data" DataType="INT" Dimension="0" />
<Member Name="Ch1Data" DataType="INT" Dimension="0" />
<Member Name="Ch0Status" DataType="SINT" Dimension="0" />
<Member Name="Ch0Fault" DataType="BIT" Target="Ch0Status" BitNumber="0" />
<Member Name="Ch0Calibration" DataType="BIT" Target="Ch0Status" BitNumber="1" />
<Member Name="Ch0LAlarm" DataType="BIT" Target="Ch0Status" BitNumber="2" />
<Member Name="Ch0HAlarm" DataType="BIT" Target="Ch0Status" BitNumber="3" />
<Member Name="Ch0LLAlarm" DataType="BIT" Target="Ch0Status" BitNumber="4" />
<Member Name="Ch0HHAlarm" DataType="BIT" Target="Ch0Status" BitNumber="5" />
<Member Name="Ch0Underrange" DataType="BIT" Target="Ch0Status" BitNumber="6" />
<Member Name="Ch0Overrange" DataType="BIT" Target="Ch0Status" BitNumber="7" />
<Member Name="Ch1Status" DataType="SINT" Dimension="0" />
<Member Name="Ch1Fault" DataType="BIT" Target="Ch1Status" BitNumber="0" />
<Member Name="Ch1Calibration" DataType="BIT" Target="Ch1Status" BitNumber="1" />
<Member Name="Ch1LAlarm" DataType="BIT" Target="Ch1Status" BitNumber="2" />
<Member Name="Ch1HAlarm" DataType="BIT" Target="Ch1Status" BitNumber="3" />
<Member Name="Ch1LLAlarm" DataType="BIT" Target="Ch1Status" BitNumber="4" />
<Member Name="Ch1HHAlarm" DataType="BIT" Target="Ch1Status" BitNumber="5" />
<Member Name="Ch1Underrange" DataType="BIT" Target="Ch1Status" BitNumber="6" />
<Member Name="Ch1Overrange" DataType="BIT" Target="Ch1Status" BitNumber="7" />
</DataType>
<DataType Name="AB:1734_OE2:C:0" Handle="283b">
<Member Name="Ch0FaultValue" DataType="INT" Dimension="0" />
<Member Name="Ch0ProgValue" DataType="INT" Dimension="0" />
<Member Name="Ch0LowEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch0HighEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch0LowLimit" DataType="INT" Dimension="0" />
<Member Name="Ch0HighLimit" DataType="INT" Dimension="0" />
<Member Name="Ch0RangeType" DataType="SINT" Dimension="0" />
<Member Name="Ch0FaultMode" DataType="SINT" Dimension="0" />
<Member Name="Ch0ProgMode" DataType="SINT" Dimension="0" />
<Member Name="Ch0LimitAlarmLatch" DataType="SINT" Dimension="0" />
<Member Name="Ch0AlarmDisable" DataType="SINT" Dimension="0" />
<Member Name="Ch1FaultValue" DataType="INT" Dimension="0" />
<Member Name="Ch1ProgValue" DataType="INT" Dimension="0" />
<Member Name="Ch1LowEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch1HighEngineering" DataType="INT" Dimension="0" />
<Member Name="Ch1LowLimit" DataType="INT" Dimension="0" />
<Member Name="Ch1HighLimit" DataType="INT" Dimension="0" />
<Member Name="Ch1RangeType" DataType="SINT" Dimension="0" />
<Member Name="Ch1FaultMode" DataType="SINT" Dimension="0" />
<Member Name="Ch1ProgMode" DataType="SINT" Dimension="0" />
<Member Name="Ch1LimitAlarmLatch" DataType="SINT" Dimension="0" />
<Member Name="Ch1AlarmDisable" DataType="SINT" Dimension="0" />
</DataType>
<DataType Name="AB:1734_OE2:I:0" Handle="8d56">
<Member Name="Fault" DataType="DINT" Dimension="0" />
<Member Name="Ch0Status" DataType="SINT" Dimension="0" />
<Member Name="Ch0Fault" DataType="BIT" Target="Ch0Status" BitNumber="0" />
<Member Name="Ch0Calibration" DataType="BIT" Target="Ch0Status" BitNumber="1" />
<Member Name="Ch0LAlarm" DataType="BIT" Target="Ch0Status" BitNumber="2" />
<Member Name="Ch0HAlarm" DataType="BIT" Target="Ch0Status" BitNumber="3" />
<Member Name="Ch1Status" DataType="SINT" Dimension="0" />
<Member Name="Ch1Fault" DataType="BIT" Target="Ch1Status" BitNumber="0" />
<Member Name="Ch1Calibration" DataType="BIT" Target="Ch1Status" BitNumber="1" />
<Member Name="Ch1LAlarm" DataType="BIT" Target="Ch1Status" BitNumber="2" />
<Member Name="Ch1HAlarm" DataType="BIT" Target="Ch1Status" BitNumber="3" />
</DataType>
<DataType Name="AB:1734_OE2:O:0" Handle="e19e">
<Member Name="Ch0Data" DataType="INT" Dimension="0" />
<Member Name="Ch1Data" DataType="INT" Dimension="0" />
</DataType>
</DataTypes>
<Tags>
<Tag Name="PointAI:C" DataType="AB:1734_IE2:C:0" Dimensions="0">
<Data>
00 00 10 27 00 00 00 80 ff 7f 00 80 ff 7f 03 00
00 00 00 00 00 00 00 00 00 80 ff 7f 00 80 ff 7f
03 00 00 06 00 00 00 00
</Data>
</Tag>
<Tag Name="PointAI:I" DataType="AB:1734_IE2:I:0" Dimensions="0">
<Data>
00 00 00 00 a6 13 00 00 00 41 00 00
</Data>
</Tag>
<Tag Name="PointAO:C" DataType="AB:1734_OE2:C:0" Dimensions="0">
<Data>
00 00 00 00 00 00 10 27 00 80 ff 7f 01 01 01 00
00 00 00 00 00 00 00 00 10 27 00 80 ff 7f 01 01
01 00 00 00
</Data>
</Tag>
<Tag Name="PointAO:I" DataType="AB:1734_OE2:I:0" Dimensions="0">
<Data>
00 00 00 00 00 00 00 00
</Data>
</Tag>
<Tag Name="PointAO:O" DataType="AB:1734_OE2:O:0" Dimensions="0">
<Data>
00 00 ee 02
</Data>
</Tag>
<Tag Name="PointDI:C" DataType="AB:1734_DI4:C:0" Dimensions="0">
<Data>
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
</Data>
</Tag>
<Tag Name="PointDI:I" DataType="AB:1734_DI8:I:0" Dimensions="0">
<Data>
00 00 00 00 03 00 00 00
</Data>
</Tag>
<Tag Name="PointDO:C" DataType="AB:1734_DO4_NoDiag:C:0" Dimensions="0">
<Data>
00 00 00 00 00 00 00 00
</Data>
</Tag>
<Tag Name="PointDO:I" DataType="AB:1734_DOB8:I:0" Dimensions="0">
<Data>
00 00 00 00 00 00 00 00
</Data>
</Tag>
<Tag Name="PointDO:O" DataType="AB:1734_DO8:O:0" Dimensions="0">
<Data>
0b 00 00 00
</Data>
</Tag>
</Tags>
<Assemblies>
</Assemblies>
<Modules>
<Module Name="PointAI" CatalogNumber="1734-IE2C/C" Inhibited="false"
Vendor="1" ProductType="115" ProductCode="24" Major="3" Minor="1"
InRPI="250000" UnicastIn="true" InRTMF="0" OutRPI="250000" UnicastOut="true" OutRTMF="3">
<EKey State="ExactMatch" />
<Route>port 2 10.16.7.11 slot 1</Route>
<Application>2004 247b 2cbe 2c65 800201000000</Application>
<InputTag Size="10">PointAI:I</InputTag>
<ConfigTag Size="38">PointAI:C</ConfigTag>
</Module>
<Module Name="PointAO" CatalogNumber="1734-OE2V/C" Inhibited="false"
Vendor="1" ProductType="115" ProductCode="56" Major="3" Minor="1"
InRPI="250000" UnicastIn="false" InRTMF="0" OutRPI="250000" UnicastOut="true" OutRTMF="4">
<EKey State="ExactMatch" />
<Route>port 2 10.16.7.11 slot 2</Route>
<Application>2004 247b 2c66 2c65 800201000000</Application>
<InputTag Size="6">PointAO:I</InputTag>
<OutputTag>PointAO:O</OutputTag>
<ConfigTag Size="36">PointAO:C</ConfigTag>
</Module>
<Module Name="PointDI" CatalogNumber="1734-IB4" Inhibited="false"
Vendor="1" ProductType="7" ProductCode="130" Major="3" Minor="1"
InRPI="100000" UnicastIn="false" InRTMF="0" OutRPI="100000" UnicastOut="true" OutRTMF="3">
<EKey State="ExactMatch" />
<Route>port 2 10.16.7.11 slot 3</Route>
<Application>2004 2467 2cbe 2c03 800201000000</Application>
<InputTag Size="5">PointDI:I</InputTag>
<ConfigTag Size="20">PointDI:C</ConfigTag>
</Module>
<Module Name="PointDO" CatalogNumber="1734-OB4/C" Inhibited="false"
Vendor="1" ProductType="7" ProductCode="231" Major="3" Minor="1"
InRPI="100000" UnicastIn="false" InRTMF="0" OutRPI="100000" UnicastOut="true" OutRTMF="4">
<EKey State="ExactMatch" />
<Route>port 2 10.16.7.11 slot 4</Route>
<Application>2004 247b 2c21 2c2b 800201000000</Application>
<InputTag Size="5">PointDO:I</InputTag>
<OutputTag Size="1">PointDO:O</OutputTag>
<ConfigTag>PointDO:C</ConfigTag>
</Module>
</Modules>
</Controller>
[quote]I’m especially interested in comments / suggestions for improving the user manual. It’s very dense with technical information, but I’m not sure what I could leave out or present more simply.[/quote]Heh, this is exactly why I’m glad I don’t write documentation full time. It’s an art.
pturmel
November 18, 2016, 6:49pm
7
So, the user manual says that there will be future support for producer and consumer tags. I’ve started poking at that, picking up where I left off a few months ago. There were bugs then, and I had decided to focus on the ETHERNET-MODULE support and I/O scanning support. It seems that my efforts to make those work dealt with the bugs in producer tag support, as my L72 testbed for producer tags worked as soon as I turned it on. That is, any “Logix” tag defined in my module that meets the general data type requirements and size limit (500 bytes) can be consumed by a real Logix processor. (-:
Next up: consuming a tag from a Logix processor.
pturmel
November 22, 2016, 10:17pm
8
New version 0.9.2 is available, with Producer and Consumer tags working, and documentation updated to match. One bug that affected multiple I/O module startup has been fixed. The links above point to the updated version.
FYI, the certificate might have expired this year in July 2022. (at least for the Ignition 8.1, v1.4.3 on the website)
Yeah, I have to resign everything. Will be switching to an independent CA, since IA doesn't actually require conventional chain-of-trust.
pturmel
January 3, 2023, 10:53pm
12
Note that a major upgrade of this module is now in public beta:
Automation Professionals is pleased to announce its latest EtherNet/IP Communications Suite driver module, a major upgrade to its EtherNet/IP Class1 Communications module, as a Public Beta.
As of April 15, 2023, this is now a Production Release.
The primary new feature is its new Generic EtherNet/IP Client Driver, a drop-in replacement for IA's Logix V21+ driver and its Omron NJ/NX driver. It does work with older Logix processors, and also works with Rockwell's MicroLogix 8xx family (ethernet…