0% found this document useful (0 votes)
89 views

SBIR Final Report Phase II B

This document summarizes work to add an NTCIP interface to the open source Signal Control Programming Environment (SCOPE). Tasks included updating SNMP tools to the latest version, obtaining NTCIP MIBs, translating the MIBs, installing the MIB objects into the SNMP library, and designing and implementing an NTCIP access program. SCOPE was then tested at a live intersection in Orlando, including measuring its performance.

Uploaded by

rory lin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
89 views

SBIR Final Report Phase II B

This document summarizes work to add an NTCIP interface to the open source Signal Control Programming Environment (SCOPE). Tasks included updating SNMP tools to the latest version, obtaining NTCIP MIBs, translating the MIBs, installing the MIB objects into the SNMP library, and designing and implementing an NTCIP access program. SCOPE was then tested at a live intersection in Orlando, including measuring its performance.

Uploaded by

rory lin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 32

Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report

Feb 10, 2013 Advanced Technologies, Incorporated

Signal State Transition Software Development


NTCIP INTERFACE &
LIVE INTERSECTION TESTING
SBIR 06-FH1
Phase II B - Final Report

Advanced Technologies, Inc


5703 Red Bug Lake Road, #320
Winter Springs, Florida 32708
858-401-3535
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Table of Contents
Summary......................................................................................................................................................3
Tasks and Results.........................................................................................................................................4
Task 1......................................................................................................................................................4
Steps / Results.....................................................................................................................................4
Step 1: Update ATI's Prototype NET-SNMP Toolset to the Latest Version......................................4
Step 2: Obtain NEMA NTCIP 1201/1202 MIBS..............................................................................5
Step 3: Translate the MIBs Using the Free mibs2c Tool...................................................................5
Step 4: Compile the c files to produce shared NTCIP objects..........................................................8
Step 5: Install Shared NTCIP Objects into our SNMP Library.......................................................10
Step 6: Produce a Diagram Showing the NTCIP Object Hierarchy.................................................11
Task 2....................................................................................................................................................22
Steps / Results...................................................................................................................................22
Step 1: Design and Implement the ATI NTCIP Access Program. ................................................22
Step 2: Turn the Program into Library Routines.............................................................................23
Step 3: C/C++ and Ada wrappers....................................................................................................23
Steps 4 and 5: Modify SCOPE and Java GUI to use the new NTCIP Library................................24
Steps 6: Engineering Tests...............................................................................................................24
Task 3....................................................................................................................................................25
Steps / Results...................................................................................................................................25
Step 1: Obtain Dedicated Access to an Intersection........................................................................25
Step 2: Test SCOPE at the “Live” Intersection...............................................................................25
Step 3: Measure Performance..........................................................................................................27
Conclusions and Future Development.......................................................................................................29
Conclusions...........................................................................................................................................29
Future Development and Necessary Enhancements.............................................................................29
Appendix A: Upper Level Design.............................................................................................................30
Appendix B: Live Intersection Testing.....................................................................................................31
Timing Parameters................................................................................................................................31
Additional Photos of Field Testing.......................................................................................................32

2
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Summary
During Phase IIB, Advanced Technologies, Incorporated added an NTCIP interface to their open source
Signal Control Programming Environment (SCOPE). We also tested SCOPE at a “live” intersection
located in Orlando, Florida.

SCOPE development has been funded by the U.S. Department of Transportation under Small Business
Innovative Research (SBIR) grants. SCOPE has its own website, https://sites.google.com/site/
atiscope/home, that contains requirement/design documentation, test videos, test scenarios, and links to
the source code hosted on Sourceforge.

SCOPE:

• Implements Actuated Control with phases running in Min Recall Mode, Max Recall Mode, Gap
Out Mode, Max Out Mode, Presence Mode, Lane-by-Lane Control and newly developed Signal
Transition Logic. Any phase can run any mode.
• Can be controlled using NTCIP 1201 and 1202 commands.
• Contains a Pretimed Mode allowing control of 3-leg, 4-leg, and Texas Diamond Intersections
• Executes under Linux but can be easily ported to any operating system.
• Can handle 64 individual detector inputs and 8 pedestrian inputs.
• Currently runs on three different platforms ...
• A Linux based PC (used for concept and unit testing).
• A PowerPC prototype board with various I/O connectors.
• An Advanced Traffic Controller (tested on PEEK ATC-1000).
• Has been integrated with the open source TEXAS traffic control simulator.
• Has selectable NEMA-TS2 or ITS output formats.
• Contains a Controller Interface Device (CID) software simulator.
• Is dual redundant, containing two different implementations of the same logic.
• The “primary” implementation is in Ada95 with Ada2005 extensions.
• The "secondary" implementation is in C++.
• Contains several different and unique interfaces
• An Advanced Traffic Controller ASCII display / keyboard interface.
• A Java interface capable of controlling SCOPE from anywhere in the world over the
internet.
• A wireless Android Tablet interface allowing a traffic engineer to access SCOPE without
opening a cabinet.
• Has the ability to simulate 64 actuated inputs (new call, has call, had call) and 8
pedestrian inputs.

SCOPE was introduced to the intelligent traffic systems community at the 18th World Congress on
Intelligent Transportation Systems in October, 2011. At this Orlando, Florida conference ATI presented
a paper titled "Real-Time Open Source Traffic Control for the Advanced Traffic Controller". ATI also
had a demonstration booth where all three current SCOPE platforms were running. SCOPE has been
used by university researchers at UCF and showed a 40% throughput increase at a campus intersection.

3
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Tasks and Results

Task 1
Task 1 is defined as the installation and testing of the latest NTCIP MIBS from the National
Transportation Communications for ITS Protocol website managed by NEMA.

Steps / Results

Step 1: Update ATI's Prototype NET-SNMP Toolset to the Latest Version.


Results:

[ATI@ATI ~]$ /usr/sbin/snmpd -v

NET-SNMP version: 5.4.2.1


Web: http://www.net-snmp.org/
Email: [email protected]

[root@ATI ATI]# yum update net-snmp


Loaded plugins: dellsysidplugin2, refresh-packagekit
Setting up Update Process
No Packages marked for Update

No packages marked for update means that our snmp toolset is the latest compatible version
with the Linux kernel we are currently running on our development machines,

[ATI@ATI ~]$ uname -r


2.6.32.26-175.fc12.i686.PAE

The snmp toolset was tested locally and remotely. Local testing was done using the NTCIP 1201 and
1202 MIB definitions. For example, the command line:

[ATI@localhost mibs]$ snmpset -v 2c -c private localhost NTCIP1202-2004::phaseWalk.1 i 20


NTCIP1202-2004::phaseWalk.1 = INTEGER: 20

Set the PhaseWalk(1) to 20 .

To read it back

[ATI@localhost mibs]$ snmpget -v 2c -c private localhost NTCIP1202-2004::phaseWalk.1


NTCIP1202-2004::phaseWalk.1 = INTEGER: 20

Version 2c of snmp is used (-v 2c) along with private access (-c private). The MIB being accessed is
NTCIP1202-2004 and the value returned is the first phase walk value.

To ensure we could remotely access MIBs (system up time), we accessed a public test MIB located on
the net-snmp.org system.

the command: snmpget -v 2c -c demopublic test.net-snmp.org SNMPv2-MIB::sysUpTime.0


returned: DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (178858354) 20 days, 16:49:43.54

4
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

This told us that the net-snmp test server has been running for over 20 days but more importantly,
proved we could access MIBs remotely.

Step 2: Obtain NEMA NTCIP 1201/1202 MIBS.


Ensure ATI has the latest and, more importantly, most stable version of the NEMA NTCIP 1201/1202
MIBS.

Results:

ATI obtained FTP access via NEMA to the NTCIP website. We downloaded and tested every MIB
revision available (the base MIBS, V2.0.11, and V2.2.07). The most stable MIBS for NTCIP 1201 and
1202 definitions were:

8004v0212.mib
1201v0307-Main.mib
1202v0218.mib

It is a simple upgrade to replace MIBS as they are improved and enhanced. The MIB definitions,
directly from the NTCIP website, are placed in a .snmp/mibs directory under the base Linux account.

Step 3: Translate the MIBs Using the Free mibs2c Tool.


Results:

Each object defined in the 1201 and 1202 MIBS table was translated using the mibs2c tool. The
example shown below is the translation of the NTCIP 1202 MIB phase table object.

[ATI@localhost MIBS]$ env MIBS="NTCIP1202-2004" mib2c phaseTable


writing to -
mib2c has multiple configuration files depending on the type of
code you need to write. You must pick one depending on your need.

You requested mib2c to be run on the following part of the MIB tree:
OID: phaseTable
numeric translation: .1.3.6.1.4.1.1206.4.2.1.1.2
number of scalars within: 0
number of tables within: 1
number of notifications within: 0

First, do you want to generate code that is compatible with the


ucd-snmp 4.X line of code, or code for the newer Net-SNMP 5.X code
base (which provides a much greater choice of APIs to pick from):

1) ucd-snmp style code


2) Net-SNMP style code

Select your choice : 2

**********************************************************************
GENERATING CODE FOR TABLES:

5
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

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

Your tables will likely either fall into one of two categories:

1) tables where the list of rows is external to the agent.


This is suited to MIBs which monitor or manipulate external
data (perhaps extracted from the operating system kernel
or other system interfaces), and where rows are typically
created or destroyed independently of the SNMP agent.

2) tables where the list of rows is held by the agent itself.


This is particularly suited to tables that are primarily
manipulated via SNMP, or where the rows of the table are
relatively static.

3) Do not generate code for the tables.

Select the option that best fits you: 2

This style of table holds a list of the table rows internally


within the agent itself. Typically this will tend to include
the column values for each particular row, and that is the
model used by the generated template code. But it should usually
be possible to read in some or all of the column values from an
external source, should this be necessary for a particular MIB table.

There are a number of different template configurations that


can be used as a framework for this:

1) dataset storage: The data for the table is stored completely


within the agent, and the user-visible code does not need to
be concerned with the internal representation of an individual
row. This is most suited to MIB tables that are purely internal
to the agent, rather than modelling external data, or using
existing data structures.
The same template can be generated using
mib2c -c mib2c.create-dataset.conf phaseTable

