Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

 Page Overview

This manual describes the various I/O drivers available for the Tsentry system. Both W32 and RTSS versions of most of the drivers are available.

Supported drivers include the following:

  • Allen Bradley PLC 2, PLC 3, and PLC 5

  • Nattional Instruments Process I/O controllers

  • GE 9030 / 9070 PLC

  • TCP/IP Generic Driver

  • Lantronix Terminal Server

  • Generalized Remote Device Connection Driver

  • Allen-Bradley Control Logic PLC

Allen-Bradley Process I/O Server

 Capabilities
  • Communicates with Allen-Bradley PLC 5 systems

  • TCP/IP Communications over:

    • Standard Ethernet network connection

    • High Speed dedicated process I/O network with deterministic network performance

  • Software implemented as a C++ Class

  • Multiple PLC support

  • Supports:

    • Read Variables

    • Write variables

    • Integer Files

    • Floating Point Files

  • Capable of running 100ms Input and Output scan rep rates

 Allen-Bradley PLC2/3/5 Configuration

The A-B PLC must be set up with the proper IP address.  This configuration is completed with the A-B software.  The IP must be chosen such that it lies within the subnet selected for the specific Ethernet controller used for communications.

If the Ethernet controller is one that is controlled by the Windows 2000 system, the subnet is specified in the network setup utility of the control panel.

If the Ethernet controller is one that is controlled by the RTX Real-Time TCP/IP controller, the IP address is specified in the file d:\LocNtRt\sys\pif\RtxTcp.ini. 

 Software Driver

The core of the driver is provided as a C++ class that implements the initialization and communications functions.  A sample process is provided which calls the appropriate class members.

The IP address, configuration information, and data areas to be read and written are passed as calling parameters to the class functions.

The following is a list of the provided driver files.  After review of the example driver, the user is required to modify the files as indicated:

File Name

Description

Modifications

ABPlc.cpp

Driver mainline function

Modify configuration class calls for specific PLC configuration.  Modify locations to read and write data.  Modify input and output datagram structure definition

ABPlcIn.cpp

ABPlc driver initialization

Insert required global common areas. 

PlcUsr.cpp

Process received values from PLC datagram and place in user data variables.

Get application variables and store in datagra for transmission to PLC

Change as required

tpriABPlc Class Descriptions

 Overview

The Tsentry tpriABPlc class encapsulates the functionality required to communicate with the Allen Bradley PLC 2, PLC3, and PLC5 PLCs over a TCP/IP network.

 Class Inferface

The following public member functions are provided as part of the tpriABPlc class:

  • tpriABPlc *pABPlc = new tpriABPlc;

    • Allocate a new tpriABplc object

  • destroy (tpriABPlcPlc *)pABPlc();

    • Destroy the tpriABPlc class object.

  • int Config (char *pHostName, int timeout);

where:

char *pHostName= host name or IP address

int timeout = time value for read and write operation in milliseconds

This function stores new configuration information for use by class functions

  •  int GetConnStatus (void);

where:

return status = connection status

                        0 = unconnected

1 = connected

This function returns the status of the connection between the Compute system and the PLC

  • int SetReadFile(char *file, int offset, int num);
    where:
    char *file = PLC file name from which to read data
    int offset  = byte offset from start of ‘filename’ from which to read data
    int num = number of data items to read

This function stores the PLC read control information for use by the ScanIO class member

  • int SetWriteFile(char *file, int offset, int num);
    where:
    char *file = PLC file name where to write data
    int offset  = byte offset from start of ‘filename’ to write data
    int num = number of data items to write

This function stores the PLC read control information for use by the ScanIO class member

  •  int Connect (void);

This function establishes a connection between the computer system and the PLC

  •  int Disconnect (void);

This function breaks a connection between the computer system and the PLC

  •  int ScanIO (int *igram, int *ogram, int *ipsta);

where:
int *igram = user memory address where PLC read data will be returned

int *ogram = user memory address where PLC write will be obtained

int *ipsta = addr of an integer variable where I/O status will be returned

This function first reads a single data block of 16 bit integers values from the PLC user register memory and then writes a block of 16 bit integers to the PLC memory.  The plc locations for the read and write are obtained from prior calls to the SetReadFile90 and SetWriteFile() functions.

 Process Driver Mainline

Some comments on the driver program below:

  • This test program, on each expiration of the process timer, writes a single block of data to the PLC and then reads a single block of data.  This sequence, the number of reads and writes, their addresses, and the sizes of the blocks can be modified to fit the requirements of the application.

  • PlcUsr and the ‘datagram’ structures they reference should be modified as required to reference appropriate variables in application variables for transfer between the PLC and the control system.

  • A sample driver is provided in the examples subdirectories of the standard Tsentry distribution

National Instruments Process I/O Driver

 Capabilities
  • Handles National Instruments E-Series Boards

  • Direct program control over all I/O

  • Process I/O includes

    • 12-bit A/I channels

    • 12-bit A/O channels

    • Digital Inputs

    • Digital Outputs

  • High Speed bus access

    • A/I at 300KHZ sample rate

  • Software implemented as a C++ Class

  • Capable of running 1ms Input and Output scan rep rates

RTP (CPI) Process I/O Driver

 Capabilities

