Sie sind auf Seite 1von 17

TuxEip

Copyright

Ethernet/IP Library for Linux (TuxEip)


Copyright (C) 2006 by TUXPLC
Author : Stphane JEANNE s.jeanne@tuxplc.net
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

WARNING

DON'T connect to a PLC unless you are certain it is safe to do


so!!! It is assumed that you are experienced in PLC
programming/troubleshooting and that you know EXACTLY
what you are doing. PLC's are used to control industrial
processes, motors, steam valves, hydraulic presses, etc.

You

are ABSOLUTELY RESPONSIBLE for ensuring


that NO-ONE is in danger of being injured or killed because
you affected the operation of a running PLC.
Also expect that buggy drivers could write data even when you
expect that they will read only !!!

TuxEip V1.0

2/17

Purpose

TuxEip is a communications library that facilitates communications to


Allen Bradley Controllers, using it, a programmer can write programs to
Read/Write controller/program scoped tag data in the following PLC :
ControlLogix, PLC5, SLC500, Micrologix, FlexLogix (and probably
much more, but that's all i have tested).
These PLC are reachable using Ethernet, ControlNet, DH+. As this
library implement misc functions to interact with objects defines by the
CIP protocol (Connection Manager, Message router...), you can easily
add your own function to act on such devices.

Road map

It remain a lot of things to do, but the most important is to support


optimized packet for the Logix platform.(There is a sample of optimized
read packet for PLC5 / SLC500 in TuxSql which is an another project of
mine).

Trademark

ControlNet is a trademark of ControlNet International, Ltd.


CIP, DeviceNet, are trademarks of Open DeviceNet Vendor Association,
Inc.
EtherNet/IP is a trademark of ControlNet International under license by
Open DeviceNet Vendor Association, Inc.
Allen-Bradley, ControlLogix, DH+, FlexLogix, PLC-5, Micrologix, and
SLC are trademarks of Rockwell Automation.
Ethernet is a trademark of Digital Equipment Corporation, Intel, and
Xerox Corporation.
All other trademarks referenced herein are property of their respective
owners.

TuxEip V1.0

3/17

Content
1 Overview................................................................................................................................................. 5
1.1 Ethernet/IP....................................................................................................................................... 5
1.2 Organisation.................................................................................................................................... 5
2 Global Variables......................................................................................................................................6
2.1 Identity.............................................................................................................................................6
2.1 Send / receive.................................................................................................................................. 6
2.2 Connection parameters.................................................................................................................... 6
2.3 Error handling..................................................................................................................................6
3 Sweeping statement about functions....................................................................................................... 7
3.1 Functions declaration.......................................................................................................................7
3.2 Return values................................................................................................................................... 7
4 Standard scheme of communications using TuxEip............................................................................... 8
5 In depth travel inside TuxEip data structures..........................................................................................9
5.1 Session............................................................................................................................................. 9
5.2 Connection.......................................................................................................................................9
5.3 LGX_Read.....................................................................................................................................10
5.4 PLC_Read......................................................................................................................................10
5.5 DHP_Header..................................................................................................................................10
6 How to Determine Connection Path ,connection and read / write functions........................................ 11
6.1 Connection path.............................................................................................................................11
6.2 Connection function...................................................................................................................... 11
6.3 Read / write functions....................................................................................................................12
6.4 Example......................................................................................................................................... 13
6.4.1 Example 1 : Accessing ControlLogix (Rack id 1,slot 0) via Ethernet :.................................13
6.4.2 Example 2 : Accessing Micrologix (Rack id 2) via Ethernet :............................................. 14
6.4.3 Example 3 : Accessing PLC5 (Rack id 6) via ControlNet :................................................. 15
6.4.4 Example 4 : Accessing PLC5 (Rack id 6) via ControlNet and DH+ :.................................. 16
6.4.5 Example 5 : Accessing FlexLogix (Rack id 7) via ControlNet............................................. 17

TuxEip V1.0

4/17

1 Overview
1.1 Ethernet/IP
EtherNet/IP is an encapsulation protocol which use the Control Information Protocol.

Illustration 1: Base device Object Model

1.2 Organisation
This library is divide in many files :
EIP_Const define many constant used by EtherNet/IP protocol.
CIP_ prefixed files contain generic CIP constants and misc subroutines.
Ethernet_IP contain implementation of the EtherNet/IP protocol.
SendData is used to send / receive data over Ethernet, the whole library depends on it.
(In fact, TuxEip use function pointer to the send/receive subroutines defined in this file so you can
write your own.)
MR contain the Message Router implementation
CM contain the Connection Manager implementation
AB contain generic Allen Bradley data types and subroutines
PLC contain subroutines to access PLC5 and SLC500 controllers ...(controllers which use the PCCC
protocol)
LGX contain subroutines to access ControlLogix ...(controllers which use the CIP protocol)

TuxEip V1.0

5/17

2 Global Variables
2.1 Identity
CM.h
Each device have to provide a vendor Id and a serial number, in TuxEip they are defined like this (you can also
overwrite it before accessing the network) :

(CIP_UINT) _OriginatorVendorID=TuxPlcVendorId;

(CIP_UDINT) _OriginatorSerialNumber=0x12345678;

2.1 Send / receive


SendData.h
As we discuss before, TuxEip use function pointer to send / receive data.
The library define 3 functions :

int (*CipSendData)(int sock,Encap_Header *header)=&_CipSendData;

Encap_Header *(*CipRecvData)(int sock,int timeout)=&_CipRecvData;

Encap_Header *(*CipSendData_WaitReply)(int sock,Encap_Header *header,int sendtimeout,int


rcvtimeout)=&_CipSendData_WaitReply;
By this way, you can define your own functions.

2.2 Connection parameters


CM.h
When connecting on a device, the Connection Manager use this defaults values

BYTE _Priority=0x0A;

CIP_USINT _TimeOut_Ticks=0x05;

WORD _Parameters=0x43f8; Attention this parameters depend on the network type (ControlNet / DH+)

BYTE _Transport=0xa3;

BYTE _TimeOutMultiplier=0x01;

2.3 Error handling


ErrCodes.h
TuxEip define many variables for handling and reporting errors (this variables are thread safe).
cip_debuglevel = LogError
Possible values are :

LogNone (0) : nothing is report

LogError (1) : errors are display

LogTrace (2) : function entering and exiting are display

LogDebug (3) : data frames are display

TuxEip V1.0

cip_err_type : which kind of error we have :

Internal_Error : An error in TuxEip itself (time out, unsupported data type ...)

Sys_Error : A system error ( broken pipe, memory error ...)

EIP_Error : Ethernet/IP encapsulation protocol error

MR_Error : Message router error

CM_Error : Connection Manager error

AB_Error : error while accessing a Logix base controller (ControlLogix,FlexLogix ...)

PCCC_Error : error while accessing a PCCC base controller (PLC5, SLC500,MicroLogix 1100
...)

cip_errno : error number


cip_ext_errno : extended error number
cip_err_msg : plain text error message

6/17

3 Sweeping statement about functions


3.1 Functions declaration
There is two sort of function in TuxEip :
_ prefixed functions are predominantly privates functions (internally use by the library) while
they are much more complex to use.
Other functions that we can call public functions are in fact macro statement refers to privates
function, passing adequate arguments and constants. Sometimes these functions are very same.

3.2 Return values


Functions can return two types of values
Pointer :
Attention, if case of error many functions will return you a null pointer, alternatively you will receive
a pointer on a data structure (you will have to free it, sometimes there is a special function to do so)
Numerical value :
In case of error, you will receive a negative value, otherwise a null or positive value.
The signification of the value you receive vary according the function you call.

TuxEip V1.0

7/17

4 Standard scheme of communications using TuxEip

TuxEip V1.0
Illustration 2: TuxEip communication scheme

8/17

5 In depth travel inside TuxEip data structures


5.1 Session
typedef struct Eip_Session;
int sock;

socket open on your 1756-ENET card

CIP_UDINT Session_Handle;

Session handle return by the RegisterSession function if it


succeed

CIP_DINT
You can use this to your own usage
Sender_ContextL,Sender_Conte
xtH;
int timeout;

Time-out used to send / receive frames

int References;

Not used

void *Data;

You can use this pointer to link a session to personal data

5.2 Connection
typedef struct Eip_Connection
Eip_Session *Session;

Pointer to the session use by this connection

int References;

Not used

void *Data;

You can use this pointer to link a connection to personal data

CIP_UINT
ConnectionSerialNumber;

All is in the name...

CIP_UINT
OriginatorVendorID;
CIP_UDINT
OriginatorSerialNumber;
CIP_UDINT OT_ConnID;

Originator to Target connection Identifier

CIP_INT packet;

Packet identifier

BYTE Path_size;

Size of the following path (in bytes)


Target's path

ConnectionSerialNumber : be careful, you will have to provide a matchless serial number


Connection Manager use OriginatorVendorID, ConnectionSerialNumber, and
OriginatorSerialNumber to identify an existing connection.

TuxEip V1.0

9/17

5.3 LGX_Read
typedef struct LGX_Read
LGX_Data_Type type;

Data type
(LGX_BOOL,LGX_BITARRAY,LGX_SINT,LGX_INT=,LG
X_DINT,LGX_REAL ...)

int Varcount;

Number of variable you have read

int totalsize;

Size in byte of the following data

int elementsize;

Size in byte of one variable


Data

5.4 PLC_Read
typedef struct PLC_Read
PLC_Data_Type type;

Data type
(PLC_BIT,PLC_BIT_STRING,PLC_BYTE_STRING,PLC
_INTEGER,PLC_TIMER,PLC_COUNTER,PLC_CONTR
OL,PLC_FLOATING,PLC_ARRAY,PLC_ADRESS,PLC_
BCD...)

int Varcount;

Number of variable you have read

int totalsize;

Size in byte of the following data

int elementsize;

Size in byte of one variable

unsigned int mask;

Used for boolean


Data

5.5 DHP_Header
typedef struct DHP_Header
CIP_UINT Dest_link1

CIP_UINT Dest_adress

Address of the destination node

CIP_UINT Src_link

CIP_UINT Src_adress
Address of the source node
1) This parameters are used when you need to access physically different s DH+ network (refers to
Rockwell documentation) and are not need by TuxEip.