2) row-data storage: The data for the table is held by the agent,
but using an arbitrary (user-provided) data structure for the
representation of an individual row. This is suited for MIB
tables where there is a natural existing data structure,
or where the contents of the table may need to be interpreted
for some additional purpose, other than simply implementing
the table for SNMP requests.
The same template can be generated using
mib2c -c mib2c.table_data.conf phaseTable

3) container storage: This is very similar to the previous row-data


mechanism, but uses a different (and slightly more efficient)
internal representation. The main practical effect is to
introduce a slight constraint on the form of the per-row data
structure.
The same template can be generated using
mib2c -c mib2c.container.conf phaseTable

All three of these templates generate a single code file, and

6
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

use a "single handler" format for the driving code.

4) sorted array: The data for the table is stored in a sorted


array.
(manually mib2c -c mib2c.array-user.conf phaseTable)

5) Net-SNMP container: (Also known as "MIBs for Dummies", or MFD.)


The data for the table is stored via a
generic interface. Various types of containers may be
selected, including linked lists or binary arrays.
(manually mib2c -c mib2c.mfd.conf phaseTable)

6) Do not generate code for the tables.

All APIs are fully functional with little-to-no required code


to make the table operational on your end once the template
code is produced. The MFD and dataset APIs are a bit better
documented, but the sorted array is probably better tested
as it was used heavily in the net-policy sourceforge project.
The MFD API is the successor to the array-user API, and several
tables in the Net-SNMP agent have been re-written to use it.
The dataset API is used inside the snmptrapd application for
logging incoming traps.

Select the API style you wish to use: 5

using the mib2c.mfd.conf configuration file to generate your code.

Defaults for phaseTable...


There are existing defaults for phaseTable (defaults/table-phaseTable.m2d).
r)econfigure or u)se existing [default=u] : u
writing to defaults/table-phaseTable.m2d
Starting MFD code generation...
writing to phaseTable.h
| +-> Processing table phaseTable
writing to phaseTable.c
writing to phaseTable_data_get.h
writing to phaseTable_data_get.c
| | +-> Processing nonindex phaseWalk
| | +-> Processing nonindex phasePedestrianClear
| | +-> Processing nonindex phaseMinimumGreen
| | +-> Processing nonindex phasePassage
| | +-> Processing nonindex phaseMaximum1
| | +-> Processing nonindex phaseMaximum2
| | +-> Processing nonindex phaseYellowChange
| | +-> Processing nonindex phaseRedClear
| | +-> Processing nonindex phaseRedRevert
| | +-> Processing nonindex phaseAddedInitial
| | +-> Processing nonindex phaseMaximumInitial
| | +-> Processing nonindex phaseTimeBeforeReduction
| | +-> Processing nonindex phaseCarsBeforeReduction
| | +-> Processing nonindex phaseTimeToReduce
| | +-> Processing nonindex phaseReduceBy
| | +-> Processing nonindex phaseMinimumGap
| | +-> Processing nonindex phaseDynamicMaxLimit
| | +-> Processing nonindex phaseDynamicMaxStep
| | +-> Processing nonindex phaseStartup

7
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

| | +-> Processing nonindex phaseOptions


| | +-> Processing nonindex phaseRing
| | +-> Processing nonindex phaseConcurrency
writing to phaseTable_data_set.h
writing to phaseTable_data_set.c
Use of uninitialized value $key in hash element at /usr/lib/perl5/SNMP.pm line
1325, <GEN439> line 826.
Use of uninitialized value $key in hash element at /usr/lib/perl5/SNMP.pm line
1326, <GEN439> line 826.
Use of uninitialized value in null operation at /usr/lib/perl5/SNMP.pm line
1325, <GEN439> line 826.
| | +-> Processing nonindex phaseWalk
| | +-> Processing nonindex phasePedestrianClear
| | +-> Processing nonindex phaseMinimumGreen
| | +-> Processing nonindex phasePassage
| | +-> Processing nonindex phaseMaximum1
| | +-> Processing nonindex phaseMaximum2
| | +-> Processing nonindex phaseYellowChange
| | +-> Processing nonindex phaseRedClear
| | +-> Processing nonindex phaseRedRevert
| | +-> Processing nonindex phaseAddedInitial
| | +-> Processing nonindex phaseMaximumInitial
| | +-> Processing nonindex phaseTimeBeforeReduction
| | +-> Processing nonindex phaseCarsBeforeReduction
| | +-> Processing nonindex phaseTimeToReduce
| | +-> Processing nonindex phaseReduceBy
| | +-> Processing nonindex phaseMinimumGap
| | +-> Processing nonindex phaseDynamicMaxLimit
| | +-> Processing nonindex phaseDynamicMaxStep
| | +-> Processing nonindex phaseStartup
| | +-> Processing nonindex phaseOptions
| | +-> Processing nonindex phaseRing
| | +-> Processing nonindex phaseConcurrency
writing to phaseTable_oids.h
writing to phaseTable_enums.h
writing to phaseTable_interface.h
writing to phaseTable_interface.c
writing to phaseTable_data_access.h
Example code is for fully transient data. Either turn off
m2c_include_examples or set m2c_data_transient to 2.
exiting at conf file (/usr/share/snmp/mib2c-data/mfd-access-unsorted-external-
defines.m2i:32) request

Step 4: Compile the c files to produce shared NTCIP objects.


Results:

Step 3 had produced the following c code files -


[ATI@ATI C_CODE]$ pwd
/home/ATI/SCOPE/CODE/NTCIP/C_CODE
[ATI@ATI C_CODE]$ dir *.h *.c
4 -rw-rw-r--. 1 ATI ATI 849 2012-08-27 11:40 unit.h
8 -rw-rw-r--. 1 ATI ATI 6168 2012-08-27 11:40 unit.c
4 -rw-rw-r--. 1 ATI ATI 328 2012-08-27 11:40 unitAlarmStatus2.h
4 -rw-rw-r--. 1 ATI ATI 2683 2012-08-27 11:40 unitAlarmStatus2.c

8
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

4 -rw-rw-r--. 1 ATI ATI 611 2012-08-27 11:40 ts2port1.h


4 -rw-rw-r--. 1 ATI ATI 3319 2012-08-27 11:40 ts2port1.c
4 -rw-rw-r--. 1 ATI ATI 662 2012-08-27 11:40 timebaseAsc.h
4 -rw-rw-r--. 1 ATI ATI 3573 2012-08-27 11:40 timebaseAsc.c
4 -rw-rw-r--. 1 ATI ATI 1261 2012-08-27 11:40 ring.h
12 -rw-rw-r--. 1 ATI ATI 9446 2012-08-27 11:40 ring.c
4 -rw-rw-r--. 1 ATI ATI 608 2012-08-27 11:40 profilesPMPP.h
4 -rw-rw-r--. 1 ATI ATI 3395 2012-08-27 11:40 profilesPMPP.c
4 -rw-rw-r--. 1 ATI ATI 1636 2012-08-27 11:40 preempt.h
12 -rw-rw-r--. 1 ATI ATI 8975 2012-08-27 11:40 preempt.c
4 -rw-rw-r--. 1 ATI ATI 2376 2012-08-27 11:40 phase.h
16 -rw-rw-r--. 1 ATI ATI 13451 2012-08-27 11:40 phase.c
4 -rw-rw-r--. 1 ATI ATI 1055 2012-08-27 11:40 overlap.h
8 -rw-rw-r--. 1 ATI ATI 6824 2012-08-27 11:40 overlap.c
4 -rw-rw-r--. 1 ATI ATI 1663 2012-08-27 11:40 globalTimeManagement.h
12 -rw-rw-r--. 1 ATI ATI 10789 2012-08-27 11:40 globalTimeManagement.c
4 -rw-rw-r--. 1 ATI ATI 686 2012-08-27 11:40 globalModuleTable.h
4 -rw-rw-r--. 1 ATI ATI 3704 2012-08-27 11:40 globalModuleTable.c
4 -rw-rw-r--. 1 ATI ATI 1965 2012-08-27 11:40 global.h
4 -rw-rw-r--. 1 ATI ATI 336 2012-08-27 11:40 globalDBManagement.h
8 -rw-rw-r--. 1 ATI ATI 6320 2012-08-27 11:40 globalDBManagement.c
4 -rw-rw-r--. 1 ATI ATI 694 2012-08-27 11:40 globalConfiguration.h
4 -rw-rw-r--. 1 ATI ATI 3710 2012-08-27 11:40 globalConfiguration.c
16 -rw-rw-r--. 1 ATI ATI 13975 2012-08-27 11:40 global.c
4 -rw-rw-r--. 1 ATI ATI 2160 2012-08-27 11:40 detector.h
16 -rw-rw-r--. 1 ATI ATI 14471 2012-08-27 11:40 detector.c
4 -rw-rw-r--. 1 ATI ATI 917 2012-08-27 11:40 coord.h
8 -rw-rw-r--. 1 ATI ATI 6280 2012-08-27 11:40 coord.c
4 -rw-rw-r--. 1 ATI ATI 974 2012-08-27 11:40 channel.h
8 -rw-rw-r--. 1 ATI ATI 6533 2012-08-27 11:40 channel.c

These files were compiled using gcc to produce the following shared objects:

20 -rwxrwxr-x. 1 ATI ATI 18199 2012-08-27 11:46 unit.so


16 -rwxrwxr-x. 1 ATI ATI 14736 2012-08-27 11:46 unitAlarmStatus2.so
16 -rwxrwxr-x. 1 ATI ATI 16323 2012-08-27 11:46 ts2port1.so
20 -rwxrwxr-x. 1 ATI ATI 16513 2012-08-27 11:46 timebaseAsc.so
20 -rwxrwxr-x. 1 ATI ATI 19938 2012-08-27 11:46 ring.so
20 -rwxrwxr-x. 1 ATI ATI 16476 2012-08-27 11:46 profilesPMPP.so
20 -rwxrwxr-x. 1 ATI ATI 19151 2012-08-27 11:46 preempt.so
24 -rwxrwxr-x. 1 ATI ATI 21500 2012-08-27 11:46 phase.so
20 -rwxrwxr-x. 1 ATI ATI 18327 2012-08-27 11:46 overlap.so
24 -rwxrwxr-x. 1 ATI ATI 20518 2012-08-27 11:46 globalTimeManagement.so
24 -rwxrwxr-x. 1 ATI ATI 22248 2012-08-27 11:46 global.so
20 -rwxrwxr-x. 1 ATI ATI 16566 2012-08-27 11:46 globalModuleTable.so
20 -rwxrwxr-x. 1 ATI ATI 17762 2012-08-27 11:46 globalDBManagement.so
20 -rwxrwxr-x. 1 ATI ATI 16578 2012-08-27 11:46 globalConfiguration.so
24 -rwxrwxr-x. 1 ATI ATI 22656 2012-08-27 11:46 detector.so
20 -rwxrwxr-x. 1 ATI ATI 18036 2012-08-27 11:46 coord.so
20 -rwxrwxr-x. 1 ATI ATI 18231 2012-08-27 11:46 channel.so