The RTP (formerly CPI) process I/O driver will communicate with one or more chassis of process I/O interface cards via a UDP interface.  The RTP 6700 is an intelligent controller and is located in one of the chassis.  The process I/O controller and driver has the following characteristics:

  • Handles RTP / Computer Products Process I/O

  • Connection to RTP rack via Ethernet UDP

  • UDP/IP Communications over:

    • Standard Ethernet network connection

    • High Speed dedicated process I/O network with deterministic network performance

  • Process I/O includes:

    • 12-bit & 14-bit A/I channels

    • 12-bit A/O channels

    • Digital Inputs

    • Digital Outputs

  • Software implemented as a C++ Class

  • Capable of running 20ms Input and Output scan rep rates

 Software Driver

The core of the driver is provided as a C++ class which implements the initialization, communications, and data conversion functions.  A sample process is provided which calls the appropriate class members. 

The configuration of the RTP control cards is specified in an .ini file which is read at driver startup.  An example of this file is also included.

The following is a list of the provided driver files.  After review of the example driver, the user is required to modify the files as indicated:

File Name

Description

Modifications

sysRtp.ini

Initialization file that contains the configuration of the RTP racks and control cards.

The file is stored in the application \pif directory

Accurately describe the process I/O cards to be scanned

TsysPioCpi.cpp

Driver mainline function

Insert required global common areas

PioAiConvert.cpp

Convert analog input values and store in appropriate application variables

Change as required

PioAoConvert.cpp

Get application variables and store in buffer for transmission to hardware analog output channels

Change as required

PioDiConvert.cpp

Convert digital input values (as bits in words) and store in appropriate application variables

Change as required

PioDoConvert.cpp

Get application variables, convert to appropriate bits values, and store in buffer for transmission to hardware analog output channels

Change as required

AiCntsToVolts

Convert a single analog input count value to a floating point volts value

Function set up to handle 14 bit A/D with 10.24 biploar input.  Change if required to support other A/D hardware ranges

AoVoltsToCnts

Convert a single volts value to counts for analog output

Function set up to handle 12 bit A/O with 10.24 biploar output.  Change if required to support other A/O hardware ranges

 RTP 6700 Configuration

The RTP 6700 controller requires a set of configuration parameters for proper operation.  To configure the 6700, connect the console port of the 6700 to a terminal or a PC running a terminal emulator (such as HyperTerminal).  Terminal characteristics are 9600, 8, None, 1.  Switch on the power to the 6700 and enter a “3” to the first prompt  after power up.  The following is an example of reasonable configuration process and parameters for the RTP 6700 controller:

A:\>echo off

Datalight is a registered trademark of Datalight, Inc.

CardTrick is a registered trademark of Datalight, Inc.

ROM-DOS is a trademark of Datalight, Inc.

Copyright 1989-1994 Datalight, Inc., All Rights Reserved

Bad command or filename

Loading the Ethernet Packet Driver

smc9192 0x62 0x7 0x300 0x604 ...

Current settings follow :

Twisted pair interface, using select # 2 for interrupt & 6 packets reserved for Tx

My Ethernet address is 00:80:F9:03:04:EC

***********************************************

RTP Corp.                                   *

Pompano Beach, Florida.                     *

Ethernet IO Bus Controller Version F.0.0    *

***********************************************
************************
PROTOCOL=TCP
LINK=ETHERNET
MAX_CONNECTIONS=1
CONNECTION_TIMEOUT=3
SERVICE_ACCESS_POINT=0
IP_ADDRESS=89.89.89.121
SUBNET_MASK=255.0.0.0
CMD_BUF_SIZE=1464
RESP_BUF_SIZE=1464
BAUD_RATE=38400 BPS
MESSAGE_TRACE=OFF
MAX_TRACE_BUFF_SIZE=1
CONNECTION_WIRING=TWISTED
************************
1.- Revert Back to Default Configuration
2.- Continue with Saved Configuration
3.- Modify Configuration

No input is necesary, if no change is desired

3

Select Protocol:
[Current - 1] [Default - 0]
0 <Enter> - UDP
1 <Enter> - TCP
2 <Enter> - 802.2
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 0

Select Link:
[Current - 0] [Default - 0]
0 <Enter> - ETHERNET
1 <Enter> - SERIAL
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 0

Enter Maximum Number of Connections (1 - 4):
[Current - 1] [Default - 1]
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 1

Enter the Connection Timeout (0 - 600 seconds):
[Current - 3] [Default - 3]
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 3

Enter the Service Access Point (SAP) (0 - 254 even only):
[Current - 0]
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 0

Enter the IP Address (dotted decimal notation e.g. 255.2.3.3):
[Current - 89.89.89.121]
10.0.0.2

Enter the Subnet Mask (dotted decimal notation e.g. 255.0.0.0):
[Current - 255.0.0.0]
255.0.0.0

Enter the Command Buffer Size (1464 - 32727):
[Current - 1464] [Default - 1464]
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 1464

Enter the Response Buffer Size (1464 - 32727):
[Current - 1464] [Default - 1464]
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 1464