TuxEip V1.0

10/17

6 How to Determine Connection Path ,connection and read /


write functions
6.1 Connection path
The path is a series of port / link address pairs (identical to the Communication Path syntax in RSLogix 5000
Message Configuration dialog) where :

A port describes a way out of a device via a network or backplane.

A link address is a destination node ,if the corresponding port is a backplane then the link address is the
slot number,else it's a network address.

Interface Module

Port 1

Port 2

Port 3

1756- ENET/ENBT

Backplane

Ethernet network

N/A

1756-DHRIO

Backplane

DH+ Network on Ch. A

DH+ Network on Ch. B

1756-CNET

Backplane

ControlNet network

N/A

Note : When using TuxEip the first port is your Ethernet interface, so your path begin with the IP address of your
1756-ENET/ENBT card.

6.2 Connection function


Choosing the right function
Processor
PLC5
SLC500

Last network segment is DH+


ConnectPLCOverDHP1

Micrologix
ControlLogix

Last network segment is not DH+

ConnectPLCOverCNET
ConnectPLCOverCNET

FlexLogix
1. The Path must target the last 1756-DHRIO you use
Fill in fields with the right values
ConnectPLCOverDHP
session

ConnectPLCOverCNET

The session pointer return by the OpenSession function

Plc
TO_ConnID