General purpose NTCIP access software was developed that provides a generic NTCIP interface to
programs written in different software libraries. This is the core of the ATI NTCIP user library.

16 -rw-rw-r--. 1 ATI ATI 13854 2012-09-10 15:22 libati_ntcip.a - static library


16 -rw-rw-r--. 1 ATI ATI 13564 2012-09-10 15:22 ati_ntcip_static_lib.o - shared library

9
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Step 5: Install Shared NTCIP Objects into our SNMP Library


Results:

The SNMP daemon configuration file (snmpd.conf) in the Linux /etc directory was modified using
snmp-config. This file tells the snmp daemon where the shared library implementations are for each
MIB definition.

[ATI@ATI snmp]$ pwd


/etc/snmp
[ATI@ATI snmp]$ more snmpd.conf
###########################################################################
#
# snmpd.conf
#
# - created by the snmpconf configuration program
#
###########################################################################
# SECTION: Access Control Setup
#
# This section defines who is allowed to talk to your running
# snmp agent.

# rwuser: a SNMPv3 read-write user


# arguments: user [noauth|auth|priv] [restriction_oid]

rwuser ATI

# rwcommunity: a SNMPv1/SNMPv2c read-write access community name


# arguments: community [default|hostname|network/bits] [oid]

rwcommunity private 127.0.0.1


com2sec local localhost XXXXXXX

###########################################################################
# SECTION: System Information Setup
#
# This section defines some of the information reported in
# the "system" mib group in the mibII tree.

# syslocation: The [typically physical] location of the system.


# Note that setting this value here means that when trying to
# perform an snmp SET operation to the sysLocation.0 variable will make
# the agent return the "notWritable" error code. IE, including
# this token in the snmpd.conf file will disable write access to
# the variable.
# arguments: location_string

syslocation "ATI Winter Springs, FL"

# syscontact: The contact information for the administrator


# Note that setting this value here means that when trying to
# perform an snmp SET operation to the sysContact.0 variable will make
# the agent return the "notWritable" error code. IE, including
# this token in the snmpd.conf file will disable write access to
# the variable.

10
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

# arguments: contact_string

syscontact [email protected]

dlmod global /home/ATI/SCOPE/CODE/NTCIP/C_CODE/global.so


dlmod phase /home/ATI/SCOPE/CODE/NTCIP/C_CODE/phase.so
dlmod preempt /home/ATI/SCOPE/CODE/NTCIP/C_CODE/preempt.so
dlmod overlap /home/ATI/SCOPE/CODE/NTCIP/C_CODE/overlap.so
dlmod coord /home/ATI/SCOPE/CODE/NTCIP/C_CODE/coord.so
dlmod channel /home/ATI/SCOPE/CODE/NTCIP/C_CODE/channel.so
dlmod unit /home/ATI/SCOPE/CODE/NTCIP/C_CODE/unit.so
dlmod unitAlarmStatus2 /home/ATI/SCOPE/CODE/NTCIP/C_CODE/unitAlarmStatus2.so
dlmod ring /home/ATI/SCOPE/CODE/NTCIP/C_CODE/ring.so
dlmod profilesPMPP /home/ATI/SCOPE/CODE/NTCIP/C_CODE/profilesPMPP.so
dlmod globalTimeManagement
/home/ATI/SCOPE/CODE/NTCIP/C_CODE/globalTimeManagement.so
dlmod globalModuleTable /home/ATI/SCOPE/CODE/NTCIP/C_CODE/globalModuleTable.so
dlmod globalDBManagement
/home/ATI/SCOPE/CODE/NTCIP/C_CODE/globalDBManagement.so
dlmod globalConfiguration
/home/ATI/SCOPE/CODE/NTCIP/C_CODE/globalConfiguration.so
dlmod detector /home/ATI/SCOPE/CODE/NTCIP/C_CODE/detector.so
dlmod ts2port1 /home/ATI/SCOPE/CODE/NTCIP/C_CODE/ts2port1.so
dlmod timebaseAsc /home/ATI/SCOPE/CODE/NTCIP/C_CODE/timebaseAsc.so

Step 6: Produce a Diagram Showing the NTCIP Object Hierarchy.


Results:
We ran the translation tool on every single MIB definition to produce an object hierachy that includes
object definitions containing field identifiers, field access (read-write, read-only), field types (strings,
integers, etc) and field ranges. A sample command used:

snmptranslate -M+. -mNTCIP1201-2008 -Tp -IR global

And, the result of all commands:


+--global(6)
+--globalConfiguration(1)
+-- READONLY INTEGER globalSetIDParameter(1) Range: 0..65535
+-- READONLY INTEGER globalMaxModules(2) Range: 1..255
| +--globalModuleTable(3)
| | +--moduleTableEntry(1) Index: moduleNumber
| | +-- READONLY INTEGER moduleNumber(1) Range: 1..255
| | +-- READONLY ObjID moduleDeviceNode(2)
| | +-- READONLY String moduleMake(3)
| | +-- READONLY String moduleModel(4)
| | +-- READONLY String moduleVersion(5)
| | +-- READONLY EnumVal moduleType(6)
Values: other(1),hardware(2),software(3)
| |
| +-- READONLY String controllerBaseStandards(4) Size: 0..256
|
+--globalDBManagement(2)
| |
| +-- READ/WRI EnumVal dbCreateTransaction(1)
Values: normal(1),transaction(2),verify(3),done(6)
| +-- READONLY EnumVal dbErrorType(2)
Values: tooBig(1),noSuchName(2),badValue(3),readOnly(4),
genError(5),updateError(6),noError(7)
| +-- READONLY ObjID dbErrorID(3)
| +-- READ/WRI INTEGER dbTransactionID(4) Range: 0..255
| +-- READONLY INTEGER dbMakeID(5) Range: 0..255

11
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

| +-- READONLY EnumVal dbVerifyStatus(6)


Values: notDone(1),doneWithError(2),doneWithNoError(3)
| +-- READONLY String dbVerifyError(7) Size: 0..255
|
+--globalTimeManagement(3)
|
+-- READ/WRI Counter globalTime(1)
+-- READ/WRI EnumVal globalDaylightSaving(2)
Values: other(1),disableDST(2),enableUSDST(3),enableEuropeDST(4),
enableAustraliaDST(5),enableTasmaniaDST(6),enableEgyptDST(7),
enableNamibiaDST(8),enableIraqDST(9),enableMangoliaDST(10),
enableIranDST(11),enableFijiDST(12),enableNewZealandDST(13),
enableTongaDST(14),enableCubaDST(15),enableBrazilDST(16),
enableChileDST(17),enableFalklandsDST(18),enableParaguayDST(19)
|
+--timebase(3)
| |
| +-- READONLY INTEGER maxTimeBaseScheduleEntries(1) Range: 1..65535
| |
| +--timeBaseScheduleTable(2)
| | |
| | +--timeBaseScheduleEntry(1) Index: timeBaseScheduleNumber
| | |
| | +-- READONLY INTEGER timeBaseScheduleNumber(1) Range: 1..65535
| | +-- READ/WRI INTEGER timeBaseScheduleMonth(2) Range: 0..65535
| | +-- READ/WRI INTEGER timeBaseScheduleDay(3) Range: 0..255
| | +-- READ/WRI INTEGER timeBaseScheduleDate(4) Range: 0..2147483647
| | +-- READ/WRI INTEGER timeBaseScheduleDayPlan(5) Range: 0..255
| |
| +-- READONLY INTEGER maxDayPlans(3) Range: 1..255
| +-- READONLY INTEGER maxDayPlanEvents(4) Range: 1..255
| |
| +--timeBaseDayPlanTable(5)
| | |
| | +--timeBaseDayPlanEntry(1) Index: dayPlanNumber,dayPlanEventNumber
| | |
| | +-- READONLY INTEGER dayPlanNumber(1) Range: 1..255
| | +-- READONLY INTEGER dayPlanEventNumber(2) Range: 1..255
| | +-- READ/WRI INTEGER dayPlanHour(3) Range: 0..23
| | +-- READ/WRI INTEGER dayPlanMinute(4) Range: 0..59
| | +-- READ/WRI ObjID dayPlanActionNumberOID(5)
| |
| +-- READONLY INTEGER dayPlanStatus(6) Range: 0..255
| +-- READONLY INTEGER timeBaseScheduleTableStatus(7) Range: 0..65535
|
+-- READ/WRI INTEGER globalLocalTimeDifferential(4) Range: -43200..43200
+-- READ/WRI INTEGER controllerStandardTimeZone(5) Range: -43200..43200
+-- READONLY Counter controllerLocalTime(6)
|
+--daylightSavingNode(7)
|
+-- READONLY INTEGER maxDaylightSavingEntries(1) Range: 1..100
|
+--dstTable(2)
|
+--dstEntry(1) Index: dstEntryNumber
|
+-- READONLY INTEGER dstEntryNumber(1) Range: 1..100
+-- READ/WRI EnumVal dstBeginMonth(2)
Values: january(1),february(2),march(3),april(4),may(5),
june(6),july(7),august(8),september(9),october(10),
november(11),december(12),absolute(13),disabled(14),
other(15)
+-- READ/WRI EnumVal dstBeginOccurrences(3)
Values: first(1),second(2),third(3),
fourth(4),last(5),secondLast(6),
thirdLast(7),fourthLast(8),
specificDayOfMonth(9)
+-- READ/WRI EnumVal dstBeginDayOfWeek(4)
Values: sunday(1),monday(2),tuesday(3),wednesday(4),
thursday(5),friday(6),saturday(7)
+-- READ/WRI INTEGER dstBeginDayOfMonth(5) Range: 1..31