Select Baud Rate:
[Current - 2] [Default - 2]
0 <Enter> - 9.60  KBPS
1 <Enter> - 19.2  KBPS
2 <Enter> - 38.4  KBPS
3 <Enter> - 57.6  KBPS
4 <Enter> - 115.2 KBPS
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 0

Select Trace:
[Current - 0] [Default - 0]
0 <Enter> - OFF
1 <Enter> - ON
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 0

Enter the Trace Buffer size (1-63 KBytes):
[Current - 1] [Default - 1]
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 1

Select the Connection Wiring
[Current - 1] [Default - 0]
0 <Enter> - COAX
1 <Enter> - TWISTED
<Enter>   - Keep Current Value
<Esc>     - Exit Configuration without Saving
S<Enter>  - Save Configuration

Selection: 1

Configuration Complete.

************************
PROTOCOL=UDP
LINK=ETHERNET
MAX_CONNECTIONS=1
CONNECTION_TIMEOUT=3
SERVICE_ACCESS_POINT=0
IP_ADDRESS=10.0.10.11
SUBNET_MASK=255.0.0.0
CMD_BUF_SIZE=1464
RESP_BUF_SIZE=1464
BAUD_RATE=9600 BPS
MESSAGE_TRACE=OFF
MAX_TRACE_BUFF_SIZE=1
CONNECTION_WIRING=TWISTED
************************

Enter Y to Accept Configuration, N to Modify it

Y

EIOBC Ethernet Address: 00-80-F9-03-04-EC

After the configuration is accepted, it will be stored on the controller.  Cycling the power on the card will initialize the card to use these parameters.

 RTP Initialization file

The following is an example of a operational RTP initialization file.  It describes a system with 16 Analog input (1 A/D card and 2 mux cards), 4 Digital input cards (64 bits), 32 Analog output channels (8 cards),and 4 dgital output cards (64 bits) in two (2) RTP chassises.  The RTP 6700 is set up for IP address 10.0.

# ---------------------------------------------------------------------------
#   Cold Mill RTP Control Table
#
#   This table defines the configuration information for the
#      RTP (Real Time Products) Process I/O system
#   It assumes connection via an Ethernet network and a RTP 6700 interface
#
#   Section [SYSTEM] defines system wide parameters
#   Section [AI] defines Analog Inputs
#   Section [AO] defines Analog Outputs
#   Section [DI] defines Digital Inputs
#   Section [DO] defines Digital Outputs
#
# --------------------------------------------------------------------------------------
#
[SYSTEM]
#   IPAddr:  IP address of 6700 controller
#   #AI:     Number of AI channels
#   #AO:     Number of AO channels
#   #DI:     Number of DI cards
#   #DO:     Number of DO cards
#
#IPAddr      #AI #DI #AO #DO
10.0.10.11   16   4   8   4    
#
[AI]
#
# Define analog input scan list
    16