Originator to Target connection Identifier (for your own use)

ConnSerialNumber

ConnectionSerialNumber : be careful, you will have to provide a


matchless serial number

RPI

Request Packet Interval (used to calculate the connection time-out)

channel

Channel of the 1756-DHRIO you NA


use (Channel_A or Channel_B)

path

Path to the last 1756-DHRIO


you use

pathsize

Size of the path (in bytes)

TuxEip V1.0

Path to the logic controller

11/17

6.3 Read / write functions


Choosing the right function

Processor

Function to use

PLC5

Rq
Plc type=PLC

ReadPLCData / WritePLCData1

SLC500
Micrologix

Plc type=SLC
Plc type=SLC

ReadPLCData / WritePLCData

ControlLogix

ReadLgxData / WriteLgxData

FlexLogix
1. In this case, you are not obliged to open a connection
ReadPLCData
Connected

WritePLCData
Unconnected

Connected

Unconnected

session

The session pointer return by the OpenSession function

connection

Connection pointer NULL


return by
ConnectPLCOver...

dhp

A pointer to a Dh+ structure (if you use the ConnectPLCOverDHP function)else


NULL

routepath

NULL

Path to you logic


controller

routepathsize

Size of the
0
routepath (in bytes)

type

Plc type (refers to the previous notice board)