12
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

+-- READ/WRI INTEGER dstBeginSecondsToTransition(6) Range: 0..2147483647


+-- READ/WRI EnumVal dstEndMonth(7)
Values: january(1),february(2),march(3),april(4),may(5),
june(6),july(7),august(8),september(9),october(10),
november(11),december(12)
+-- READ/WRI EnumVal dstEndOccurrences(8)
Values: first(1),second(2),third(3),fourth(4),last(5),
secondLast(6),thirdLast(7),fourthLast(8),
specificDayOfMonth(9)
+-- READ/WRI EnumVal dstEndDayOfWeek(9)
Values: sunday(1),monday(2),tuesday(3),wednesday(4),
thursday(5),friday(6),saturday(7)
+-- READ/WRI INTEGER dstEndDayOfMonth(10) Range: 1..31
+-- READ/WRI INTEGER dstEndSecondsToTransition(11) Range: 0..2147483647
+-- READ/WRI INTEGER dstSecondsToAdjust(12) Range: 0..21600
|
+--globalConfiguration(1)
| |
| +-- READONLY INTEGER globalSetIDParameter(1) Range: 0..65535
| +-- READONLY INTEGER globalMaxModules(2) Range: 1..255
| |
| +--globalModuleTable(3)
| | |
| | +--moduleTableEntry(1) Index: moduleNumber
| | |
| | +-- READONLY INTEGER moduleNumber(1) Range: 1..255
| | +-- READONLY ObjID moduleDeviceNode(2)
| | +-- READONLY String moduleMake(3)
| | +-- READONLY String moduleModel(4)
| | +-- READONLY String moduleVersion(5)
| | +-- READONLY EnumVal moduleType(6)
Values: other(1),hardware(2),software(3)
| |
| +-- READONLY String controllerBaseStandards(4) Size: 0..256
|
+--globalDBManagement(2)
| |
| +-- READ/WRI EnumVal dbCreateTransaction(1)
Values: normal(1),transaction(2),verify(3),done(6)
| +-- READONLY EnumVal dbErrorType(2)
Values: tooBig(1),noSuchName(2),badValue(3),readOnly(4),genError(5),
updateError(6),noError(7)
| +-- READONLY ObjID dbErrorID(3)
| +-- READ/WRI INTEGER dbTransactionID(4) Range: 0..255
| +-- READONLY INTEGER dbMakeID(5) Range: 0..255
| +-- READONLY EnumVal dbVerifyStatus(6)
Values: notDone(1),doneWithError(2),doneWithNoError(3)
| +-- READONLY String dbVerifyError(7) Size: 0..255
|
+--globalTimeManagement(3)
|
+-- READ/WRI Counter globalTime(1)
+-- READ/WRI EnumVal globalDaylightSaving(2)
Values: other(1),disableDST(2),enableUSDST(3),enableEuropeDST(4),
enableAustraliaDST(5),enableTasmaniaDST(6),enableEgyptDST(7),
enableNamibiaDST(8),enableIraqDST(9),enableMangoliaDST(10),
enableIranDST(11),enableFijiDST(12),enableNewZealandDST(13),
enableTongaDST(14),enableCubaDST(15),enableBrazilDST(16),
enableChileDST(17),enableFalklandsDST(18),enableParaguayDST(19)
|
+--timebase(3)
| |
| +-- READONLY INTEGER maxTimeBaseScheduleEntries(1) Range: 1..65535
| |
| +--timeBaseScheduleTable(2)
| | |
| | +--timeBaseScheduleEntry(1) Index: timeBaseScheduleNumber
| | |
| | +-- READONLY INTEGER timeBaseScheduleNumber(1) Range: 1..65535
| | +-- READ/WRI INTEGER timeBaseScheduleMonth(2) Range: 0..65535
| | +-- READ/WRI INTEGER timeBaseScheduleDay(3) Range: 0..255
| | +-- READ/WRI INTEGER timeBaseScheduleDate(4) Range: 0..2147483647

13
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

| | +-- READ/WRI INTEGER timeBaseScheduleDayPlan(5) Range: 0..255


| |
| +-- READONLY INTEGER maxDayPlans(3) Range: 1..255
| +-- READONLY INTEGER maxDayPlanEvents(4) Range: 1..255
| |
| +--timeBaseDayPlanTable(5)
| | |
| | +--timeBaseDayPlanEntry(1) Index: dayPlanNumber,dayPlanEventNumber
| | |
| | +-- READONLY INTEGER dayPlanNumber(1) Range: 1..255
| | +-- READONLY INTEGER dayPlanEventNumber(2) Range: 1..255
| | +-- READ/WRI INTEGER dayPlanHour(3) Range: 0..23
| | +-- READ/WRI INTEGER dayPlanMinute(4) Range: 0..59
| | +-- READ/WRI ObjID dayPlanActionNumberOID(5)
| |
| +-- READONLY INTEGER dayPlanStatus(6) Range: 0..255
| +-- READONLY INTEGER timeBaseScheduleTableStatus(7) Range: 0..65535
|
+-- READ/WRI INTEGER globalLocalTimeDifferential(4) Range: -43200..43200
+-- READ/WRI INTEGER controllerStandardTimeZone(5) Range: -43200..43200
+-- READONLY Counter controllerLocalTime(6)
|
+--daylightSavingNode(7)
|
+-- READONLY INTEGER maxDaylightSavingEntries(1) Range: 1..100
|
+--dstTable(2)
|
+--dstEntry(1) Index: dstEntryNumber
|
+-- READONLY INTEGER dstEntryNumber(1) Range: 1..100
+-- READ/WRI EnumVal dstBeginMonth(2)
Values: january(1),february(2),march(3),april(4),may(5),
june(6),july(7),august(8),september(9),october(10),
november(11),december(12),absolute(13),disabled(14),
other(15)
+-- READ/WRI EnumVal dstBeginOccurrences(3)
Values: first(1),second(2),third(3),fourth(4),last(5),
secondLast(6),thirdLast(7),fourthLast(8),
specificDayOfMonth(9)
+-- READ/WRI EnumVal dstBeginDayOfWeek(4)
Values: sunday(1),monday(2),tuesday(3),wednesday(4),
thursday(5),friday(6),saturday(7)
+-- READ/WRI INTEGER dstBeginDayOfMonth(5) Range: 1..31
+-- READ/WRI INTEGER dstBeginSecondsToTransition(6) Range: 0..2147483647
+-- READ/WRI EnumVal dstEndMonth(7)
Values: january(1),february(2),march(3),april(4),may(5),
june(6),july(7),august(8),september(9),october(10),
november(11),december(12)
+-- READ/WRI EnumVal dstEndOccurrences(8)
Values: first(1),second(2),third(3),fourth(4),last(5),
secondLast(6),thirdLast(7),fourthLast(8),
specificDayOfMonth(9)
+-- READ/WRI EnumVal dstEndDayOfWeek(9)
Values: sunday(1),monday(2),tuesday(3),wednesday(4),
thursday(5),friday(6),saturday(7)
+-- READ/WRI INTEGER dstEndDayOfMonth(10) Range: 1..31
+-- READ/WRI INTEGER dstEndSecondsToTransition(11) Range: 0..2147483647
+-- READ/WRI INTEGER dstSecondsToAdjust(12) Range: 0..21600
+--globalModuleTable(3)
|
+--moduleTableEntry(1) Index: moduleNumber
|
+-- READONLY INTEGER moduleNumber(1) Range: 1..255
+-- READONLY ObjID moduleDeviceNode(2)
+-- READONLY String moduleMake(3)
+-- READONLY String moduleModel(4)
+-- READONLY String moduleVersion(5)
+-- READONLY EnumVal moduleType(6)
Values: other(1),hardware(2),software(3)
+--globalDBManagement(2)
|

14
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

+-- READ/WRI EnumVal dbCreateTransaction(1)


Values: normal(1),transaction(2),verify(3),done(6)
+-- READONLY EnumVal dbErrorType(2)
Values: tooBig(1),noSuchName(2),badValue(3),readOnly(4),genError(5),
updateError(6),noError(7)
+-- READONLY ObjID dbErrorID(3)
+-- READ/WRI INTEGER dbTransactionID(4) Range: 0..255
+-- READONLY INTEGER dbMakeID(5) Range: 0..255
+-- READONLY EnumVal dbVerifyStatus(6)
Values: notDone(1),doneWithError(2),doneWithNoError(3)
+-- READONLY String dbVerifyError(7) Size: 0..255
+--globalTimeManagement(3)
|
+-- READ/WRI Counter globalTime(1)
+-- READ/WRI EnumVal globalDaylightSaving(2)
Values: other(1),disableDST(2),enableUSDST(3),enableEuropeDST(4),
enableAustraliaDST(5),enableTasmaniaDST(6),enableEgyptDST(7),
enableNamibiaDST(8),enableIraqDST(9),enableMangoliaDST(10),
enableIranDST(11),enableFijiDST(12),enableNewZealandDST(13),
enableTongaDST(14),enableCubaDST(15),enableBrazilDST(16),
enableChileDST(17),enableFalklandsDST(18),enableParaguayDST(19)
|
+--timebase(3)
| |
| +-- READONLY INTEGER maxTimeBaseScheduleEntries(1) Range: 1..65535
| |
| +--timeBaseScheduleTable(2)
| | |
| | +--timeBaseScheduleEntry(1) Index: timeBaseScheduleNumber
| | |
| | +-- READONLY INTEGER timeBaseScheduleNumber(1) Range: 1..65535
| | +-- READ/WRI INTEGER timeBaseScheduleMonth(2) Range: 0..65535
| | +-- READ/WRI INTEGER timeBaseScheduleDay(3) Range: 0..255
| | +-- READ/WRI INTEGER timeBaseScheduleDate(4) Range: 0..2147483647
| | +-- READ/WRI INTEGER timeBaseScheduleDayPlan(5) Range: 0..255
| |
| +-- READONLY INTEGER maxDayPlans(3) Range: 1..255
| +-- READONLY INTEGER maxDayPlanEvents(4) Range: 1..255
| |
| +--timeBaseDayPlanTable(5)
| | |
| | +--timeBaseDayPlanEntry(1) Index: dayPlanNumber,dayPlanEventNumber
| | |
| | +-- READONLY INTEGER dayPlanNumber(1) Range: 1..255
| | +-- READONLY INTEGER dayPlanEventNumber(2) Range: 1..255
| | +-- READ/WRI INTEGER dayPlanHour(3) Range: 0..23
| | +-- READ/WRI INTEGER dayPlanMinute(4) Range: 0..59
| | +-- READ/WRI ObjID dayPlanActionNumberOID(5)
| |
| +-- READONLY INTEGER dayPlanStatus(6) Range: 0..255
| +-- READONLY INTEGER timeBaseScheduleTableStatus(7) Range: 0..65535
|
+-- READ/WRI INTEGER globalLocalTimeDifferential(4) Range: -43200..43200
+-- READ/WRI INTEGER controllerStandardTimeZone(5) Range: -43200..43200
+-- READONLY Counter controllerLocalTime(6)
|
+--daylightSavingNode(7)
|
+-- READONLY INTEGER maxDaylightSavingEntries(1) Range: 1..100
|
+--dstTable(2)
|
+--dstEntry(1) Index: dstEntryNumber
|
+-- READONLY INTEGER dstEntryNumber(1) Range: 1..100
+-- READ/WRI EnumVal dstBeginMonth(2)
Values:
january(1),february(2),march(3),april(4),may(5),june(6),
july(7),august(8),september(9),october(10),november(11),
december(12),absolute(13),disabled(14),other(15)
+-- READ/WRI EnumVal dstBeginOccurrences(3)
Values: first(1),second(2),third(3),fourth(4),last(5),