#
# Field Definitions
#
#   CORR_ID:     Correlation ID.  A 32 bit number that is transmitted to the
#                eiobc and returned from the eiobc for each I/O point.
#                Usually numbered sequentially.
#
#   TYPE:        An 8 bit number that defines the type of I/O to be performed.
#                There are currently four (4) types of I/O that can be
#                performed with the eiobc:
#
#                     TYPE            DEFINITION
#                     ----         -------------------
#                      1           OUTPUT_BASIC
#                      2           OUTPUT_WITH_BIT_OPS
#                      3           INPUT_BASIC
#                      4           INPUT_WITH_BIT_OPS
#
#                The TYPE used for analog inputs is 3, INPUT_BASIC.
#
#   DEV_ADDRESS: Device address.  An 8 bit number that defines the RTP
#                device address (chassis address).  If the chassis address is
#                set to 0x31, the address used for this field should be 0x01.
#
#   OPTION:      A bit mask of options.  A 16 bit value that is used as a mask
#                to control I/O options.  For type 3 (INPUT_BASIC) I/O, the
#                options are defined as follows:
#
#                 it 15: Output command word contained in COMMAND
#                Bit 14: Check Test Return before writing output data
#                Bit 13: Wait DELAY number of microseconds for Test Return
#                        before output.  Only valid when Bit 14 is set.
#                Bit 12: Output data word contained in Output Data (OUT_DATA).
#
#                Bit 11: Check Test Return before reading input data.
#                Bit 10: Wait Delay number of microseconds for Test Return
#                        Only valid when Bit 11 set.
#                Bit 09: Perform an input operation and return data in
#                        response.  If this bit is not set, input is not
#                        performed and only POINT_STATUS is returned
#                        in response.
#                Bit 08: Perform a second input operation and return additional
#                        data in response.  Only valid if bit 09 is set.
#                        If this bit is set and POINT_EXTENDED_INPUT return
#                        is used.
#                Bit 07: Replace the Output Data (OUT_DATA) with the value
#                        obtained from the second input operation for auto-
#                        ranging purposes.  Only valid if bit 08 is used.
#
#                The OPTION value for analog inputs is 0x9E00.
#
#   COMMAND:     Command to the iobc.  A 16 bit value that defines which
#                card in the chassis rack will be doing the analog
#                inputs.  A value of 0x0500 in COMMAND indicates that
#                there is a analog input card in logical slot 0
#                (physical slot 5) of the chassis.
#
#   OUT_DATA:    Output Data.  A 16 bit value that is used to tell the
#                analog input card which input channel to read.  Due
#                to the delay in reading sequential channels on the
#                same analog input card, it may be desirable to sequence
#                through all the analog input cards, reading all the
#                channel 0's, then all the channel 1's, etc.
#
#                The card number and channel are defined as follows:
#
#                  bits  0 1 2 3   4 5 6 7  8 9 10 11  12 13 14 15
#                                    x x x  x y  y  y   z  z  z  z
#
#                    where   xxxx defines the card number.
#                             yyy defines the channel number.
#                            zzzz defines the gain (0= +-10volts)
#
#                These values go in the OUT_DATA field below
#
#   DELAY:       Delay value.  A 16 bit value indicating the amount of
#                time after which, if the card is not ready, an error is
#                returned.  Multiply us by 1.19 to get the proper delay.
#                A delay of 100 us == 100 * 1.19 = 119 (base 10) or
#                77 (base 16).
#
#                The DELAY value for analog inputs is typically 0x00FF.
#
#   AND_VAL:     A 16 bit value to logically AND with the output data
#                value (OUT_DATA).  This value is not used for analog
#                inputs but must be present.
#
#                The AND_VALUE value for analog inputs is 0x0000.
#
#   OR_VAL:      A 16 bit value to logically OR with the output data
#                value (OUT_DATA).  This value is not used for analog
#                inputs but must be present.
#
#                The OR_VALUE value for analog inputs is 0x0000.
#
#
#      DELAY is a HEX value indicating the number of microseconds to wait before
#     returning an error.  Multiply us by 1.19 to get the proper delay.  A delay
#     of 100 us == 100 * 1.19 = 119 (base 10) or 77 (base 16).
#
#
#     SC
#     LH
#     OA
#     TN
#
#CORR_ID   TYPE  DEV_ADDRESS  OPTION   COMMAND  OUT_DATA  DELAY(uS)   AND_VAL   XOR_VAL
#
 0000010      3    0x00       0x9E00    0x0500    0x0080    0x0077      0x0000   0x0000
 0000011      3    0x00       0x9E00    0x0500    0x0090    0x0077      0x0000   0x0000
 0000012      3    0x00       0x9E00    0x0500    0x00A0    0x0077      0x0000   0x0000
 0000013      3    0x00       0x9E00    0x0500    0x00B0    0x0077      0x0000   0x0000
 0000014      3    0x00       0x9E00    0x0500    0x00C0    0x0077      0x0000   0x0000
 0000015      3    0x00       0x9E00    0x0500    0x00D0    0x0077      0x0000   0x0000
 0000016      3    0x00       0x9E00    0x0500    0x00E0    0x0077      0x0000   0x0000
 0000017      3    0x00       0x9E00    0x0500    0x00F0    0x0077      0x0000   0x0000
#
 0000020      3    0x00       0x9E00    0x0500    0x0100    0x0077      0x0000   0x0000
 0000021      3    0x00       0x9E00    0x0500    0x0110    0x0077      0x0000   0x0000
 0000022      3    0x00       0x9E00    0x0500    0x0120    0x0077      0x0000   0x0000
 0000023      3    0x00       0x9E00    0x0500    0x0130    0x0077      0x0000   0x0000
 0000024      3    0x00       0x9E00    0x0500    0x0140    0x0077      0x0000   0x0000
 0000025      3    0x00       0x9E00    0x0500    0x0150    0x0077      0x0000   0x0000
 0000026      3    0x00       0x9E00    0x0500    0x0160    0x0077      0x0000   0x0000
 0000027      3    0x00       0x9E00    0x0500    0x0170    0x0077      0x0000   0x0000
#
[AO]
# Define analog output scan list
      8