tns

Transaction number

address

Address to identify the variables in your plc

datatype

NA

Data type of what you want to write

data

NA

Pointer to your data

number

Number of variables you want to read / write


ReadLGXData

Connection pointer NULL


return by
ConnectPLCOver...

NULL

Path to you logic


controller
Size of the routepath
(in bytes)

WriteLGXData

session

The session pointer return by the OpenSession function

connection

Connection pointer return by ConnectPLCOver

address

Address to identify the variables in your plc

datatype

NA

Data type of what you want to write

data

NA

Pointer to your data

number

Number of variables you want to read / write

TuxEip V1.0

12/17

6.4 Example
Here is a sample factory network, we will use it to explain the connection path.

Illustration 3: Factory network


6.4.1 Example 1 : Accessing ControlLogix (Rack id 1,slot 0) via Ethernet :

Illustration 4: example 1
IP of your 1756 ENET card

192.168.1.3

Backplane

L55 in slot 0

Path

192.168.1.3,1,0

Connection method

ConnectPLCOverCNET

Read / Write function

ReadLgxData / WriteLgxData

TuxEip V1.0

13/17

6.4.2 Example 2 : Accessing Micrologix (Rack id 2) via Ethernet :

Illustration 5: example 2
IP of your Micrologix controller

192.168.1.4

Backplane

slot 0 (logic controller)

Path 1

192.168.1.4,1,0

Connection method

ConnectPLCOverCNET

Read / Write function

ReadPLCData / WritePLCData

Plc type

SLC

1 The whole Logix controllers are build using the same scheme, communications card are plug into a backplane
(sometime its a real one like ControlLogix's backplane, alternatively it is a virtual one like for Micrologix, FlexLogix)

TuxEip V1.0

14/17

6.4.3 Example 3 : Accessing PLC5 (Rack id 6) via ControlNet :

Illustration 6: example 3
As we can see in chapter 4 "TuxEip communication scheme" there is two way to access PLC5 and
SLC500 logic controllers :
Connected way

IP of your 1756 ENET card

192.168.1.5

Backplane

slot 1 (1756-CNET)

Port 2 (ControlNet network)

Node 3 (PLC5 node address)

Path

192.168.1.5,1,1,2,3

Connection method

ConnectPLCOverCNET

Read / Write function

ReadPLCData / WritePLCData

Plc type

PLC

Unconnected way
To Read / Write data, you will have to fill in the "routepath" and "routepathsize" (see section

6.3)

TuxEip V1.0

15/17

6.4.4 Example 4 : Accessing PLC5 (Rack id 6) via ControlNet and DH+ :

Illustration 7: example 4
IP of your 1756 ENET card

192.168.1.5

Backplane

slot 1 (1756-CNET)

Port 2 (ControlNet network)

Node 2 (1756-CNET Rack 1)

Backplane

slot 3 (1756-DHRIO)

Path

192.168.1.5,1,1,2,2,1,3

Connection method

ConnectPLCOverDHP (channel= Channel_B)

Read / Write function

ReadPLCData / WritePLCData

Plc type

PLC

dhp

TuxEip V1.0

Dest_link

Dest_adress

Src_link

Src_adress

16/17

6.4.5 Example 5 : Accessing FlexLogix (Rack id 7) via ControlNet

IP of your 1756 ENET card

192.168.1.3

Backplane

slot 1 (1756-CNET)

Port 2 (ControlNet network)

Node 5 (1788-CNC)

Virtual Backplane of the FlexLogix

Virtual Slot of the FlexLogix UC

Path

192.168.1.3,1,1,2,5,1,0

Connection method

ConnectPLCOverCNET

Read / Write function

ReadLGXData / WriteLGXData

TuxEip V1.0

17/17

Das könnte Ihnen auch gefallen