15
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

secondLast(6),thirdLast(7),fourthLast(8),specificDayOfMonth(9)
+-- READ/WRI EnumVal
dstBeginDayOfWeek(4)
Values:
sunday(1),monday(2),tuesday(3),wednesday(4),thursday(5),
friday(6),saturday(7)
+-- READ/WRI INTEGER dstBeginDayOfMonth(5) Range: 1..31
+-- READ/WRI INTEGER dstBeginSecondsToTransition(6) Range: 0..2147483647
+-- READ/WRI EnumVal dstEndMonth(7)
Values:
january(1),february(2),march(3),april(4),may(5),june(6),
july(7),august(8),september(9),october(10),november(11),
december(12)
+-- READ/WRI EnumVal dstEndOccurrences(8)
Values: first(1),second(2),third(3),fourth(4),last(5),
secondLast(6),thirdLast(7),fourthLast(8),specificDayOfMonth(9)
+-- READ/WRI EnumVal dstEndDayOfWeek(9)
Values:
sunday(1),monday(2),tuesday(3),wednesday(4),thursday(5),
friday(6),saturday(7)
+-- READ/WRI INTEGER dstEndDayOfMonth(10) Range: 1..31
+-- READ/WRI INTEGER dstEndSecondsToTransition(11) Range: 0..2147483647
+-- READ/WRI INTEGER dstSecondsToAdjust(12) Range: 0..21600
+--profilesPMPP(3)
|
+-- READONLY INTEGER maxGroupAddresses(1) Range: 1..255
|
+--hdlcGroupAddressTable(2)
|
+--hdlcGroupAddressEntry(1) Index: hdlcGroupAddressIndex
| Index(1) Range: 1..255
+-- READ/WRI INTEGER hdlcGroupAddress(2)
+-- READ/WRI INTEGER hdlcGroupAddressNumber(3) Range: 0..62

+--phase(1)
|
+-- READONLY INTEGER maxPhases(1) Range: 2..255
|
+--phaseTable(2)
| |
| +--phaseEntry(1) Index: phaseNumber
| |
| +-- READONLY INTEGER phaseNumber(1) Range: 1..255
| +-- READ/WRI INTEGER phaseWalk(2) Range: 0..255
| +-- READ/WRI INTEGER phasePedestrianClear(3) Range: 0..255
| +-- READ/WRI INTEGER phaseMinimumGreen(4) Range: 0..255
| +-- READ/WRI INTEGER phasePassage(5) Range: 0..255
| +-- READ/WRI INTEGER phaseMaximum1(6) Range: 0..255
| +-- READ/WRI INTEGER phaseMaximum2(7) Range: 0..255
| +-- READ/WRI INTEGER phaseYellowChange(8) Range: 0..255
| +-- READ/WRI INTEGER phaseRedClear(9) Range: 0..255
| +-- READ/WRI INTEGER phaseRedRevert(10) Range: 0..255
| +-- READ/WRI INTEGER phaseAddedInitial(11) Range: 0..255
| +-- READ/WRI INTEGER phaseMaximumInitial(12) Range: 0..255
| +-- READ/WRI INTEGER phaseTimeBeforeReduction(13) Range: 0..255
| +-- READ/WRI INTEGER phaseCarsBeforeReduction(14) Range: 0..255
| +-- READ/WRI INTEGER phaseTimeToReduce(15) Range: 0..255
| +-- READ/WRI INTEGER phaseReduceBy(16) Range: 0..255
| +-- READ/WRI INTEGER phaseMinimumGap(17) Range: 0..255
| +-- READ/WRI INTEGER phaseDynamicMaxLimit(18) Range: 0..255
| +-- READ/WRI INTEGER phaseDynamicMaxStep(19) Range: 0..255
| +-- READ/WRI EnumVal phaseStartup(20)
Values: other(1),phaseNotOn(2),greenWalk(3),greenNoWalk(4),
yellowChange(5),redClear(6)
| +-- READ/WRI INTEGER phaseOptions(21) Range: 0..65535
| +-- READ/WRI INTEGER phaseRing(22) Range: 0..255
| +-- READ/WRI String phaseConcurrency(23)
|
+-- READONLY INTEGER maxPhaseGroups(3) Range: 1..255
|
+--phaseStatusGroupTable(4)
| |
| +--phaseStatusGroupEntry(1) Index: phaseStatusGroupNumber

16
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

| |
| +-- READONLY INTEGER phaseStatusGroupNumber(1) Range: 1..255
| +-- READONLY INTEGER phaseStatusGroupReds(2) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupYellows(3) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupGreens(4) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupDontWalks(5) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupPedClears(6) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupWalks(7) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupVehCalls(8) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupPedCalls(9) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupPhaseOns(10) Range: 0..255
| +-- READONLY INTEGER phaseStatusGroupPhaseNexts(11) Range: 0..255
|
+--phaseControlGroupTable(5)
|
+--phaseControlGroupEntry(1) Index: phaseControlGroupNumber
|
+-- READONLY INTEGER phaseControlGroupNumber(1) Range: 1..255
+-- READ/WRI INTEGER phaseControlGroupPhaseOmit(2) Range: 0..255
+-- READ/WRI INTEGER phaseControlGroupPedOmit(3) Range: 0..255
+-- READ/WRI INTEGER phaseControlGroupHold(4) Range: 0..255
+-- READ/WRI INTEGER phaseControlGroupForceOff(5) Range: 0..255
+-- READ/WRI INTEGER phaseControlGroupVehCall(6) Range: 0..255
+-- READ/WRI INTEGER phaseControlGroupPedCall(7) Range: 0..255
+--detector(2)
|
+-- READONLY INTEGER maxVehicleDetectors(1) Range: 1..255
|
+--vehicleDetectorTable(2)
| |
| +--vehicleDetectorEntry(1) Index: vehicleDetectorNumber
| |
| +-- READONLY INTEGER vehicleDetectorNumber(1) Range: 1..255
| +-- READ/WRI INTEGER vehicleDetectorOptions(2) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorCallPhase(4) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorSwitchPhase(5) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorDelay(6) Range: 0..65535
| +-- READ/WRI INTEGER vehicleDetectorExtend(7) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorQueueLimit(8) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorNoActivity(9) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorMaxPresence(10) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorErraticCounts(11) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorFailTime(12) Range: 0..255
| +-- READONLY INTEGER vehicleDetectorAlarms(13) Range: 0..255
| +-- READONLY INTEGER vehicleDetectorReportedAlarms(14) Range: 0..255
| +-- READ/WRI INTEGER vehicleDetectorReset(15) Range: 0..1
|
+-- READONLY INTEGER maxVehicleDetectorStatusGroups(3) Range: 1..255
|
+--vehicleDetectorStatusGroupTable(4)
| |
| +--vehicleDetectorStatusGroupEntry(1) Index: vehicleDetectorStatusGroupNumber
| |
| +-- READONLY INTEGER vehicleDetectorStatusGroupNumber(1) Range: 1..255
| +-- READONLY INTEGER vehicleDetectorStatusGroupActive(2) Range: 0..255
| +-- READONLY INTEGER vehicleDetectorStatusGroupAlarms(3) Range: 0..255
|
+--volumeOccupancyReport(5)
| |
| +-- READONLY INTEGER volumeOccupancySequence(1) Range: 0..255
| +-- READ/WRI INTEGER volumeOccupancyPeriod(2) Range: 0..255
| +-- READONLY INTEGER activeVolumeOccupancyDetectors(3) Range: 0..255
| |
| +--volumeOccupancyTable(4)
| |
| +--volumeOccupancyEntry(1) Index: vehicleDetectorNumber
| |
| +-- READONLY INTEGER detectorVolume(1) Range: 0..255
| +-- READONLY INTEGER detectorOccupancy(2) Range: 0..255
|
+-- READONLY INTEGER maxPedestrianDetectors(6) Range: 1..255
|

17
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