#
# Field Definitions
#
#   CORR_ID:     Correlation ID.  A 32 bit number that is transmitted to the
#                eiobc and returned from the eiobc for each I/O point.
#                Usually numbered sequentially.
#
#   TYPE:        An 8 bit number that defines the type of I/O to be performed.
#                There are currently four (4) types of I/O that can be
#                performed with the eiobc:
#
#                     TYPE            DEFINITION
#                     ----         -------------------
#                      1           OUTPUT_BASIC
#                      2           OUTPUT_WITH_BIT_OPS
#                      3           INPUT_BASIC
#                      4           INPUT_WITH_BIT_OPS
#
#                The TYPE used for analog outputs is 2, OUTPUT_WITH_BIT_OPS.
#
#   DEV_ADDRESS: Device address.  An 8 bit number that defines the RTP
#                device address (chassis address).  If the chassis address is
#                set to 0x31, the address used for this field should be 0x01.
#
#   OPTION:      A bit mask of options.  A 16 bit value that is used as a mask
#                to control I/O options.  For type 2 (OUTPUT_WITH_BIT_OPS) I/O,
#                the options are defined as follows:
#                Bit 15: Output command word contained in COMMAND
#                Bit 14: Check Test Return before writing output data
#                Bit 13: Wait DELAY number of microseconds for Test Return
#                        before output.  Only valid when Bit 14 is set.
#                Bit 12: Output data word contained in Process Scan List
#                        message.  If this bit is not set then no output
#                        word should be included in the Process
#                        Scan List.
#
#                The OPTION value for analog outputs is 0x9000.
#
#   COMMAND:     Command to the iobc.  A 16 bit value that defines which
#                card in the chassis rack will be doing the analog
#                outputs.  A value of 0x0505 in COMMAND indicates that
#                there is a analog output card in logical slot 5
#                (physical slot 10) of the chassis.
#                (Note: logical slot = physical slot - 5.)
#
#   OUT_DATA:    Output Data.  A 16 bit value that is used as output data
#                to the iobc.  This value is not used for analog outputs
#                but must be present.
#
#                The OUT_DATA value for analog outputs is 0x0000.
#
#   DELAY:       Delay value.  A 16 bit value indicating the amount of
#                time after which, if the card is not ready, an error is
#                returned.  Multiply us by 1.19 to get the proper delay.
#                A delay of 100 us == 100 * 1.19 = 119 (base 10) or
#                77 (base 16).
#
#                The DELAY value for analog outputs is typically 0x00FF.
#
#   AND_VAL:     A 16 bit value to logically AND with the output data
#                value in the Process Scan List command.  Only valid when
#                Options Bit 12 is set.  A value of 0x0FFF sends all 12
#                bits of the output value to the output channel.
#
#                The AND_VALUE value for analog outputs is 0x0FFF.
#
#   XOR_VAL:     A 16 bit value to exclusively OR with the results
#                obtained from ANDing the output value in the Process
#                Scan List command and the AND Value (AND_VAL).
#                Only valid when Options Bit 12 is set.  This value
#                represents the channel number (0-4) of the analog
#                output card.
#
#
#CORR_ID   TYPE  DEV_ADDRESS  OPTION   COMMAND  OUT_DATA  DELAY(uS)   AND_VAL   XOR_VAL
 0000001      2    0x00       0x9000    0x0507    0x0000    0x00FF      0x0FFF   0x0000
 0000002      2    0x00       0x9000    0x0507    0x0000    0x00FF      0x0FFF   0x4000
 0000003      2    0x00       0x9000    0x0507    0x0000    0x00FF      0x0FFF   0x8000
 0000004      2    0x00       0x9000    0x0507    0x0000    0x00FF      0x0FFF   0xC000
#
 0000005      2    0x00       0x9000    0x0508    0x0000    0x00FF      0x0FFF   0x0000
 0000006      2    0x00       0x9000    0x0508    0x0000    0x00FF      0x0FFF   0x4000
 0000007      2    0x00       0x9000    0x0508    0x0000    0x00FF      0x0FFF   0x8000
 0000008      2    0x00       0x9000    0x0508    0x0000    0x00FF      0x0FFF   0xC000
#
[DI]
# Define digital input scan list
               4
#
# Field Definitions
#
#   CORR_ID:     Correlation ID.  A 32 bit number that is transmitted to the
#                eiobc and returned from the eiobc for each I/O point.
#                Usually numbered sequentially.
#
#   TYPE:        An 8 bit number that defines the type of I/O to be performed.
#                There are currently four (4) types of I/O that can be
#                performed with the eiobc:
#
#                     TYPE            DEFINITION
#                     ----         -------------------
#                      1           OUTPUT_BASIC
#                      2           OUTPUT_WITH_BIT_OPS
#                      3           INPUT_BASIC
#                      4           INPUT_WITH_BIT_OPS
#
#                The TYPE used for digital inputs is 3, INPUT_BASIC.
#
#   DEV_ADDRESS: Device address.  An 8 bit number that defines the RTP
#                device address (chassis address).  If the chassis address is
#                set to 0x31, the address used for this field should be 0x01.
#
#   OPTION:      A bit mask of options.  A 16 bit value that is used as a mask
#                to control I/O options.  For type 3 (INPUT_BASIC) I/O, the
#                options are defined as follows:
#
#                Bit 15: Output command word contained in COMMAND
#                Bit 14: Check Test Return before writing output data
#                Bit 13: Wait DELAY number of microseconds for Test Return
#                        before output.  Only valid when Bit 14 is set.
#                Bit 12: Output data word contained in Output Data (OUT_DATA).
#                Bit 11: Check Test Return before reading input data.
#                Bit 10: Wait Delay number of microseconds for Test Return
#                        Only valid when Bit 11 set.
#                Bit 09: Perform an input operation and return data in
#                        response.  If this bit is not set, input is not
#                        performed and onlu POINT_STATUS is returned
#                        in response.
#                Bit 08: Perform a second input operation and return additional
#                        data in response.  Only valid if bit 09 is set.
#                        If this bit is set and POINT_EXTENDED_INPUT return
#                        is used.
#                Bit 07: Replace the Output Data (OUT_DATA) with the value
#                        obtained from the second input operation for auto-
#                        ranging purposes.  Only valid if bit 08 is used.
#
#                The OPTION value for digital inputs is 0x8A00.
#
#   COMMAND:     Command to the iobc.  A 16 bit value that defines which
#                card in the chassis rack will be doing the digital
#                inputs.  A value of 0x0503 in COMMAND indicates that
#                there is a digital input card in logical slot 3
#                (physical slot 8) of the chassis. 
#                (Note: logical slot = physical slot - 5.)
#
#   OUT_DATA:    Output Data.  A 16 bit value that is used as output data
#                to the iobc.  For digital inputs, this value is used as
#                an initialization value.
#
#                The OUT_DATA value for digital inputs is 0x0000.
#
#   DELAY:       Delay value.  A 16 bit value indicating the amount of
#                time after which, if the card is not ready, an error is
#                returned.  Multiply us by 1.19 to get the proper delay.
#                A delay of 100 us == 100 * 1.19 = 119 (base 10) or
#                77 (base 16).
#
#                The DELAY value for digital inputs is typically 0x00FF.
#
#   AND_VAL:     A 16 bit value to logically AND with the output data
#                value (OUT_DATA).  This value is not used for digital
#                inputs but must be present.
#
#                The AND_VALUE value for digital inputs is 0x0000.
#
#   OR_VAL:      A 16 bit value to logically OR with the output data
#                value (OUT_DATA).  This value is not used for digital
#                inputs but must be present.
#
#                The OR_VALUE value for digital inputs is 0x0000.
#
#
#CORR_ID   TYPE  DEV_ADDRESS  OPTION   COMMAND  OUT_DATA  DELAY(uS)   AND_VAL   XOR_VAL
 0000001    3        0x01     0x8A00   0x0500    0x0000   0x00FF      0x0000     0x0000
 0000002    3        0x01     0x8A00   0x0501    0x0000   0x00FF      0x0000     0x0000
 0000003    3        0x01     0x8A00   0x0502    0x0000   0x00FF      0x0000     0x0000
 0000004    3        0x01     0x8A00   0x0503    0x0000   0x00FF      0x0000     0x0000