+--pedestrianDetectorTable(7)
|
+--pedestrianDetectorEntry(1) Index: pedestrianDetectorNumber
|
+-- READONLY INTEGER pedestrianDetectorNumber(1) Range: 1..255
+-- READ/WRI INTEGER pedestrianDetectorCallPhase(2) Range: 0..255
+-- READ/WRI INTEGER pedestrianDetectorNoActivity(3) Range: 0..255
+-- READ/WRI INTEGER pedestrianDetectorMaxPresence(4) Range: 0..255
+-- READ/WRI INTEGER pedestrianDetectorErraticCounts(5) Range: 0..255
+-- READONLY INTEGER pedestrianDetectorAlarms(6) Range: 0..255
+--unit(3)
|
+-- READ/WRI INTEGER unitStartUpFlash(1) Range: 0..255
+-- READ/WRI EnumVal unitAutoPedestrianClear(2)
Values: disable(1),enable(2)
+-- READ/WRI INTEGER unitBackupTime(3) Range: 0..65535
+-- READ/WRI INTEGER unitRedRevert(4) Range: 0..255
+-- READONLY EnumVal unitControlStatus(5)
Values: other(1),systemControl(2),systemStandby(3),backupMode(4),
manual(5),timebase(6),interconnect(7),interconnectBackup(8)
+-- READONLY EnumVal unitFlashStatus(6)
Values: other(1),notFlash(2),automatic(3),localManual(4),
faultMonitor(5),mmu(6),startup(7),preempt(8)
+-- READONLY INTEGER unitAlarmStatus2(7) Range: 0..255
+-- READONLY INTEGER unitAlarmStatus1(8) Range: 0..255
+-- READONLY INTEGER shortAlarmStatus(9) Range: 0..255
+-- READ/WRI INTEGER unitControl(10) Range: 0..255
+-- READONLY INTEGER maxAlarmGroups(11) Range: 1..255
|
+--alarmGroupTable(12)
| |
| +--alarmGroupEntry(1) Index: alarmGroupNumber
| |
| +-- READONLY INTEGER alarmGroupNumber(1) Range: 1..255
| +-- READONLY INTEGER alarmGroupState(2) Range: 0..255
|
+-- READONLY INTEGER maxSpecialFunctionOutputs(13) Range: 1..255
|
+--specialFunctionOutputTable(14)
|
+--specialFunctionOutputEntry(1) Index: specialFunctionOutputNumber
|
+-- READONLY INTEGER specialFunctionOutputNumber(1) Range: 1..255
+-- READ/WRI INTEGER specialFunctionOutputControl(3) Range: 0..1
+-- READONLY INTEGER specialFunctionOutputStatus(4) Range: 0..1
+-- READONLY INTEGER unitAlarmStatus2(7) Range: 0..255
+--coord(4)
|
+-- READ/WRI INTEGER coordOperationalMode(1) Range: 0..255
+-- READ/WRI EnumVal coordCorrectionMode(2)
Values: other(1),dwell(2),shortway(3),addOnly(4)
+-- READ/WRI EnumVal coordMaximumMode(3)
Values: other(1),maximum1(2),maximum2(3),maxInhibit(4)
+-- READ/WRI EnumVal coordForceMode(4)
Values: other(1),floating(2),fixed(3)
+-- READONLY INTEGER maxPatterns(5) Range: 1..253
+-- READONLY EnumVal patternTableType(6)
Values: other(1),patterns(2),offset3(3),offset5(4)
|
+--patternTable(7)
| |
| +--patternEntry(1) Index: patternNumber
| |
| +-- READONLY INTEGER patternNumber(1) Range: 1..253
| +-- READ/WRI INTEGER patternCycleTime(2) Range: 0..255
| +-- READ/WRI INTEGER patternOffsetTime(3) Range: 0..255
| +-- READONLY INTEGER patternSplitNumber(4) Range: 1..255
| +-- READ/WRI INTEGER patternSequenceNumber(5) Range: 1..255
|
+-- READONLY INTEGER maxSplits(8) Range: 1..255
|
+--splitTable(9)

18
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

| |
| +--splitEntry(1) Index: splitNumber,splitPhase
| |
| +-- READONLY INTEGER splitNumber(1) Range: 1..255
| +-- READONLY INTEGER splitPhase(2) Range: 1..255
| +-- READ/WRI INTEGER splitTime(3) Range: 0..255
| +-- READ/WRI EnumVal splitMode(4)
Values: other(1),none(2),minimumVehicleRecall(3),maximumVehicleRecall(4),
pedestrianRecall(5),maximumVehicleAndPedestrianRecall(6),phaseOmitted(7)
| +-- READ/WRI INTEGER splitCoordPhase(5) Range: 0..1
|
+-- READONLY INTEGER coordPatternStatus(10) Range: 0..255
+-- READONLY EnumVal localFreeStatus(11)
Values: other(1),notFree(2),commandFree(3),transitionFree(4),inputFree(5),
coordFree(6),badPlan(7),badCycleTime(8),splitOverrun(9),invalidOffset(10),
failed(11)
+-- READONLY INTEGER coordCycleStatus(12) Range: 0..510
+-- READONLY INTEGER coordSyncStatus(13) Range: 0..510
+-- READ/WRI INTEGER systemPatternControl(14) Range: 0..255
+-- READ/WRI INTEGER systemSyncControl(15) Range: 0..255
+--timebaseAsc(5)
|
+-- READ/WRI INTEGER timebaseAscPatternSync(1) Range: 0..65535
+-- READONLY INTEGER maxTimebaseAscActions(2) Range: 1..255
|
+--timebaseAscActionTable(3)
| |
| +--timebaseAscActionEntry(1) Index: timebaseAscActionNumber
| |
| +-- READONLY INTEGER timebaseAscActionNumber(1) Range: 1..255
| +-- READ/WRI INTEGER timebaseAscPattern(2) Range: 0..255
| +-- READ/WRI INTEGER timebaseAscAuxillaryFunction(3) Range: 0..255
| +-- READ/WRI INTEGER timebaseAscSpecialFunction(4) Range: 0..255
|
+-- READONLY INTEGER timebaseAscActionStatus(4) Range: 0..255
+--preempt(6)
|
+-- READONLY INTEGER maxPreempts(1) Range: 1..255
|
+--preemptTable(2)
| |
| +--preemptEntry(1) Index: preemptNumber
| |
| +-- READONLY INTEGER preemptNumber(1) Range: 1..255
| +-- READ/WRI INTEGER preemptControl(2) Range: 0..255
| +-- READ/WRI INTEGER preemptLink(3) Range: 0..255
| +-- READ/WRI INTEGER preemptDelay(4) Range: 0..65535
| +-- READ/WRI INTEGER preemptMinimumDuration(5) Range: 0..65535
| +-- READ/WRI INTEGER preemptMinimumGreen(6) Range: 0..255
| +-- READ/WRI INTEGER preemptMinimumWalk(7) Range: 0..255
| +-- READ/WRI INTEGER preemptEnterPedClear(8) Range: 0..255
| +-- READ/WRI INTEGER preemptTrackGreen(9) Range: 0..255
| +-- READ/WRI INTEGER preemptDwellGreen(10) Range: 0..255
| +-- READ/WRI INTEGER preemptMaximumPresence(11) Range: 0..65535
| +-- READ/WRI String preemptTrackPhase(12)
| +-- READ/WRI String preemptDwellPhase(13)
| +-- READ/WRI String preemptDwellPed(14)
| +-- READ/WRI String preemptExitPhase(15)
| +-- READONLY EnumVal preemptState(16)
Values: other(1),notActive(2),notActiveWithCall(3),entryStarted(4),
trackService(5),dwell(6),linkActive(7),exitStarted(8),maxPresence(9)
| +-- READ/WRI String preemptTrackOverlap(17)
| +-- READ/WRI String preemptDwellOverlap(18)
| +-- READ/WRI String preemptCyclingPhase(19)
| +-- READ/WRI String preemptCyclingPed(20)
| +-- READ/WRI String preemptCyclingOverlap(21)
| +-- READ/WRI INTEGER preemptEnterYellowChange(22) Range: 0..255
| +-- READ/WRI INTEGER preemptEnterRedClear(23) Range: 0..255
| +-- READ/WRI INTEGER preemptTrackYellowChange(24) Range: 0..255
| +-- READ/WRI INTEGER preemptTrackRedClear(25) Range: 0..255
|
+--preemptControlTable(3)

19
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

|
+--preemptControlEntry(1) Index: preemptControlNumber
|
+-- READONLY INTEGER preemptControlNumber(1) Range: 1..255
+-- READ/WRI INTEGER preemptControlState(2) Range: 0..1
+--ring(7)
|
+-- READONLY INTEGER maxRings(1) Range: 1..255
+-- READONLY INTEGER maxSequences(2) Range: 1..255
|
+--sequenceTable(3)
| |
| +--sequenceEntry(1) Index: sequenceNumber,sequenceRingNumber
| |
| +-- READONLY INTEGER sequenceNumber(1) Range: 1..255
| +-- READONLY INTEGER sequenceRingNumber(2) Range: 1..255
| +-- READ/WRI String sequenceData(3)
|
+-- READONLY INTEGER maxRingControlGroups(4) Range: 1..255
|
+--ringControlGroupTable(5)
| |
| +--ringControlGroupEntry(1) Index: ringControlGroupNumber
| |
| +-- READONLY INTEGER ringControlGroupNumber(1) Range: 1..255
| +-- READ/WRI INTEGER ringControlGroupStopTime(2) Range: 0..255
| +-- READ/WRI INTEGER ringControlGroupForceOff(3) Range: 0..255
| +-- READ/WRI INTEGER ringControlGroupMax2(4) Range: 0..255
| +-- READ/WRI INTEGER ringControlGroupMaxInhibit(5) Range: 0..255
| +-- READ/WRI INTEGER ringControlGroupPedRecycle(6) Range: 0..255
| +-- READ/WRI INTEGER ringControlGroupRedRest(7) Range: 0..255
| +-- READ/WRI INTEGER ringControlGroupOmitRedClear(8) Range: 0..255
|
+--ringStatusTable(6)
|
+--ringStatusEntry(1) Index: sequenceRingNumber
|
+-- READONLY INTEGER ringStatus(1) Range: 0..255
+--channel(8)
|
+-- READONLY INTEGER maxChannels(1) Range: 1..255
|
+--channelTable(2)
| |
| +--channelEntry(1) Index: channelNumber
| |
| +-- READONLY INTEGER channelNumber(1) Range: 1..255
| +-- READ/WRI INTEGER channelControlSource(2) Range: 0..255
| +-- READ/WRI EnumVal channelControlType(3)
Values: other(1),phaseVehicle(2),phasePedestrian(3),overlap(4)
| +-- READ/WRI INTEGER channelFlash(4) Range: 0..255
| +-- READ/WRI INTEGER channelDim(5) Range: 0..255
|
+-- READONLY INTEGER maxChannelStatusGroups(3) Range: 1..255
|
+--channelStatusGroupTable(4)
|
+--channelStatusGroupEntry(1) Index: channelStatusGroupNumber
|
+-- READONLY INTEGER channelStatusGroupNumber(1) Range: 1..255
+-- READONLY INTEGER channelStatusGroupReds(2) Range: 0..255
+-- READONLY INTEGER channelStatusGroupYellows(3) Range: 0..255
+-- READONLY INTEGER channelStatusGroupGreens(4) Range: 0..255
+--overlap(9)
|
+-- READONLY INTEGER maxOverlaps(1) Range: 1..255
|
+--overlapTable(2)
| |
| +--overlapEntry(1) Index: overlapNumber
| |
| +-- READONLY INTEGER overlapNumber(1) Range: 1..255