#
[DO]
# Define digital output scan list
      4
#
# Field Definitions
#
#   CORR_ID:     Correlation ID.  A 32 bit number that is transmitted to the
#                eiobc and returned from the eiobc for each I/O point. 
#                Usually numbered sequentially.
#
#   TYPE:        An 8 bit number that defines the type of I/O to be performed. 
#                There are currently four (4) types of I/O that can be
#                performed with the eiobc:
#
#                     TYPE            DEFINITION
#                     ----         -------------------
#                      1           OUTPUT_BASIC
#                      2           OUTPUT_WITH_BIT_OPS
#                      3           INPUT_BASIC
#                      4           INPUT_WITH_BIT_OPS
#
#                The TYPE used for digital outputs is 1, OUTPUT_BASIC.
#
#   DEV_ADDRESS: Device address.  An 8 bit number that defines the RTP
#                device address (chassis address).  If the chassis address is
#                set to 0x31, the address used for this field should be 0x01.
#
#   OPTION:      A bit mask of options.  A 16 bit value that is used as a mask
#                to control I/O options.  For type 1 (OUTPUT_BASIC) I/O, the
#                options are defined as follows:
#
#                Bit 15: Output command word contained in COMMAND
#                Bit 14: Check Test Return before writing output data
#                Bit 13: Wait DELAY number of microseconds for Test Return
#                        before output.  Only valid when Bit 14 is set.
#                Bit 12: Output data word contained in Process Scan List
#                        message.  If this bit is not set then no output
#                        word should be included in the Process
#                        Scan List.
#
#                The OPTION value for digital outputs is 0xF000.
#
#   COMMAND:     Command to the iobc.  A 16 bit value....
#
#   OUT_DATA:    Output Data.  A 16 bit value that is used as output data
#                to the iobc.  This value is not used for digital outputs
#                but must be present. 
#
#                The OUT_DATA value for digital outputs is 0x0000.
#
#   DELAY:       Delay value.  A 16 bit value indicating the amount of
#                time after which, if the card is not ready, an error is
#                returned.  Multiply us by 1.19 to get the proper delay. 
#                A delay of 100 us == 100 * 1.19 = 119 (base 10) or
#                77 (base 16).
#
#                The DELAY value for digital outputs is typically 0x00FF.
#
#   AND_VAL:     A 16 bit value to logically AND with the output data
#                value (OUT_DATA).  This value is not used for digital
#                outputs but must be present.
#
#                The AND_VALUE value for digital outputs is 0x0000.
#
#   OR_VAL:      A 16 bit value to logically OR with the output data
#                value (OUT_DATA).  This value is not used for digital
#                outputs but must be present.
#
#                The OR_VALUE value for digital outputs is 0x0000.
#
#
#  CORR_ID   TYPE  DEV_ADDRESS  OPTION   COMMAND  OUT_DATA  DELAY(uS)   AND_VAL   XOR_VAL

   0000001    1        0x01     0xF000   0x0504    0x0000   0x00FF      0x0000     0x0000

   0000002    1        0x01     0xF000   0x0505    0x0000   0x00FF      0x0000     0x0000

   0000003    1        0x01     0xF000   0x0506    0x0000   0x00FF      0x0000     0x0000

   0000004    1        0x01     0xF000   0x0507    0x0000   0x00FF      0x0000     0x0000

#   End of RTP I/O Configuration File
 Process Driver Mainline

A sample driver is provided in the examples subdirectories of the standard Tsentry distribution

GE 9030/9070 PLC Driver

 Capabilities
  • Communicates with GE 9030 and GE 9070 PLC systems

  • TCP/IP Communications over:

    • Standard Ethernet network connection

    • High Speed dedicated process I/O network with deterministic network performance

  • Software implemented as a C++ Class

  • Multiple PLC support

  • Supports:

    • Read Variables

    • Write variables

    • Integer Files

    • Floating Point Files

    • Word (object) and bit reads and writes

Capable of running 100ms Input and Output scan rep rates

 GE Configuration

The GE 9030 / 9070 PLC must be set up with the proper IP address.  This configuration is completed with the GE VersaMax software.  The IP must be chosen such that it lies within the subnet selected for the specific Ethernet controller used for communications.

If the Ethernet controller is one that is controlled by the Windows 2000 system, the subnet is specified in the network setup utility of the control panel.

If the Ethernet controller is one that is controlled by the RTX Real-Time TCP/IP controller, the IP address is specified in the file d:\LocNtRt\sys\pif\RtxTcp.ini. 

 Software Driver

The core of the driver is provided as a C++ class which implements the initialization and communications functions.  A sample process is provided which calls the appropriate class members. 

The IP address, configuration, and data areas to be read and written are passed as calling parameters to the class functions.

The following is a list of the provided driver files.  After review of the example driver, the user is required to modify the files as indicated:

File Name

Description

Modifications

GePlcDrv.cpp

Driver mainline function

Insert required global common areas.  Modify register files and values are required.  Modify inout and output datagram structure definition

PlcUsrInput.cpp

Process received values from PLC datagram and place in user data variables

Change as required

PlcUsrOutput.cpp

Get application variables and store in datagra for transmission to PLC

Change as required

GELPC Class Descriptions

 Click here to expand...

The Tsentry GePlc class encapsulates the functionality required to communicate with the GE PLC (9030 and 9070) over a TCP/IP network.

The following public member functions are provided as part of the tpriGePlc class:

  • tpriGePlc *pGePlc = new tpriGePlc;

    • Allocate a new tpriGePlc object

 

  • destroy (tpriGePlc *)pGePlc();

    • Destroy the tpriGePlc class object.

 

  • int Init (char *piffile, char *tplcIpAddr, unsigned short tPortNo,

                     long cTimeOut, long sTimeOut, long rTimeOut);

where:

char *piffile = initialization file name (currently not supported) = NULL

char *tplcIpAddr = IP address of the PLC in xxx.xxx.xxx.xxx format

unsigned short tPortNo = port (service) number of the TCP support in the GE PLC.  This value is normally fised at 18245 by GE.

            long cTimeOut = Connection timeout value in milliseconds

long sTimeOut = Send message timeout value in milliseconds

long rTimeOut = receive message timeout value in milliseconds

This function stores parameter values for use by the member functions of the class

  • int Connect ();

    • Connect (using TCP/IP) to the PLC and open an application connection

 

  • int Write (char *seg, int ref, int size, int bMode, unsigned char *buffer);

where

            char *seg = segment (plc memory area) type

                        “R”            = register variable

                        "L"            = Local Data Table (%L)

                        "P"            = Program Data Table (%P)

                        "R"            = Register Table (%R)

                        "AI"            = Analog Input Table (%AI)

                        "AQ"            = Analog Output Table (%AQ)

                        "I"               = Discrete Input Table, byte mode (%I)

                        "Q"            = Discrete Output Table, byte mode (%Q)

                        "T"            = Discrete Temporary Table, byte mode (%T)

                        "M"            = Discrete Internal Table, byte mode (%M)

                        "SA"            = Discrete System A Table, byte mode (%SA)

                        "SB"            = Discrete System B Table, byte mode (%SB)

                        "SC"            = Discrete System C Table, byte mode (%SC)

                        "S"            = Discrete System D Table, byte mode (%S)

                        "G"            = Genius Global Data Table, byte mode (%G)

                        "GA"            = Genius Global Data Table, byte mode (%GA)

            int ref = 1st variable within segment to transfer (beginning of table = 1)

int size = size of transfer in number of words, bytes or bits (see bmode)

int bmode = units size;

0 = words or bytes,

1 = bits

unsigned char *buffer = pointer to application program data buffer

This function writes an application buffer to the PLC

 

  • int Read (char *seg, int ref, int size, int bMode, unsigned char *buffer);

where

            char *seg = segment (plc memory area) type

                        See definitions in the Write function

            int ref = 1st variable within segment to transfer (beginning of table = 1)

int size = size of transfer in native units (words, bytes or bits) see bmode

int bmode = transfer unit size; 0 = words or bytes, 1 = bits

unsigned char *buffer = pointer to application program data buffer

This function reads an application buffer from the PLC

 

  • int getSrpErrorCode();

Return an integer equal to the last SRTP (GE PLC protocol) error code

 

  • int Is_Connect ();

Return an integer that indicates whether the application has an open connection with the GE PLC

 Process Driver Mainline

Some comments on the driver program below:

  1. The global shared region addresses are normally passed to the functions PlsUsrInput and PlcUsrOutput by their calls in GePlcDrv.  However, in this test/example program they have been commented out.

  2. This test program, on each expiration of the process timer, writes a single block of data to the PLC and then reads a single block of data.  This sequence, the number of reads and writes, their addreses, and the sizes of the blocks can be modified to fit the requirements of the application.

  3. PlcUsrInput and PlcUsrOutput and the ‘datagram’ structures they reference should be modified as required to move appropriate variables to and from application variables for transfer between the PLC and the control system.

  4. A sample driver is provided in the examples subdirectories of the standard Tsentry distribution