20
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

| +-- READONLY EnumVal overlapType(2)


Values: other(1),normal(2),minusGreenYellow(3)
| +-- READ/WRI String overlapIncludedPhases(3)
| +-- READ/WRI String overlapModifierPhases(4)
| +-- READ/WRI INTEGER overlapTrailGreen(5) Range: 0..255
| +-- READ/WRI INTEGER overlapTrailYellow(6) Range: 0..255
| +-- READ/WRI INTEGER overlapTrailRed(7) Range: 0..255
|
+-- READONLY INTEGER maxOverlapStatusGroups(3) Range: 1..255
|
+--overlapStatusGroupTable(4)
|
+--overlapStatusGroupEntry(1) Index: overlapStatusGroupNumber
|
+-- READONLY INTEGER overlapStatusGroupNumber(1) Range: 1..255
+-- READONLY INTEGER overlapStatusGroupReds(2) Range: 0..255
+-- READONLY INTEGER overlapStatusGroupYellows(3) Range: 0..255
+-- READONLY INTEGER overlapStatusGroupGreens(4) Range: 0..255
+--ts2port1(10)
|
+-- READONLY INTEGER maxPort1Addresses(1) Range: 1..255
|
+--port1Table(2)
|
+--port1Entry(1) Index: port1Number
|
+-- READONLY INTEGER port1Number(1) Range: 1..255
+-- READ/WRI INTEGER port1DevicePresent(2) Range: 0..1
+-- READ/WRI INTEGER port1Frame40Enable(3) Range: 0..1
+-- READONLY EnumVal port1Status(4)
Values: other(1),online(2),responseFault(3)
+-- READONLY INTEGER port1FaultFrame(5) Range: 0..255

21
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Task 2
Task 2 is to define an NTCIP (1201 and 1202) interface that is decoupled from SCOPE. It is to be a
stand alone library that is capable of inclusion in any vendor's product. C, C++, and Ada (83, 95, and
2005) interfaces to the library should be developed. Testing should be performed using SCOPE on the
agent (server) side and SCOPE's Java GUI on the client (manager) side.

Steps / Results

Step 1: Design and Implement the ATI NTCIP Access Program.


Results:

Please see Appendix A for the upper level design.

The NTCIP 1201 and 1202 mibs were processed by the snmp mib2c program. This resulted in the
following files:

24 -rw-rw-r--. 1 ATI ATI 22423 2012-11-21 11:02 unit.c


8 -rw-rw-r--. 1 ATI ATI 7581 2012-11-21 11:02 ts2port1.c
12 -rw-rw-r--. 1 ATI ATI 10328 2012-11-21 11:02 timebaseAsc.c
16 -rw-rw-r--. 1 ATI ATI 15347 2012-11-21 11:02 ring.c
8 -rw-rw-r--. 1 ATI ATI 7662 2012-11-21 11:02 profilesPMPP.c
16 -rw-rw-r--. 1 ATI ATI 12979 2012-11-21 11:02 preempt.c
12 -rw-rw-r--. 1 ATI ATI 11975 2012-11-21 11:02 overlap.c
12 -rw-rw-r--. 1 ATI ATI 10789 2012-11-21 11:02 globalTimeManagement.c
4 -rw-rw-r--. 1 ATI ATI 3704 2012-11-21 11:02 globalModuleTable.c
8 -rw-rw-r--. 1 ATI ATI 6320 2012-11-21 11:02 globalDBManagement.c
4 -rw-rw-r--. 1 ATI ATI 3710 2012-11-21 11:02 globalConfiguration.c
40 -rw-rw-r--. 1 ATI ATI 38123 2012-11-21 11:02 global.c
28 -rw-rw-r--. 1 ATI ATI 25194 2012-11-21 11:02 detector.c
24 -rw-rw-r--. 1 ATI ATI 23292 2012-11-21 11:02 coord.c
12 -rw-rw-r--. 1 ATI ATI 11721 2012-11-21 11:02 channel.c
4 -rw-rw-r--. 1 ATI ATI 1194 2012-12-04 12:02 ntcip_utils.c
16 -rw-rw-r--. 1 ATI ATI 15518 2012-12-05 13:03 phase.c

22
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Step 2: Turn the Program into Library Routines.


Results:

At this point, each file was just a skeleton without implementation code. These skeletons were modified
to contain persistent storage for each table (i.e. object) declared in each file. ATI developed an NTCIP
library (ntcip_lib.c) that uses sockets and spawned threads to provide both direct interfaces to these
objects. Next, each file was compiled into a stand alone shared library. This process is shown in the
design diagram's blue cloud found at the end of this section.

Step 3: C/C++ and Ada wrappers


Add C/C++ and Ada wrappers to allow the application to access the library routine.

Results:

Next, Ada and C/C++ access wrapper programs were developed. NTCIP.adb contains methods and data
structures allowing a program to receive modified NTCIP data from a central management system and
pass it along to a user's application (in the diagram, this is represented by our test program,
test_ntcip_agent.adb). Interface.c contains methods and data structures that permit a user's application
(again, our test program here) to send modified NTCIP data to a Central Management Station. This is
shown at the bottom of the diagram below the “blue cloud”.

The NTCIP shared libraries are installed on the target computer. We first installed them on our host
development system for initial testing and then later we cross compiled and installed them on our
prototype controller for engineering testing. We attempted to install them on our PEEK ATC-1000
controller but ran into the problem that the PEEK controller DOES NOT HAVE SNMP. We contacted
PEEK who replied that they implemented NTCIP directly into their own controller software instead of
using the standard snmp daemon. We tried to build and install SNMP for the PEEK ATC-1000 but the
PEEK uses an old version of uClibc that has bugs in it. These bugs are exposed when running the snmp
daemon. PEEK acknowledged the problem but will not fix it because updating uClibc would change
their whole infrastructure.

The SNMP daemon process uses the snmpd configuration file to determine where to find these libraries.
We made the necessary modifications to the snmpd configuration file to allow the dynamic launching of
each of our ATI NTCIP shared objects.

We simulated a Central Management system by writing the program Test_NTCIP_Manager. This uses
the same interface libraries (ntcip.adb and interface.c) that the agent or server side uses.

Finally, we ran, on the host, a complete test of every single NTCIP 1201 and 1202 objects. The objects
that were read only were not written to (writing to a read only object will cause the SNMP daemon to
output an error message. The NTCIP objects that are read-write were read, modified, and then read
again. The test programs we developed automated the whole testing process. The output from these
tests is quite large (316 pages) because each field of every object was tested. Please see
https://sites.google.com/site/atiscope/ntcip/engineering-test-results for the results. Also see
https://sites.google.com/site/atiscope/ntcip/engineer-test-video to watch the tests being run.

23
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Steps 4 and 5: Modify SCOPE and Java GUI to use the new NTCIP Library.
Results:

SCOPE was modified in the following manner:

1) We added conditional compilation flags to SCOPE's Makefiles and source code to allow
compiling SCOPE with or without the new NTCIP libraries.

2) We added close to 2000 new lines of code to SCOPE. The bulk of this, over 1800 lines,
was a new package called nticp_interface that makes direct use of the new NTCIP interface
libraries we developed.

3) Every time SCOPE modifies a variable that has an equivalent NTCIP object, SCOPE uses
the new interface to modify that object to the same value.

4) Every time a Central Management System modifies an NTCIP object used in SCOPE, the
new ATI NTCIP libraries send that data to the SCOPE program and SCOPE modifies its own
data to reflect the change. If the data is part of SCOPE's external interface, the data is sent to
that interface.

Steps 6: Engineering Tests.


Perform Engineering Tests using the new NTCIP library.

Results:

ATI's NTCIP 1201 and 1202 libraries were integrated with SCOPE in an Intelligent
Transportation System (ITS) roadside cabinet. SCOPE's prototype hardware was used for this
integration. Net-SNMP was cross compiled for the prototype hardware using gcc/g++
PowerPC Linux target cross compilers built by ATI. SCOPE was modified to link in the NTCIP
libraries and use the methods provided to receive and send NTCIP data.