TCP/IP Driver - TPRIRdcTcp

 Overview

The I/O driver library includes the tpriRdcTcp class for communications across a TCP/IP link to a remote device.  This class provides functions to open a connection to the device given its IP address/DNS name and the TCP/IP port number, to read and write data to and from the device, to close the connection when finished, and to listen on a port.  Blocking and non-blocking modes are both supported individually for connections and reads.  The library is composed of several static class functions that can be explicitly called without having to manage the underlying class itself.

 Socket Initialization

Before the library functions can be used, the sockets need to be initialized using the Windows Sockets function WSAStartup. Here is an example:

   WSADATA wsaData;
   int socketInit;
   // set up windows sockets
   socketInit = WSAStartup(0x0020, &wsaData);
   if (socketInit != 0)
      {
      // error initializing windows sockets
      std::cout << "Error initializing sockets.\n";
      }
 Static Class Functions
int tpriRdcTcp::open(int *devHndl, char *devName, int portNum, int blocking = -1, struct sockaddr_in *pServer = NULL)
Open a connection to the specified device.
Inputs:
int *devHndl   Pointer to device handle that will be returned from the open call.  
For non-blocking requests this must point to a handle equal to -1 on the first attempt and passed unchanged to subsequent open calls (made while open remains in progress).
char *devName   Remote device name.
int portNum     Remote device TCP/IP port number
int blocking    Flag indicating if the open should block until success/failure (1) or return immediately (0).  Passing -1 indicates that the blocking state should remain unchanged from its previous value.
sockaddr_in *pSvr Pointer to server structure that will be filled in by the open call. Once filled in, the same structure can be passed on subsequent blocking calls to speed up the connection process. Passing a NULL pointer will turn off this feature.
Return value:
Blocking calls: This function returns zero if successful or a positive integer if the open fails.  If successful, the device handle will be stored in the location pointed to by devHndl.  
Non-Blocking calls: This function will return -1 to indicate that the open is still pending; call repeatedly until it returns a success or failure. 
int tpriRdcTcp::close(int devHndl) 
Close a connection associated with a device handle.
Inputs:
int devHndl      Device handle as returned from the open call.
Return value:
Always 0.

int tpriRdcTcp::read(int devHndl, char *rxBuf, int rxCnt, int blocking = -1) 
Read a set of data from a remote device.
Inputs:
int devHndl      Device handle as returned from the open call.
char *rxBuf      Pointer to the buffer into which the received data should be placed.
int rxCnt      Maximum number of bytes to read.
int blocking      Flag indicating if the read should block until rxCnt bytes have been read (1) or return immediately (0) with whatever data is available.  Passing -1 indicates that the blocking state should remain unchanged from its previous value.
Return value:
If successful, the number of characters successfully read is returned.   1 indicates that an error occurred, and information about that error is available through WSAGetLastError().  -99 indicates that the connection has been closed.
int tpriRdcTcp::write(int devHndl, char *txBuf, int txCnt) 
Write a set of data to a remote device.
Inputs:
int devHndl      Device handle as returned from the open call.
char *txBuf      Pointer to the buffer containing the data to be written.
int txCnt      Number of bytes to write.
Return value:
If successful, the number of characters successfully written is returned.   1 indicates an error occurred.
int tpriRdcTcp::listen(int *devHndl, int *svrHndl, int portNum, int backLog,
                                 int blocking /* = -1 */, char *hostName /* = NULL */)
Listen for incoming TCP/IP connections.
Inputs:
   int *devHndl      Pointer to device handle that will be returned 
                     when a remote device connects to the server.  
   int *svrHndl      Pointer to device handle associated with the
                     server socket.  This handle can be reused to
                     accept multiple connections.
                     This must point to a handle equal to -1 on the 
                     first attempt and passed unchanged to
                     subsequent listen calls.
   int portNum       Remote device TCP/IP port number.
   int backLog       Maximum number of connections to allow.
   int blocking      Flag indicating if the open should block until
                     success/failure (1) or return immediately (0).
                     Passing a -1 indicates that the blocking state 
                     should remain unchanged from its previous value.
   char *hostName    Local device name (if desired).
Return value:
   Blocking calls:
      This function returns zero if successful or a positive integer
      if the open fails.  If successful, the device handle will be
      stored in the location pointed to by devHndl.  
   Non-Blocking calls:
      This function will return -1 to indicate that no connections
      are pending; call repeatedly until it returns a success or
      failure. 

Lantronix Terminal Server Driver - tpriRdcLts

 Overview

The I/O driver library includes the tpriRdcLts class for communications through a Lantronix terminal server to a remote device.  This class provides functions to open a connection to a specified port on the desired terminal server, to read and write data to and from the device attached to the terminal server, and to close the connection when finished.  Blocking and non-blocking modes are both supported individually for connections and reads.  The library is composed of several static class functions that can be explicitly called without having to manage the underlying class itself.

  • No labels