We simulated a Central Management Station sending and receiving NTCIP commands. The
video at https://sites.google.com/site/atiscope/ntcip/ntcip-scope-its-cabinet shows the setting of
the NTCIP 1202 red clear parameter. The original value was 3 seconds. We modified it to 6
seconds using an NTCIP command. The new red clear time shows up instantly in SCOPE
(visible in the SCOPE's GUI). The load switches in the cabinet have indicators (A,B,C) that
reflect the state of the light connected to them. The video shows the transition from a phase's
red state termination to the next phase's green start changes from 3 to 6 seconds.

Our video shows SCOPE being controlled by its Java GUI. SCOPE/with NTCIP also works
with the wireless Android tablet GUI. The video also shows SCOPE controlling an ITS
cabinet. There is no difference between SCOPE controlling an ITS cabinet or a NEMA TS-2
cabinet. There is a check-box in SCOPE's control GUI that selects the output - ITS, NEMA-
TS2, or none (for PC testing). SCOPE is easily modified to output any traffic control protocol.

24
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Task 3
Task 3 is to test SCOPE with the NTCIP interface at a live intersection. ATI will attempt to perform this
test using an NTCIP compliant Central Management System. If this is not feasible, then ATI will
perform the live intersection tests using its new NTCIP Java GUI and SCOPE.

Steps / Results

Step 1: Obtain Dedicated Access to an Intersection.


Work with UCF to obtain dedicated access to an on campus intersection. If UCF access is not possible,
work with Houston Transtar to obtain access to an intersection in Harris County. If Transtar access is
not possible, contact Turner-Fairbanks to obtain access to a test intersection.

Results:

We held meetings with Dr. Essam Radwan of University of Central Florida. Dr. Radwan has an
M.S.C.E and PhD in Transportation Engineering from Purdue University. He is a professor and
Executive Director of the Center for Advanced Transportation Systems Simulation at UCF. We
contacted Major David Zambri of the UCF Police department to obtain access to a campus intersection.
Lastly, we contacted Hazem El-Assar, Chief Engineer of Orange County Traffic Engineering to obtain
approval for the testing.

U.C.F. did not have a pure NEMA-TS2 Type 1 (SDLC) intersection. Most of the intersections at U.C.F.
and throughout the Orange County, Florida area in general are of a hybrid analog/digital nature (they use
NEMA-TS2 Type 2).

Hazem El-Assar was able to locate a pure NEMA-TS2 Type 1 intersection in Orlando. The crossroads
are West Oak Ridge and Harcourt.

Step 2: Test SCOPE at the “Live” Intersection.


Depending upon location, test SCOPE's NTCIP interface in either its NEMA-TS2 mode (UCF, Turner
Fairbanks) or in an ITS mode (Transtar). This will also depend on availability of a central management
system. If not available, use SCOPE's new NTCIP Java GUI.

Results:

Unfortunately, a central management station was not available at UCF. However, we tested SCOPE live
at our Orlando intersection with the help of an Orange County technician. The intersection contained an
Eagle ATC controller that we replaced with our PEEK ATC-1000 running SCOPE. We entered the same
intersection parameters into SCOPE that was currently used by the Eagle controller (see Appendix B).

Test videos can be found at https://sites.google.com/site/atiscope/scope-images/field-testing

At first, the intersection did not come out of flash mode. This was because we did not have the +24v
latch set on connector A. The cabinet's MMU could not detect a controller present. In testing with our
virtual TS2 cabinet, there is no +24 pin detector. According to ATSI, the cabinet's maker:

25
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Voltage Monitoring Latch Programming

Since TVC-3500 is connected to the Controller Unit through an SDLC bus, the Virtual MMU
cannot monitor the CVM on the CU. It also does not have a 24V power supply. Thus, +24V
Latch and CVM/Fault Monitor Latch are only reflected in the Type 129 MMU Inputs/Status
response frame.

Because the virtual cabinet only connects to the SDLC port and not connector A (where the 24v latch is),
we did not implement it in SCOPE. We have modified SCOPE to now latch the correct pin on connector
A.

To continue testing, the technician bypassed the latch using a jumper.

The next problem was that although SCOPE sets traffic signals to red as a default, it did not put the
Pedestrian signals into red (at default). This caused the MMU to fault and put the intersection into flash.

To continue testing, the technician pulled the pedestrian load switches out of the backplane.

Issue three was the mapping of channels to phases. SCOPE has an internal mapping capability that is
not exposed to the user interface. In order to map channels to phases, a table must be modified inside of
SCOPE and SCOPE must be recompiled. The county technician suggested we add the capability to the
user interface to perform this mapping. Although we knew there would be problems with left turn lanes,
we tested SCOPE using the default intersection channel mapping. It worked fine until a car passed over
a left turn loop. The intersection under test does not have a 1 to 1 mapping of channels to phases like
SCOPE's default and we could not recompile and download a new version of SCOPE at the site.

To continue testing, we changed the control mode of SCOPE from using max recall on the main road
(Oak Ridge) and presence mode on the minor road (Harcourt). This allowed the cycling of intersection
lights by SCOPE.

At this point, we were able to control the intersection. However, there was a problem in that Phase 4
and Phase 8 were programmed in the MMU to be exclusive at this intersection because visibility of
vehicles passing through these phases was a safety issue. The standard NEMA-TS2 ring diagram shows
these Phases able to execute concurrently. SCOPE's internal software will have to be modified to permit
a user to assign phases as conflicting (in addition to the conflicts already defined in SCOPE for the
NTCIP ring structure).

In summary, testing at a live intersection revealed the following issues (in order of priority):

1) SCOPE needs to latch the 24v output pin so the MMU doesn't trip and recognizes a controller is
present.

2) SCOPE needs to set all pedestrian outputs to red default.

3) SCOPE must be able to map sensors to phases through the controller menus and also the GUIs.
SCOPE also needs to allow the ability to assign additional conflicting phases when a traffic engineer
needs to prevent phases from running concurrently.

26
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

4) SCOPE needs to implement an external reset. SCOPE's user interface on the controller already has a
reset command but it is not currently implemented.

5) SCOPE needs to allow manual interval advancing, process “stop time” command, and allow manual
step by step of sequencing.

These issues were added to SCOPE's Sourceforge issue tracking system.

SCOPE IN CABINET AT INTERSECTION OF OAK RIDGE AND


HARCOURT

Step 3: Measure Performance.


Measure performance of SCOPE at the “live” intersection using NTCIP.

Results:

SCOPE's NTCIP interface will run on any controller that has the ability to run SNMP. PEEK's ATC-
1000 controller DOES NOT HAVE this capability. PEEK implements NTCIP directly in their
controller software, bypassing SNMP. A case could be made that the PEEK controller does not conform
to the NTCIP specification as shown below:

27
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

The NTCP specification clearly shows the use of SNMP as the application layer interface. As stated
above, the PEEK ATC-1000 controller does not support SNMP.

ATI attempted to install SNMP on the PEEK controller without success. This is because the PEEK
controller uses an outdated version of the uClibc that contains errors. These errors are not exposed in
PEEK's own software because they do not use the specific uClibc functions that contain them. These are
known issues in uClibc that have been corrected in later releases. PEEK has chosen not to use a more
recent version of uClibc because it would mean rebuilding their entire infrastructure.

Therefore, ATI tested the NTCIP interface in an Intelligent Transportation Systems cabinet supplied by
Houston TRANSTAR. As mentioned in Task 2, the test videos can be found on the SCOPE website.
These videos show control of an intersection using SCOPE's NTCIP interface.

28
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Conclusions and Future Development

Conclusions

The Phase IIB software development of SCOPE's NTCIP interface added the ability for a Central
Management Station (CMS) to issue NTCIP 1201 and 1202 commands to SCOPE. In addition, SCOPE
now reports its status via the NTCIP interface. The NTCIP interface can easily be turned on and off via
SCOPE's user interfaces and also execution command lines in SCOPE's start-up scripts.

SCOPE has now been tested at a live intersection with traffic. Testing SCOPE in a traffic cabinet in
Orlando proved that SCOPE's software has the ability to control a live intersection.

We are planning on continuing testing at the Orange County Traffic test facility. This facility has 3
different types of NEMA TS2 cabinets hooked up to 4 traffic lights. These cabinets are complete and
have MMUs. Thanks to cooperation of the Orange Country Traffic Engineering department, we will be
able to test our new 24 volt monitor logic and also our pedestrian red presets. Borrowing the test facility
will eliminate the need to take over a running intersection. It will also allow us to implement and test
quick fixes to any issues that occur.

Interested parties can keep informed at our Google site -

https://sites.google.com/site/atiscope/

This site contains much more information than can be included in this report.

Future Development and Necessary Enhancements

ATI is classified as a very small, woman owned corporation. We do not have the capital to invest in
building the production hardware. Therefore, we are actively searching for partners to join us in
building production hardware and marketing/selling SCOPE. We have contacted several companies that
specialize in turning prototype hardware into production units. In addition, we have held meetings with
venture capitalist firms. Lastly, we are also contacting Florida universities to see if they would like to
participate in bringing SCOPE to market.

All venture capital firms we have spoken to agree: Without production hardware SCOPE will not
be marketable.

29
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Appendix A: Upper Level Design


Computer A Computer B Once a frame (100ms) the application (SCOPE)
should store all its modified data by calling the
interface routines. OR, it could do it every time it
modifies data during processing.
Config
File Once a frame the application should call the
interface to retrieve any data set by the manager.
This data is buffered internally in NTCIP.adb.
SNMP
sets/gets snmpd
interface.c of data daemon
process

sets/
gets
NTCIP.adb

dlmod global /home/ATI/SCOPE/CODE/NTCIP/C_CODE/libring.so


dlmod phase /home/ATI/SCOPE/CODE/NTCIP/C_CODE/libphase.so
dlmod preempt /home/ATI/SCOPE/CODE/NTCIP/C_CODE/libpreempt.so
dlmod global /home/ATI/SCOPE/CODE/NTCIP/C_CODE/libglobal.so
etc.
dlmod phase /home/ATI/SCOPE/CODE/NTCIP/C_CODE/libphase.so
Test_NTCIP_
Manager.adb etc.
phase.c
dlmod preempt /home/ATI/SCOPE/CODE/NTCIP/C_CODE/libpreempt.so
ring.c preempt.c ETC
each object is phaseTable
each object is
implemented the same as PhaseStatuslGroupTable implemented the same as
SNMP the phase object
PhaseControlGroupTable the phase object
Manager Tester
(client) Data is passed using
phase.c
sockets and threads. 1
thread per table type
These c files are auto-
generated from the MIBs
then completed with our
ntcip_lib.c own code and build into
the dynamic libraries

Data is passed using


sockets and threads. Data sent from
Data sent from
manager application

NTCIP.adb Interface.c

Buffers data sent


Read (get) manager
from Manager Store (set)
data. Must call
interface every 100 application data
ms or greater
SNMP Test_NTCIP_
Agent Tester Agent.adb
(server) (USER APP)

30
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Appendix B: Live Intersection Testing

Timing Parameters

31
Signal State Transition Software NTCIP Interface / Live Testing SBIR 06-FH1 Phase II B Final Report
Feb 10, 2013 Advanced Technologies, Incorporated

Additional Photos of Field Testing

Examining the Cabinet before Removing the Controller The Intersection - Harcourt and Oak Ridge, Orlando

SCOPE Controlling the Intersection - Max Recall

SCOPE Controller Replaces Eagle Controller Cabinet Before Switching Controllers

Additional photos can be found on the SCOPE Google site.

32

You might also like