Net2 Alive and Well Check

For Unity and PCW4.2X Systems

Introduction:

The following task has been created to alarm operators when there is trouble with a Net 2 node. This task runs with a modified version of "net32a.dev". You must have the latest version of "net32a.dev" to allow this function to be performed.

To see if you have the Node Status version of "net32a.dev" from the /Impact/cmds directory, type net32a.dev -h It should respond with -i option.

Installation:

If you do not have the Node Status version of "net32a.dev," you must install it. You must also have the following program "AliveWell". It must reside in the /Impact/cmds directory. If you are upgrading the net32a.dev, you must shutdown and power reset your computer with the -i flag. Do this by editing "install.sh" file and adding a -i after the net32a.dev command.

Before you begin, it is much easier to determine the number of Net 2 nodes and the corresponding Net 2 node numbers.

Example:

3 Nodes.

01 Reel Scanner

73 Link

0b Size Press Scanner

Where 01, 73, and 0b are the hardware jumpers on the Net 2 PCB for each net 2 node.

If you do not have these numbers, AliveWell can figure it out for you. Configure 3 tags which correspond to the network node numbers.

Create 3, Internal Digital tags, with the names:

net2node1

net2node73

net3nodeb

During the creation, ensure you set the alarm state to alarm at a state of 1.

Next, configure the file called "AliveWell.cfg" simply :

Type AliveWell -c

This places the AliveWell program into the configuration mode.

You can see an entire listing of 0 - 7F nodes, hit the PGUP or PGDN key to view all the Net 2 nodes. Note the node numbers which are displayed in INVERSE. If you have not recorded and built tags, now would be a good time to do so.

Example:

If the complete net 2 is up, all nodes running, note the number which are displayed in INVERSE. Say, 01, 73, and 0b are in INVERSE. Switch to another user's tty, login in or

go back to the main Bailey menu and configure the following Internal Digital tags.

net2node1

net2node73

net2nodeb

Ensuring the alarm is set high and the alarm group number is appropriate.

Back at the AliveWell -c program, enter F3, this builds the "AliveWell.cfg" file for all working Net 2 nodes. Also, this function will take you into the QNX editor. Modify, if necessary, the tag names if you choose something other than net2nodeX etc.. Let's say you decided to use the Internal Digital tag called ReelScannerNet2 then edit the appropriate field to replace say net2node1 to ReelScannerNet2. Complete the action by writing the file, grey + w then grey +q.

This returns you back to AliveWell Configuration frame. Use the PGUP and PGDN to display all the nodes on the system. If all tags are installed correctly, hit F10 to quit.

Now edit the "install.sh" one more time and place a "AliveWell &" on one of the lines. You may now do a shutd and power reset your system.

Testing AliveWell:

To test the AliveWell program, with all the Net 2 nodes running disconnect one Net 2 cable from one of the nodes. After 120 seconds, the appropriate net2nodeX tag should go high. Place the cable back on the Net 2 node, the tag should go low after 60 seconds.

The alarm tags you have configured can now be configured to operator alarms or external buzzers or lamps.

Notes:

Using the correct "net32a.dev" with the -i option, the AliveWell task can be run. It sends out a message to each Net 2 node; if the answer back is not within 120 seconds, AliveWell sets the appropriate tag as described in "AliveWell.cfg". The "AliveWell" program has the ability to build a template file for "AliveWell.cfg", but you must have basic knowledge of how to setup a tag and associated alarms.

You must also have basic knowledge of the QNX ed editor.

du
- Part Number DU.DOC

Syntax: du

Options: No Options

Examples: du

Description: This task, dumps the session layer's information local to Unity. Note: The user, prior to running du, must first change to the directory where net3.dev began.

Dump Session Tables

10001 FLOAT 92

11001 FLOAT 112

12001 FLOAT 112

13001 FLOAT 112

12102 FLOAT 112

12101 FLOAT 112

23000 FLOAT 23

23001 FLOAT 38

23002 FLOAT 35

23003 FLOAT 22

23004 FLOAT 34

23005 FLOAT 92

23006 FLOAT 40

23010 INT 19

23015 CHAR 138

5000 INT 20

5001 FLOAT 70

5002 INT 20

5003 FLOAT 300

5006 FLOAT 40

5020 FLOAT 222

5021 FLOAT 222

5022 FLOAT 222

5023 FLOAT 222

5024 FLOAT 222

5025 FLOAT 222

11003 FLOAT 56

11005 STRUCT 2

1003 STRUCT 2

1004 STRUCT 56

1005 INT 56

1006 INT 2

1007 CHAR 56

1008 CHAR 56

10003 FLOAT 28

0 CHAR 28

1 STRUCT 28

3 CHAR 28

4 STRUCT 2

5 INT 28

102 INT 18

12003 FLOAT 41

2002 STRUCT 2

2003 STRUCT 41

2004 INT 41

2005 INT 2

2006 FLOAT 41

2007 FLOAT 41

5004 FLOAT 320

5005 FLOAT 64

12026 FLOAT 64

12029 FLOAT 64

-3 STRUCT 256

-2 INT 256

-1 STREAM 1

-4 INT 1

------------------------------ Net 2 Node History ---------------------------

Node [07] OnLine at 05/19/1995 13:43

ON LINE 000000 Errors, Last Error At 05/19/1995 13:43

Node [06] OnLine at 05/19/1995 13:43

ON LINE 000000 Errors, Last Error At 05/19/1995 13:43

Node [51] OnLine at 05/19/1995 13:43

ON LINE 000000 Errors, Last Error At 05/19/1995 13:43

Node [71] OnLine at 05/19/1995 13:43

ON LINE 000000 Errors, Last Error At 05/19/1995 13:43

Node [73] OnLine at 05/19/1995 13:43

ON LINE 000000 Errors, Last Error At 05/19/1995 13:43

-----------------------------------------------------------------------------

FastTags
. - Part Number FASTTAGS.DOC

Syntax: FastTags [options] &

Options: -g Register global

-c Register clearhouse

-pPriority Should be 5, default

-dIndex Debug tag index, used to trap who is writing to a tag.

Examples: FastTags -g &

Description: This task provides fast interface for writing internal digital and analog tag, rather than going through the ciu_scan program.

Usage: Normally, added in /pcw/cmds/pcwtasks

COMMON

5 * 2 PR /pcw/cmds/FastTags -g

Note: This can only be used on the primary PCW node.

gdr
- Part Number GDR.DOC

Syntax: gdr [options] &

Options: a=PostTask Optional

b=PreTask Optional

P=Priority Optional

p=path Necessary

t=gradetag Necessary

Examples: gdr p=[1]3:/Impact/database P=8 t=currentgrade b=print_grade.sh a=clear_grade.sh &

Description: This function waits in a ready loop, checking the dcb of the tag called out with t=. When the dcb changes, i.e. the operator changes the grade, it looks to see if the grade is valid. Validity is check by looking into the path called out with the p= arg, if it finds a valid grade.gdr it runss the task defined by the b= arg, performs all the tag sets contained within the xxx.gdr found, then runs the task defined in the a= arg.

If a= or b= are not defined, no tasks are called.

This task is meant to run as a background task.

Impact's Grade Change Programme

Introduction:

Impact has developed and implemented a grade selection program for use with Bailey's PCW[1, OIS workstations. Program and systems operation depends on the installation of Bailey's PCW 4.2 or above work station software.

]

Concept:

The over-all concept is dependent upon a tag, which is definable, call currentgrade. A background task, gdr(Grade Data Retrieval), monitors a definable tag for a change. This change can be done from a video frame or by some other means which modifies the value of this tag. If a change in the value of currentgrade is detected, gdr looks up the appropriate grade file and implements the associated corresponding tag values.

Prior to the implementation, the user should use set up the associated grade codes for use on the their machine.

Setup Template

Contained within the 3:/Impact/database directory is a file called grade.templ. Before beginning, the user should review and modify as needed, the grade.templ file. Each user is expected to modify this file for individual application needs. Once the template is setup for the particular application, the user should begin to set up grades.

Example:

//Grade Templates

$currentgrade, PV, 0, "Enter Grade Id"

$i23004p00e0000, PV, 1, "Sensor Basis Weight Slope"

$i23004p00e0001, PV, 0, "Sensor Basis Weight Offset"

$i23004p00e0002, PV, 1, "Sensor Moisture Slope"

$i23004p00e0003, PV, 0, "Sensor Moisture Offset"

$i23004p00e0004, PV, 1, "Sensor Ash Slope"

$i23004p00e0005, PV, 0, "Sensor Ash Offset"

$i23004p00e0008, PV, 1, "Sensor Caliper Slope"

$i23004p00e0009, PV, 0, "Sensor Caliper Offset"

$s1bwtstd, PV, 85, "MIS Basis Weight Standard"

$s1bwtstd, ALARMHI,100,"MIS Basis Weight Standard Max"

$s1bwtstd, ALARMLO,70, "MIS Basis Weight Standard Min"

$s1bwttgt, PV, 85, "MIS Basis Weight Target"

$s1bwttgt, ALARMHI,100,"MIS Basis Weight Target Max"

$s1bwttgt, ALARMLO,70, "MIS Basis Weight Target Min"

$weighttarget, PV, 85, "Control Basis Weight Target"

$s1bwtave, ALARMHI,100,"Scanner 1 Last Average Max"

$s1bwtave, ALARMLO, 70,"Scanner 1 Last Average Min"

$basiswtreel, ALARMHI,100,"Controller Basis Weight Max"

$basiswtreel, ALARMLO, 80,"Controller Basis Weight Min"

$s1moistd, PV, 4.5,"MIS Moisture Standard"

$s1moistd, ALARMHI, 7.0,"MIS Moisture Standard Max"

$s1moistd, ALARMLO, 2.0,"MIS Moisture Standard Min"

$s1moitgt, PV, 4.5,"MIS Moisture Target"

$s1moitgt, ALARMHI, 7.0,"MIS Moisture Target Max"

$s1moitgt, ALARMLO, 2.0,"MIS Moisture Target Min"

$moitarget, PV, 4.5,"Control Moisture Target"

$s1ashstd, PV, 15, "MIS Ash Standard"

$s1ashstd, ALARMHI, 20, "MIS Ash Standard Max"

$s1ashstd, ALARMLO, 10, "MIS Ash Standard Min"

$s1ashtgt, PV, 15, "MIS Ash Standard"

$s1ashtgt, ALARMHI, 20, "MIS Ash Target Max"

$s1ashtgt, ALARMLO, 10, "MIS Ash Target Min"

$ashwtreel, ALARMHI, 20, "Ash Controller Max"

$ashwtreel, ALARMLO, 10, "Ash Controller Min"

$ashtarget, PV, 15, "Controller Target"

$s1calstd, PV, 110,"MIS Caliper Standard"

$s1calstd, ALARMHI, 130,"MIS Caliper Standard Max"

$s1calstd, ALARMLO, 90, "MIS Caliper Standard Min"

$s1caltgt, PV, 110,"MIS Caliper Target"

$s1caltgt, ALARMHI, 130,"MIS Caliper Target Max"

$s1caltgt, ALARMLO, 90, "MIS Caliper Target Min"

Entry Into Template:

$currentgrade, PV, 0, "Enter Grade Id"

The tag name used for the grade change must be the first entry into the grade.templ file. When gdr runs this name will be searched for.

Click here for Picture

Example Of Template Item:

$s1bwtstd, PV, 85, "MIS Basis Weight Standard"

Tagname preceded by a '$'. This must be a legal tagname configured within you pcw database.

$s1bwtstd, PV, 85, "MIS Basis Weight Standard"

The next item is the destination within the tag to write the value. Your choices are:

PV

ALARMHI

ALARMLO

SP

SPAN

ZERO

$s1bwtstd, PV, 85, "MIS Basis Weight Standard"

Default Value for the tag, starting value to begin using. This can be modified through the grade Editor package.

$s1bwtstd, PV, 85, "MIS Basis Weight Standard"

This is text to be displayed under the grade Editor package.

Note: Each Field must be comma delimited.

Setting Up Grades

From the 3:/Impact/cmds directory do as follows:

grade 3:/Impact/database/

This while use the given grade.templ contained within 3:/Impact/database

The following Editor screen should be seen.

Aug 4 1:46:23 pm

"Enter Grade Id"                   0.000000                               
"Sensor Basis Weight Slope"        1.000000                               
"Sensor Basis Weight Offset"       0.000000                               
"Sensor Moisture Slope"            1.000000                               
"Sensor Moisture Offset"           0.000000                               
"Sensor Ash Slope"                 1.000000                               
"Sensor Ash Offset"                0.000000                               
"Sensor Caliper Slope"             1.000000                               
"Sensor Caliper Offset"0.000000                                           
"MIS Basis Weight Standard"        85.000000                              
"MIS Basis Weight Standard Max"    100.000000                             
"MIS Basis Weight Standard Min"    70.000000                              
"MIS Basis Weight Target"          85.000000                              
"MIS Basis Weight Target Max"      100.000000                             
"MIS Basis Weight Target Min"      70.000000                              
"Control Basis Weight Target"      85.000000                              
"Scanner 1 Last Average Max"       100.000000                             
"Scanner 1 Last Average Min"       70.000000                              
"Controller Basis Weight Max"      100.000000                             
"Controller Basis Weight Min"      80.000000                              
"MIS Moisture Standard"            4.500000                               
"MIS Moisture Standard Max"        7.000000                               

F1 Edit F2 Save F10 End currentgrade 0.000000

The data displayed on the editor screen should correspond to the data outline within the grade.templ.

Enter the first item on the list, currentgrade. Select the grade you wish to edit; if the grade already exist, the previous values will be read into the display screen.

Select the first id, currentgrade, with a whole number. gdr only accepts whole number grades; fractional numbers are not allowed in the grade id field.

Use the PGUP, PGDWN, HOME, END, UP,DOWN,RIGHT,and LEFT from the keypad to change specific items.

After completing the changes for the specific grade code( grade code should be item 1), save the grade file using the F2 key.

Repeat this action for each grade code desired.

Later on, if additional items are added to the grade.templ file, your grades file can be edited again. Because the gdr file uses these comma delimited style grade files, items can be left out for specific grade without upsetting the grade change program. If items are removed for a XX.gdr file it simple will not be set during a grade change.

After saving a XX.gdr file, it might be a good idea to review its contents. If you saved the grade code called 1, then simple cat 3:/Impact/database/1.gdr |more

It will contain all the tags to be set when currentgrade is set to 1.

Running Actual Grade Change

Within your sys.init.x file run the following:

3:/Impact/cmds/gdr t=currentgrade p=3:/Impact/database/ &

t= the name of the tag used to trigger grade change.

p= the path for data bases; where the xx.gdr files are kept.

If you used the name currentgrade as the tag to trigger grade change, it must be setup prior to running gdr. Set this tag up as an internal tag within the pcw/database as an Internal Analog Tag.

idview
- Part Number IDVIEW.DOC

Syntax: idview [options]

Options: -IID ID from net 2

-lLEN Where LEN is the length of array

-sSTART Where START is the start of the array

-pPATH Where PATH is the Net 2 data path

-m If user needed to modify values.

Examples: idview -I23010 -l40 -p0 -s0 -m

Description: This task, allows the user to view and modify information directly to CD Net 2; without going through Bailey's tag database. Using the -m parameter allows the user to actually output information directly to an Impact actuator or controller. While in this program, press esc to quit.

Note: This function does not allow the user to modify structures contained on Net 2.

ImpactScan
,,, - Part Number IMPACTSC.DOC

Syntax: ImpactScan [options] &

Options: -u Time interval

-P Priority

Examples: ImpactScan -u10 &

Description: This program task, is designed to run in the background. It assumes the system you are running this on has attach an Impact Aplus scanner. If you system uses any other scanner than Aplus, replace this program with OtherScan.

-u specifies the number of seconds of sleep before profile updates are made.

Defines for this are keep in ois10.cfg for profile configurations.

Profile Manager Setup

ProfileManager0: \ Parameter symbol, note it is delimited by ':' you may define up to 20 profile manager slots. ProfileManager0 through ProfileManager19: There is enough room for 20 profiles.

-nameBWT1 \ Short 4 letter symbol used to help display programmer correlate the drawing from the slot.

-n2i12001 \ Net 2 id, where ImpactScan looks to find information on the net 2 device.

-path0 \ Net 2 data path. Normally, path 0 is reel scanner, path 1 is size press, etc..

-s0 \ Starting indices into the array to consider data box 1.

-c92 \ Count or length of array to display

-frm1 \ Frame number... All indices assigned to the same frame number are assumed tied. Let's say the reel scanner has 3 sensors, wt., moisture, and caliper. They are assigned ProfileManager Indices 0, 1, and 2. In theory, they should all have the same count, starting index, and path, because they come from the same actuator or scanner. Because they have been assigned the same frame number, when ImpactScan runs and finds any one of the sensors assigned to this frame in standardize, offsheet scanning, single point etc., then all sensors assigned this frame number will be set to the same mode for display purposes.

-idx0 \ This should always be set to the same number assigned to the ProfileManagerX: where 'X' should always equal -idxX. Index or profile manager slot number 0 through 19.

-ewma0.2 \ Engineering Weighted Machine Average, filter factor. Where setting to 1.0 on type for cd_scan type means no filter; .1 means very heavy average. Ranges for this number are 0.1,0.2,0.3, through 1.0 heavy to no filter.

-rev1 \ This option can be set -rev0 or -rev1. Normally, Bailey's displays are from back to front. Example: 94 to 1. So if you wish to have actual data box or zone displayed on the right side of display, set the -rev1 options. If, you wish to display the last zone or data box at the right as 1, set the -rev0 options.

-scanb10 \ Allow the operator to select 10 scans back on the same page. This keeps a history of the last 10 scans back, in the directory called /pcw/prof_data, for use by the operator at any time.

-tags1bwtprofspan \ This defines the span tag. After which, the user should define this tag somewhere on a graphic display for setting the span of individual profiles. If the value contained within the tag is 2, then the profile will span 2 above the mean and 2 below the mean of any profile.

-cd_scan A major attempt is made to try to correlate the network or net 2 id with the type of data being accessed when ImpactScan is first invoked. But, it is impossible to predetermine all Impact network arrays. Most of the common arrays like actuator power or scanner engineering units are detected. But on occasion, the user may wish to setup up an array assigned which is abnormal. Example: Tuning array for Dyna step, or target base line profiles etc. In such cases, additions can be made without extra programming. If the user wishes to display information as actuator type or if the user wishes to display the information as scanner type, he may by forcing an override by using an optional override parameter called -cd_scan or -cd_actuator to the parameter line.

Note: All references to profile manger are made for the use of the program called ImpactScan. ImpactScan is designed specifically to be used for systems with Impact's Aplus Scanning platforms. For other systems, not Aplus type scanners, the user should replace the ImpactScan program line in the install.sh with the name OtherScan. OtherScan works the same way for all arrays, except for type of engineering unit profiles coming from the scanner. ImpactScan tracks the Aplus scanner mode, display stdz, off-sheet, foward, and reverse from and Aplus scanner. If the Aplus is not determined to be on-sheet and in the forward or reverse direction, then -cd_scan profiles will not be updated. In all other cases, example Measurex scanners, no determination is made of scanner mode. By defining the program called OtherScan instead of ImpactScan, scanner engineering profiles are force displayed based on time; the scanner modes are ignored. Actuator type profile, -cd_actuator, are always displayed on a time interval regardless of OtherScan or ImpactScan.

Profile Displays

1. Introduction

This user's guide covers all aspects of the PCW Profile Display package. With this package, you can configure graphic displays corressponding with the configured profile database tags. These graphic displays are part of the VDM ".dt file" format used by all graphic displays in PCW. This means you can create profile displays that are integrated with other forms of VDM graphics.

2. Configuration

Profile Tag Database

i) Valmet Database (via TCP/IP)

ii) Francis Database (via serial link)

Graphics

Graphics are configured by means of ".dt files". It assumed that you already know the basics of ".dt files" and what they do. The following are extentions to the ".dt file" format. Profiles are configured as combination escape trends (et ....) and escape interactives (ei ...):

Code Prameters Comments

et 65, profile trend type

profile option, 32 = third ht

33 = half ht

34 = actuator (half ht)

0,

0,

1, must always be 1

0,

xmin, display offset

ymin,

0,

0,

border colour

"et" must be immediately followed by "ei" for the profile to be displayed:

ei 108,

86,

key1,key2,

profile index,

trace colour,

0,

0

2prftmp:

rm

rm *** the graphic name goes here ***

bm 0,<name>~

rm

vd MAXTAGS=180~

rm

rm *** the date text goes here ***

rm

bp 0,<date>~,0

rm

bb

rm

tc 5

ch 372

cs 20

rm

rm *** the graphic title goes here

rm

tx 0,400,7050,<title>~

rm

rm *** first profile chart ***

rm

et 65,33,0,0,1,0,400,4002,0,0,<border colour>

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm *** next profile chart ***

rm

et 65,33,0,0,1,0,400,656,0,0,4

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm

tc 2

ch 124

cs 10

rm

rm *** the first profile key control descriptor ***

rm

tx 0,450,6752,<key1 text><key2 text>~

rm

rm *** the next profile key control descriptor ***

rm

tx 0,450,3406,<key1 text><key2 text>~

rm

pe 124,CONTROL.PG~

ep

em

%%

3prftmp:

rm

rm *** the graphic name goes here ***

bm 0,<name>~

rm

vd MAXTAGS=180~

rm

rm *** the date text goes here ***

rm

bp 0,<date>~,0

rm

bb

rm

tc 5

ch 372

cs 20

rm

rm *** the graphic title goes here

rm

tx 0,400,7050,<title>~

rm

rm *** first profile chart ***

rm

et 65,33,0,0,1,0,400,4876,0,0,<border colour>

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm *** Second profile chart ***

rm

et 65,33,0,0,1,0,400,2688,0,0,4

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm *** Third profile chart ***

rm

et 65,33,0,0,1,0,400,500,0,0,4

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm

tc 2

ch 124

cs 10

rm

rm *** the first profile key control descriptor ***

rm

tx 0,450,6752,<key1 text><key2 text>~

rm

rm *** the second profile key control descriptor ***

rm

tx 0,450,3406,<key1 text><key2 text>~

rm

rm *** the third profile key control descriptor ***

rm

tx 0,450,2375,<key1 text><key2 text>~

rm

pe 124,CONTROL.PG~

ep

em

%%

intergauge
... - Part Number INTERGAU.DOC

Syntax: intergauge [options] &

Options: . see below

Examples: intergauge -d0 &

Description: This task provides the intergauge calculations necessary for doing dry wt, coat wt. etc.. It should run in the background, after the net3.dev program has been evoked.

The options are many:

Numbers Are Net2 Data Paths; Not Scanner Numbers:

------------------------------------------------

-a121 Do ash difference (Ash Path 1 - Ash Path 2), result to path 1

-c010 Do coat weight (DWT Path 0 - DWT Path 1), result to path 0

-dn Do dry weight on Path 0

-u5 Do calculations every 5 seconds, RUN Every 5 seconds

-h Help, this menu

-n Number of data boxes, 0 Default

-p7 Set priority at 7 for intergauge

Supplements Adds 2sigma + Mean Options To DWT and CWT, For Systems Without MIS:

-------------------------------------------------------------------------------<> -t Tag

-tX Where X is d = drywt, a = ash diff, c = coatwt

-tXN Where N only applies to dry wt. Path N Number, ommit field with CWT and

ASHDIFF

-tXNT Where T type, s = 2sigma, a = average or mean

-tXNTNAME Where NAME is the destination Tag Name

Examples:

--------

-td0sTAGNAME Place CD 2sigma DRYWT Path 0, to Tag Name

-td1aTAGNAME Place CD Average DRYWT Path 1, to Tag Name

-tcsTAGNAME Place CD 2sigma COATWT, to Tag Name

-tcaTAGNAME Place CD Average COATWT, to Tag Name

-tasTAGNAME Place CD 2Sigma ASH DIFF, to Tag Name

ISETUP

125022.wps

ISETUP - Impact Setup Data Server

isetup file [options] &*

-c Register with clearing house

-g Register global

-h Help

-p Priority -p5

Network Server.

file - Configuration file, generally always

ois10.cfg

isetup ois10.cfg -c -p10 &

Mounts Impact Setup Data, using a priority of 10, by default this is registered with Central Server.

isetup ois10.cfg n=0 &

Mounts Impact Setup Data, local accessible at node 0.

ISETUP can be used to install environment style setup data to work with Impact Modules. Calling this program from sys.init.0 installs the file called within the ois10.cfg field into the setup environment.

User, or Clients, can remotely access setup data identified with there own string(s).

Any file can be mounted, but the file name "ois10.cfg" should be standardized on.

GENERALIZED SETUP DATA INTERFACE -C-I

Generalized Setup Data, Task: Section B

Introduction:

The follow document, outlines the implementation of "Setup Data" within Impact's portion of the Bailey Unity System[2.

Setup data is contained resident with a configuration file, ]"ois10.cfg". From the users or Net Server's "sys.init.x" "isetup [parameter] ois10.cfg &" is called. Any user or Client, desiring setup data should have a unique string name assigned to variable within "osi10.cfg".

Example of "ois10.cfg" configuration:

ois10.Device.net2.pathsCount 1 #number of NetII paths.

ois10.Device.net2.pathA 0 #net path A

Any Client requesting strings "ois10.Device.net.xxxxx" can read this appropriate variables.

The following statements are supported from the "isetup" Server.

strings

integer

long

double

Example:

ois10.Device.net2.Device netii.dev #example of string

ois10.Device.net2.pathA 1 #example of integer

ois10.Tag1.ExceptLimit 2.5 3.5 #compound double

'#' Denotes comments fields in the "ois10.cfg" file..

Implementation:

The implementation of a Setup Data Server can be made within a Network Server and/or individual QNX network nodes.

Centralized setup data can be made using a Central Server and also individual node can have there own Setup Data Server; provided the correct calling parameters are evoked.

ISEUP - Evoke Setup Data Server

Syntax:

isetup file [options] &*

Options:

p=priority - Specify the Servers Priority

n=node - Node to register Sever Program, if omitted the Server task is registered with the Central Network Server.

file - Configuration file, generally always ois10.cfg

Example:

isetup ois10.cfg p=10 &

- Mounts Impact Setup Data, using a priority of 10, by default this is registered with Central Server.

isetup ois10.cfg n=0 &

- Mounts Impact Setup Data, local accessible at node 0.

Description:

ISETUP can be used to install environment style setup data to work with Impact Modules. Calling this program from sys.init.0 installs the file called within the ois10.cfg field into the setup environment.

User, or Clients, can remotely access setup data identified with there own string(s).

Specialties:

Any file can be mounted, but the file name "ois10.cfg" should be standardized on.

LoginSetupData

#include "defaults.h"

int LoginSetupData(void)

LoginSetData() will locate and login to Impact's Setup Task. By default, it checks the caller's node first for the presents of "isetup". If none can be found, it checks the registration on the Central Server for the presents of "isetup". If the Setup Task cannot be found, this function returns a 0, otherwise it returns 1.

This function returns 0 if the presents of the setup data server is not running.

WARNING: This is not a standard function and may not be portable across operating systems.

QNX, Impact Libraries, see defaults_get_integer, defaults_get_string, defaults_get_double, LoginSetupData.

defaults_get_string

#include "defaults.h"

char defaults_get_string(const char *searchstring, const char *defaultstring)

This functions searches Impact's Setup Data environment for searchstring, if successful it returns the associated string.

This function returns a char * to a string found or the defaultstring..

WARNING: This is not a standard function and may not be portable across operating systems.

QNX, Impact Libraries, see defaults_get_integer, defaults_get_string, defaults_get_double, LoginSetupData.

within "ois10.cfg"

ois10.Device.net2.Device netii.dev

then from the Client's programme

if(LoginSetupData()) {

printf("\n%s\n", defaults_get_string("ois10.Device.net2.Device", "Device Not Found");

}

If found the result will print "netii.dev" without the "

defaults_get_integer

#include "defaults.h"

char defaults_get_integer(const char *searchstring, int index, int default_integer)

This functions searches Impact's Setup Data environment for searchstring, if successful it returns the associated integer.

This function returns an integer to a string found or the default_integer..

Notes:

WARNING: This is not a standard function and may not be portable across operating systems.

QNX, Impact Libraries, see defaults_get_integer, defaults_get_string, defaults_get_double, LoginSetupData.

within "ois10.cfg"

ois10.Device.net2.pathA 1

then from the Client's programme

if(LoginSetupData()) {

printf("\n%d\n", defaults_get_integer("ois10.Device.net2.pathA", 0, 0);

}

If found the result will print 1

ois10.Device.net2.def 5 6

then from the Client's programme

if(LoginSetupData()) {

printf("\n%d\n", defaults_get_integer("ois10.Device.net2.def", 2, 0);

}

If found the result will print 6, if not found it prints 0 or default_integer.

defaults_get_long

#include "defaults.h"

char defaults_get_long(const char *searchstring, int index, long default_long)

This functions searches Impact's Setup Data environment for searchstring, if successful it returns the associated long.

This function returns an integer to a string found or the default_long..

WARNING: This is not a standard function and may not be portable across operating systems.

QNX, Impact Libraries, see defaults_get_integer, defaults_get_string, defaults_get_double, LoginSetupData.

within "ois10.cfg"

ois10.Device.net2.pathA 1

then from the Client's programme

if(LoginSetupData()) {

printf("\n%ld\n", defaults_get_long("ois10.Device.net2.pathA", 0, 0);

}

If found the result will print 1

ois10.Device.net2.def 5 6

then from the Client's programme

if(LoginSetupData()) {

printf("\n%ld\n", defaults_get_long("ois10.Device.net2.def", 2, 0);

}

If found the result will print 6, if not found it prints 0 or default_long.

defaults_get_double

#include "defaults.h"

char defaults_get_double(const char *searchstring, int index, double default_double)

This functions searches Impact's Setup Data environment for searchstring, if successful it returns the associated double.

This function returns an integer to a string found or the default_double..

WARNING: This is not a standard function and may not be portable across operating systems.

QNX, Impact Libraries, see defaults_get_integer, defaults_get_string, defaults_get_double, LoginSetupData.

within "ois10.cfg"

ois10.Device.net2.pathA 1

then from the Client's programme

if(LoginSetupData()) {

printf("\n%f\n", defaults_get_double("ois10.Device.net2.pathA", 0, 0);

}

If found the result will print 1

ois10.Device.net2.def 5 6

then from the Client's programme

if(LoginSetupData()) {

printf("\n%f\n", defaults_get_double("ois10.Device.net2.def", 2, 0);

}

If found the result will print 6, if not found it prints 0 or default_double.

li
- Part Number LI.DOC

Syntax: li [options]

Options: -1 List all nodes

node number

Examples: li -1

Description: This task, lists all or specific CD Net 2 node numbers and data paths associated with Unity. Note: The use must change the directory to the directory where net3.dev is running prior to using li.

The results of the li command is stored in li.lst and also displayed as:

PATH 1

NODE 0x06

ID 12001, ORI

ID 10001, ORI

ID 13001, ORI

ID 11001, ORI

ID 23000, ORI

ID 23001, ORI

ID 23002, ORI

ID 23003, ORI

ID 23004, ORI

ID 23005, ORI

ID 23006, ORI

ID 23010, ORI

ID 23015, ORI

NODE 0x07

ID 12029, DUP

ID 12026, DUP

ID 5005, ORI

ID 5004, ORI

ID 2007, DUP

ID 2006, DUP

ID 2005, DUP

ID 2004, DUP

ID 2003, DUP

ID 2002, DUP

ID 12003, DUP

ID 102, DUP

ID 5, DUP

ID 4, DUP

ID 3, DUP

ID 1, DUP

ID 0, DUP

ID 10003, DUP

ID 1008, DUP

ID 1007, DUP

ID 1006, DUP

ID 1005, DUP

ID 1004, DUP

ID 1003, DUP

ID 11005, DUP

ID 11003, DUP

ID 5025, ORI

ID 5024, ORI

ID 5023, ORI

ID 5022, ORI

ID 5021, ORI

ID 5020, ORI

ID 5006, ORI

ID 5003, ORI

ID 5002, ORI

ID 5001, ORI

ID 5000, ORI

ID 23015, DUP

ID 23010, DUP

ID 23006, DUP

ID 23005, DUP

ID 23004, DUP

ID 23003, DUP

ID 23002, DUP

ID 23001, DUP

ID 23000, DUP

ID 12101, ORI

ID 12102, ORI

ID 13001, DUP

ID 12001, DUP

ID 11001, DUP

ID 10001, DUP

PATH 0

NODE 0x06

ID 12001, ORI

ID 10001, ORI

ID 13001, ORI

ID 11001, ORI

ID 23000, ORI

ID 23001, ORI

ID 23002, ORI

ID 23003, ORI

ID 23004, ORI

ID 23005, ORI

ID 23006, ORI

ID 23010, ORI

ID 23015, ORI

NODE 0x73

ID 1003, ORI

ID 1004, ORI

ID 1005, ORI

ID 1006, ORI

ID 1007, ORI

ID 1008, ORI

NODE 0x51

ID 11003, ORI

ID 11005, ORI

NODE 0x07

ID 12029, DUP

ID 12026, DUP

ID 5005, ORI

ID 5004, ORI

ID 2007, DUP

ID 2006, DUP

ID 2005, DUP

ID 2004, DUP

ID 2003, DUP

ID 2002, DUP

ID 12003, DUP

ID 102, DUP

ID 5, DUP

ID 4, DUP

ID 3, DUP

ID 1, DUP

ID 0, DUP

ID 10003, DUP

ID 1008, DUP

ID 1007, DUP

ID 1006, DUP

ID 1005, DUP

ID 1004, DUP

ID 1003, DUP

ID 11005, DUP

ID 11003, DUP

ID 5025, ORI

ID 5024, ORI

ID 5023, ORI

ID 5022, ORI

ID 5021, ORI

ID 5020, ORI

ID 5006, ORI

ID 5003, ORI

ID 5002, ORI

ID 5001, ORI

ID 5000, ORI

ID 23015, DUP

ID 23010, DUP

ID 23006, DUP

ID 23005, DUP

ID 23004, DUP

ID 23003, DUP

ID 23002, DUP

ID 23001, DUP

ID 23000, DUP

ID 12101, ORI

ID 12102, ORI

ID 13001, DUP

ID 12001, DUP

ID 11001, DUP

ID 10001, DUP

PATH -1

NODE 0x06

ID -1, UNI

ID -4, UNI

NODE 0x73

ID -1, UNI

ID -4, UNI

NODE 0x51

ID -1, UNI

ID -4, UNI

NODE 0x07

ID -4, UNI

ID -1, UNI

PATH -2

NODE 0x06

ID -3, UNI

ID -2, UNI

NODE 0x73

ID -3, UNI

ID -2, UNI

NODE 0x51

ID -3, UNI

ID -2, UNI

NODE 0x07

ID -2, UNI

ID -3, UNI

------------------------------ Net 2 Node History ---------------------------

Node [07] OnLine at 05/02/1995 22:56

ON LINE 000000 Errors, Last Error At 05/02/1995 22:56

Node [06] OnLine at 05/02/1995 22:56

ON LINE 000020 Errors, Last Error At 05/02/1995 23:05

Node [51] OnLine at 05/02/1995 22:56

ON LINE 000005 Errors, Last Error At 05/02/1995 23:05

Node [73] OnLine at 05/02/1995 22:56

ON LINE 000005 Errors, Last Error At 05/02/1995 23:05

-----------------------------------------------------------------------------

mktag
..... - Part Number MKTAG.DOC

Syntax: mktag [options]

Options: -h help

-i Start at index, ORG in file over rides

-o If tag is already defined, remove it first.

-f Uses only free tags for placements.

Examples: mktag -i1189 file

Description: This program provides support to recreate tag data base items from text files. It complements rdtag, please refer to rdtag for all references to text file contents.

mpxrf
.......... - Part Number

Syntax: mpxrf [optional directory]

Options: Optional directory , the default is /dos/sodgwork

Examples: mpxrf

Description: This task, allows the use to re-tag sodg drawings prior to installation. Normally, the Unity's default directory for on-line sodg editing is /dos/sodgwork. The user can build or edit a drawing, assigning only the tag names. Tag indices can be left blank or unchanged during the editing process. Prior to installation, the mpxrf tool can be used to place the correct tag indices based on the assigned names. This uses the on line database so there is no mistake as to the source of the abs index locations.

n2tagdb
. - Part Number N2TAGDB.DOC

Syntax: n2tagdb &

Options: .NA

Examples: n2tagdb &

Description: This task connects Net 2 stream data, with Bailey tags.

ois10.cfg is as follows:

ois10.Device.net2.Id14 \

/ID23010 \

/PDEFAULT \

/DTINT \

/DCDUPLICATE \

/PATH0,1 \

/ELS2 \

/L19 \

/TC9 \

/DP0 \

/MS0 \

/H1 \

/UP1 # Scanner status

/TC9 \

This is used in the exchange of Net 2 values to Bailey internal tags. TC means tag count: TC9 means there is going to be 9 tags connected to these net 2 ids.

i23010pXXeYYYY

/DP0 \

This value define the data path used to define the net 2 data path.

Example: DPO would be i23010p00eYYYY

/MS0 \

The starting index to begin converting tags.

For example /MS0 defines:

i23010p00e0000 the e0000 equate to /MS0

and continue until /TC9 is found.

i23010p00e0000 - i23010p00e0008

/H1 \

The type of handler, normally this should be set to /H1.

In order to accommodate some various other net 2 data which is not considered arrays or if the arrays are of type STRUCT this value will be defined by another handler.

/UP1 # Scanner status

This normally be set to 1, if is for later use if CD controls are moved into the Bailey.

Note: Under normal conditions, any array on any actuator which is of type:

CHAR, INT, LONG, FLOAT, DOUBLE can be easily converted to and from tags. Some type of STRUCT have been defined through different /H handlers. But, many STRUCT types contained within various nodes are completely different from each other. Building handlers for each type, finding the meaning of each type of STUCT would be a monumental task. Developing these new handlers are done on a priority bases.

Normally all type of arrays of CHAR, INT, LONG, FLOAT, DOUBLE can be setup in minutes.

Net 2 to Bailey Tag Exchange

The exchange from net 2 to Bailey internal tags are done via n2tagdb and tag2id respectably. This installation is done though install.sh at startup.

#Operating parametres for n2tagdb

ois10.Device.n2tagdb.Device: n2tagdb

This defines the net 2 to tag converter, it is only registered only because of various utilities. Utilities look for the name n2tagdb; it name n2tagdb.Device is incorrect it is not device driver.

ois10.Device.n2tagdb.Priority: 6 # Priority of Device Driver

This value is the priority n2tagdb runs at, it should be set to 6 in indifference of running on a primary or secondary node.

net3.dev
........ - Part Number NET3DEV.DOC

Syntax: net3.dev [options] &

Options: -g Register the net3.dev as global

-c Register the net3.dev with the clearhouse

Examples: net3.dev -g &

Description: This Net 2, version 3 device driver replaces the old netii.dev program. I must be used with the Intel AT bus PCB, not the Datem version.

It requires 2 interrupts, normally irq 5 for receive; irq 3 for transmit.

You must run cti to an interrupt above 7 with this card.

Two additional line must be added to the ois10.cfg file to make this card work.

ois10.Driver.b8044.Irqt: 3 #transmitter interrupt

ois10.Driver.b8044.Irqr: 5 #receiver interrupts

see: man ois10

The following outlines the usage and setup of the "ois10.cfg" file, used with all Impact's programmes. To understand what is contained within the ois10.cfg file, it is important to understand how Impact's programmes work. No MIS parameters are included because of it dynamic status, future MIS configuration will be contain within a separate configuration file.

The first program task that must be running, prior to any other Impact programmes, is the isetup task. The isetup program task can be loaded manually or automatically through the install.sh file. The normal parameters for calling or invoking the isetup are:

isetup ois10.cfg &

isetup -g ois10.cfg &

isetup -c ois10.cfg &

If you are running the system as a 1 node ( arc net) system, neither the -c or -g options is needed. The -c registers the isetup task name with the clearhouse, -g registers the task globally. If you choose the -c flag, you must ensure the clearhouse task is running either on the primary or secondary. If you are unclear about what clearhouse is, STOP HERE, you should re-read the QNX manual. If you are unclear what global registrations are, well, things are looking pretty bad for you.

Where the ois10.cfg is a configuration text file; and the subject of this discussion. When isetup task is ran, it creates a temporary file called defaults.tmp, this tmp file will contain a parsered copy of the ois10.cfg. The tmp file is where all Impact's programmes get their data when invoked. Prior to changing or editing the ois10.cfg file it is suggested you read this entire document and the chapter on ed (ed Editor) in the QNX manual.

Impact programmes which use the isetup usage of ois10.cfg are:

netii.dev + utilities ( li, du, idview)

n2tagdb

ImpactScan

n2calcdb

Normally, the next task to be loaded after isetup is installed is the netii.dev, but to follow the standard text outlay in a normal ois10.cfg you will see the profile manager stuff as it appears first in the ois10.cfg. The order of loading is dependent on the install.sh file; not the placement parameters within the ois10.cfg.

Rules of Configuration:

Simple rules of configuration when editing the ois10.cfg are define as follows:

Char Description

# Comment line, comments continue from this point to the end of line

\ Line is continued or for readability the line parameters are continued to the next line.

: End of symbol name

Note: If you have edited the ois10.cfg with a non QNX editor or on a non emacs editor like Brief on a DOS machine, you must convert the file back to a QNX text file when the file is returned back to the /Impact/cmds directory prior to use. This can be done by doing the following, ed ois10.cfg then save it as a QNX file. Or by using the mkd -q utility, if available.

Profile Manager Setup

ProfileManager0: \ Parameter symbol, note it is delimited by ':' you may define up to 20 profile manager slots. ProfileManager0 through ProfileManager19: There is enough room for 20 profiles.

-nameBWT1 \ Short 4 letter symbol used to help display programmer correlate the drawing from the slot.

-n2i12001 \ Net 2 id, where ImpactScan looks to find information on the net 2 device.

-path0 \ Net 2 data path. Normally, path 0 is reel scanner, path 1 is size press, etc..

-s0 \ Starting indices into the array to consider data box 1.

-c92 \ Count or length of array to display

-frm1 \ Frame number... All indices assigned to the same frame number are assumed tied. Let's say the reel scanner has 3 sensors, wt., moisture, and caliper. They are assigned ProfileManager Indices 0, 1, and 2. In theory, they should all have the same count, starting index, and path, because they come from the same actuator or scanner. Because they have been assigned the same frame number, when ImpactScan runs and finds any one of the sensors assigned to this frame in standardize, offsheet scanning, single point etc., then all sensors assigned this frame number will be set to the same mode for display purposes.

-idx0 \ This should always be set to the same number assigned to the ProfileManagerX: where 'X' should always equal -idxX. Index or profile manager slot number 0 through 19.

-ewma0.2 \ Engineering Weighted Machine Average, filter factor. Where setting to 1.0 on type for cd_scan type means no filter; .1 means very heavy average. Ranges for this number are 0.1,0.2,0.3, through 1.0 heavy to no filter.

-rev1 \ This option can be set -rev0 or -rev1. Normally, Bailey's displays are from back to front. Example: 94 to 1. So if you wish to have actual data box or zone displayed on the right side of display, set the -rev1 options. If, you wish to display the last zone or data box at the right as 1, set the -rev0 options.

-scanb10 \ Allow the operator to select 10 scans back on the same page. This keeps a history of the last 10 scans back, in the directory called /pcw/prof_data, for use by the operator at any time.

-tags1bwtprofspan \ This defines the span tag. After which, the user should define this tag somewhere on a graphic display for setting the span of individual profiles. If the value contained within the tag is 2, then the profile will span 2 above the mean and 2 below the mean of any profile.

-cd_scan A major attempt is made to try to correlate the network or net 2 id with the type of data being accessed when ImpactScan is first invoked. But, it is impossible to predetermine all Impact network arrays. Most of the common arrays like actuator power or scanner engineering units are detected. But on occasion, the user may wish to setup up an array assigned which is abnormal. Example: Tuning array for Dyna step, or target base line profiles etc. In such cases, additions can be made without extra programming. If the user wishes to display information as actuator type or if the user wishes to display the information as scanner type, he may by forcing an override by using an optional override parameter called -cd_scan or -cd_actuator to the parameter line.

Note: All references to profile manger are made for the use of the program called ImpactScan. ImpactScan is designed specifically to be used for systems with Impact's Aplus Scanning platforms. For other systems, not Aplus type scanners, the user should replace the ImpactScan program line in the install.sh with the name OtherScan. OtherScan works the same way for all arrays, except for type of engineering unit profiles coming from the scanner. ImpactScan tracks the Aplus scanner mode, display stdz, off-sheet, foward, and reverse from and Aplus scanner. If the Aplus is not determined to be on-sheet and in the forward or reverse direction, then -cd_scan profiles will not be updated. In all other cases, example Measurex scanners, no determination is made of scanner mode. By defining the program called OtherScan instead of ImpactScan, scanner engineering profiles are force displayed based on time; the scanner modes are ignored. Actuator type profile, -cd_actuator, are always displayed on a time interval regardless of OtherScan or ImpactScan.

Net 2 or netii Device Parameters

This program task, netii.dev should be the second program to run after isetup. If you are referring to install.sh, you should see this defined as the second task to be executed. None of the clients of netii should be running prior to installing the netii driver. If a client like n2tagdb is running prior to invoking netii, netii will not completely install.

operating parameters for netii.dev

ois10.Driver.b8044.Base: 512 # Base address 0x200 or 512

This parameter, 512, normally, defines the I/O address reserved for the PC Net 2 card. The number 512 or 200 HEX, is defined as the I/O address of the special PCB. If there is a conflict, you can change the hardware jumpers on the PCB; if this is done, you must change this value to reflect this change.

ois10.Driver.b8044.Ir: 5 # Interrupt number

This is the defined interrupt number assigned as the receiver interrupt of the special Net 2 PCB. If the hardware jumper is changed on the PCB, this number must be changed to also reflect this change. At present, there are no provisions for transmitter interrupts.

ois10.Driver.b8044.Inc: 2 # Increments of base address

Specifically, until further notification, this should always be set to 2. Simply, this is the increments between selective I/O addresses. Normally, PC ATs use an increment of 2.

ois10.Driver.b8044.NetMaster: 0 # This node is not the master

This is very important and must be configured on a site-by-site basis. Normally, on all Impact Systems' PCB, there is a jumper on the iSBX244 PCB which can make it the Net 2 Master. If Unity is desire to be the Net2 Master, this number must be set to 1; all jumpers on remaining network node must be removed.

#Operating parametres for Netii Operational Device

ois10.Device.net2.Device: netii.dev

For engineering testing, keep as is or remove this line completely.

ois10.Device.net2.Priority: 5 # Priority of Device Driver

This number indicates the priority of netii.dev. On a stand alone primary systems, with no other arc net nodes, this number should be set to 5. If other arc net nodes are added, one of the secondaries should then contain the net 2 PCB, this number should be set to 4 when running netii.dev on a secondary node.

ois10.Device.net2.Client: netii # Name of Client

This name is the registered name of netii.dev for all tasks wishing to communicate with it. When using Bailey's set_flags program, this is the name of registration.

Example: set_flags +debug netii

This should normally be set to netii, unless specified by engineering for another configuration.

ois10.Device.net2.Verbose: 0 # echo flag Display Network Interaction

This is for engineering use only, this number should always be set to 0.

ois10.Driver.PrintError: 0 # print_err flag Display Network Errors

Normally, set this value to 0, if set to 1 it displays all net 2 alarms and netii.dev alarms or errors. For normal operation set this to 0, setting to 1 will redirect all error to the Bailey err_dev task.

# define the range of Net IDs

ois10.Device.net2.pathsCount: 2 # Number of net paths

The number of paths, for net 2, this system is configures. Setting it to 2 will imply 2 net paths.

ois10.Device.net2.pathA: 0 # net path A

The path number for the first path.

ois10.Device.net2.pathB: 1 # net path A

The path number for the second path.

ois10.Device.net2.connectionA: 0 # connection

Make this equal to the same parameter as ois10.Device.net2.pathA

ois10.Device.net2.connectionB: 1 # connection

Make this equal to the same parameter as ois10.Device.net2.pathB

ois10.Device.net2.LastID 100 # check ids Id1 through Id100

This number sets the last range of ids defined for net 2. It should always be set greater than the last id defined. In fact, it should be set at least 2 times greater than the last id.

For Example, if the range of ids are ois10.Device.net2.Id1 to ois10.Device.net2.Id50 set this value to at least 100. This way you can later go back and add id without causing problems. If this number is set lower than the last id defined, the ids which are defined greater than LastID will be ignored and not installed into the net 2 presentation layer.

Setup Example of a network or net 2 id.

This is a 2 scanner system, 2 paths are defined.

ois10.Device.net2.Id14 \

/ID23010 \

/PDEFAULT \

/DTINT \

/DCDUPLICATE \

/PATH0,1 \

/ELS2 \

/L19 \

/TC9 \

/DP0 \

/MS0 \

/H1 \

/UP1 # Scanner status

Examining a net 2 id set is as follows:

ois10.Device.net2.Id14 \

Note this id takes up Id14 which is between 0 and less than LastID 100 , so it will load.

/ID23010 \

Net 2 id of 23010, it is common to the Aplus scanner containing scanner modes.

/PDEFAULT \

Always set this to default, unless notified by engineering to do otherwise.

/DTINT \

The type of data received is of type integer. The choices for these are:

CHAR

INT

LONG

FLOAT

DOUBLE

STRUCT

/DCDUPLICATE \

Unity only contains a duplicate copy of these values, the Aplus retains the original copy. Generally, the only value which originates at the Unity are Dry Wt, Coat Wt, Ash Diff all by data boxes. In this case, this should be set to /DCORIGINAL.

/PATH0,1 \

The data paths defined for each scanner containing these ids.

Path 0 and path 1. Path 0, normally being the last scanner on the machine; path 1 being normally the second from the last scanner on the system.

/ELS2 \

Element size of the value of the data type. The values for each type are defined as:

for /DTCHAR = /ELS1

for /DTINT =/ELS2

for /DTLONG =/ELS4

for /DTFLOAT =/ELS4

for /DTDOUBLE = /ELS8

for /DTSTRUCT = /EL define by engineering

/L19 \

The length of the array. Example for a 46 zone Therma Jet this number should be set to 46, for scanner id this number should be set to the value defined by the Aplus for each individual ID.

/TC9 \

This is used in the exchange of Net 2 values to Bailey internal tags. TC means tag count: TC9 means there is going to be 9 tags connected to these net 2 ids.

i23010pXXeYYYY

/DP0 \

This value define the data path used to define the net 2 data path.

Example: DPO would be i23010p00eYYYY

/MS0 \

The starting index to begin converting tags.

For example /MS0 defines:

i23010p00e0000 the e0000 equate to /MS0

and continue until /TC9 is found.

i23010p00e0000 - i23010p00e0008

/H1 \

The type of handler, normally this should be set to /H1.

In order to accommodate some various other net 2 data which is not considered arrays or if the arrays are of type STRUCT this value will be defined by another handler.

/UP1 # Scanner status

This normally be set to 1, if is for later use if CD controls are moved into the Bailey.

Note: Under normal conditions, any array on any actuator which is of type:

CHAR, INT, LONG, FLOAT, DOUBLE can be easily converted to and from tags. Some type of STRUCT have been defined through different /H handlers. But, many STRUCT types contained within various nodes are completely different from each other. Building handlers for each type, finding the meaning of each type of STUCT would be a monumental task. Developing these new handlers are done on a priority bases.

Normally all type of arrays of CHAR, INT, LONG, FLOAT, DOUBLE can be setup in minutes.

Net 2 to Bailey Tag Exchange

The exchange from net 2 to Bailey internal tags are done via n2tagdb and tag2id respectably. This installation is done though install.sh at startup.

#Operating parametres for n2tagdb

ois10.Device.n2tagdb.Device: n2tagdb

This defines the net 2 to tag converter, it is only registered only because of various utilities. Utilities look for the name n2tagdb; it name n2tagdb.Device is incorrect it is not device driver.

ois10.Device.n2tagdb.Priority: 6 # Priority of Device Driver

This value is the priority n2tagdb runs at, it should be set to 6 in indifference of running on a primary or secondary node.

#Operating parametres for tagn2id

ois10.Device.tagn2id.Device: tagn2id

This defines the tag converter to net 2 ids, it is only registered only because of various utilities.

Utilities look for the name n2tagdb; it name tag2n2.Device is incorrect it is not device driver.

ois10.Device.tagn2id.Priority: 7 # Priority of Device Driver

This should always be set to 1 less than the priority of the parent task n2tagdb.

OtherScan
,,, - Part Number OTHERSCA.DOC

Syntax: OtherScan [options] &

Options: -u Time interval

-P Priority

Examples: OtherScan -u10 &

Description: This program task, is designed to run in the background. It assumes the system you are running this on is not an Aplus scanner. If you system uses an Aplus, replace this program with ImpactScan.

-u specifies the number of seconds of sleep before profile updates are made.

Defines for this are keep in ois10.cfg for profile configurations.

Profile Manager Setup

ProfileManager0: \ Parameter symbol, note it is delimited by ':' you may define up to 20 profile manager slots. ProfileManager0 through ProfileManager19: There is enough room for 20 profiles.

-nameBWT1 \ Short 4 letter symbol used to help display programmer correlate the drawing from the slot.

-n2i12001 \ Net 2 id, where ImpactScan looks to find information on the net 2 device.

-path0 \ Net 2 data path. Normally, path 0 is reel scanner, path 1 is size press, etc..

-s0 \ Starting indices into the array to consider data box 1.

-c92 \ Count or length of array to display

-frm1 \ Frame number... All indices assigned to the same frame number are assumed tied. Let's say the reel scanner has 3 sensors, wt., moisture, and caliper. They are assigned ProfileManager Indices 0, 1, and 2. In theory, they should all have the same count, starting index, and path, because they come from the same actuator or scanner. Because they have been assigned the same frame number, when ImpactScan runs and finds any one of the sensors assigned to this frame in standardize, offsheet scanning, single point etc., then all sensors assigned this frame number will be set to the same mode for display purposes.

-idx0 \ This should always be set to the same number assigned to the ProfileManagerX: where 'X' should always equal -idxX. Index or profile manager slot number 0 through 19.

-ewma0.2 \ Engineering Weighted Machine Average, filter factor. Where setting to 1.0 on type for cd_scan type means no filter; .1 means very heavy average. Ranges for this number are 0.1,0.2,0.3, through 1.0 heavy to no filter.

-rev1 \ This option can be set -rev0 or -rev1. Normally, Bailey's displays are from back to front. Example: 94 to 1. So if you wish to have actual data box or zone displayed on the right side of display, set the -rev1 options. If, you wish to display the last zone or data box at the right as 1, set the -rev0 options.

-scanb10 \ Allow the operator to select 10 scans back on the same page. This keeps a history of the last 10 scans back, in the directory called /pcw/prof_data, for use by the operator at any time.

-tags1bwtprofspan \ This defines the span tag. After which, the user should define this tag somewhere on a graphic display for setting the span of individual profiles. If the value contained within the tag is 2, then the profile will span 2 above the mean and 2 below the mean of any profile.

-cd_scan A major attempt is made to try to correlate the network or net 2 id with the type of data being accessed when ImpactScan is first invoked. But, it is impossible to predetermine all Impact network arrays. Most of the common arrays like actuator power or scanner engineering units are detected. But on occasion, the user may wish to setup up an array assigned which is abnormal. Example: Tuning array for Dyna step, or target base line profiles etc. In such cases, additions can be made without extra programming. If the user wishes to display information as actuator type or if the user wishes to display the information as scanner type, he may by forcing an override by using an optional override parameter called -cd_scan or -cd_actuator to the parameter line.

Note: All references to profile manger are made for the use of the program called ImpactScan. ImpactScan is designed specifically to be used for systems with Impact's Aplus Scanning platforms. For other systems, not Aplus type scanners, the user should replace the ImpactScan program line in the install.sh with the name OtherScan. OtherScan works the same way for all arrays, except for type of engineering unit profiles coming from the scanner. ImpactScan tracks the Aplus scanner mode, display stdz, off-sheet, foward, and reverse from and Aplus scanner. If the Aplus is not determined to be on-sheet and in the forward or reverse direction, then -cd_scan profiles will not be updated. In all other cases, example Measurex scanners, no determination is made of scanner mode. By defining the program called OtherScan instead of ImpactScan, scanner engineering profiles are force displayed based on time; the scanner modes are ignored. Actuator type profile, -cd_actuator, are always displayed on a time interval regardless of OtherScan or ImpactScan.

Profile Displays

1. Introduction

This user's guide covers all aspects of the PCW Profile Display package. With this package, you can configure graphic displays corressponding with the configured profile database tags. These graphic displays are part of the VDM ".dt file" format used by all graphic displays in PCW. This means you can create profile displays that are integrated with other forms of VDM graphics.

2. Configuration

Profile Tag Database

i) Valmet Database (via TCP/IP)

ii) Francis Database (via serial link)

Graphics

Graphics are configured by means of ".dt files". It assumed that you already know the basics of ".dt files" and what they do. The following are extentions to the ".dt file" format. Profiles are configured as combination escape trends (et ....) and escape interactives (ei ...):

Code Prameters Comments

et 65, profile trend type

profile option, 32 = third ht

33 = half ht

34 = actuator (half ht)

0,

0,

1, must always be 1

0,

xmin, display offset

ymin,

0,

0,

border colour

"et" must be immediately followed by "ei" for the profile to be displayed:

ei 108,

86,

key1,key2,

profile index,

trace colour,

0,

0

2prftmp:

rm

rm *** the graphic name goes here ***

bm 0,<name>~

rm

vd MAXTAGS=180~

rm

rm *** the date text goes here ***

rm

bp 0,<date>~,0

rm

bb

rm

tc 5

ch 372

cs 20

rm

rm *** the graphic title goes here

rm

tx 0,400,7050,<title>~

rm

rm *** first profile chart ***

rm

et 65,33,0,0,1,0,400,4002,0,0,<border colour>

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm *** next profile chart ***

rm

et 65,33,0,0,1,0,400,656,0,0,4

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm

tc 2

ch 124

cs 10

rm

rm *** the first profile key control descriptor ***

rm

tx 0,450,6752,<key1 text><key2 text>~

rm

rm *** the next profile key control descriptor ***

rm

tx 0,450,3406,<key1 text><key2 text>~

rm

pe 124,CONTROL.PG~

ep

em

%%

3prftmp:

rm

rm *** the graphic name goes here ***

bm 0,<name>~

rm

vd MAXTAGS=180~

rm

rm *** the date text goes here ***

rm

bp 0,<date>~,0

rm

bb

rm

tc 5

ch 372

cs 20

rm

rm *** the graphic title goes here

rm

tx 0,400,7050,<title>~

rm

rm *** first profile chart ***

rm

et 65,33,0,0,1,0,400,4876,0,0,<border colour>

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm *** Second profile chart ***

rm

et 65,33,0,0,1,0,400,2688,0,0,4

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm *** Third profile chart ***

rm

et 65,33,0,0,1,0,400,500,0,0,4

ei 108,86,<key1>,<key2>,<pindex>,<colour>,0,0

rm

rm

tc 2

ch 124

cs 10

rm

rm *** the first profile key control descriptor ***

rm

tx 0,450,6752,<key1 text><key2 text>~

rm

rm *** the second profile key control descriptor ***

rm

tx 0,450,3406,<key1 text><key2 text>~

rm

rm *** the third profile key control descriptor ***

rm

tx 0,450,2375,<key1 text><key2 text>~

rm

pe 124,CONTROL.PG~

ep

em

%%

rdtag
- Part Number RDTAG.DOC

Syntax: rdtag [options]

Options: -iINDEX

-lLEN

Examples: rdtag -I1189 -l1 >rdtag.cfg

Description: This task, reads from Bailey's Tag Database an output this in an ASC format. It then can be modified using a standard text editor and place back into the Tag Database using mktag.

Example : rdtag -l1189 -I1 >rdtag.lst

Where: less rdtag.lst

ORG="1189"

TAGNAME="ashsplastavg" \

TAGDESC="Ash Size Press" \

TAGTYPE="RCM" \

ALMCOMMENTH="Ash Size Press Last Avg" \

ALMCOMMENTL="Ash Size Press Last Avg" \

EUDESC="0" \

PRIMDISP="NA" \

LOOP="1" PCU="1" MODULE="2" BLOCK="600" \

DEFAULT="0.000000" \

SPAN="0.000000" \

ZERO="0.000000" \

LALARM="0.000000" HALARM="0.000000" \

ZERO_STATE="0" ONE_STATE="0" ALM_DEFN="0" SWITCH_TYPE="0" \

ALMGROUP="0" ALMPRIORITY="0" DIGIND="0" NUMDECPL="0"

Usage

The following descriptions are common to all taqs define within the 'tagname.cfg'.

TAGTYPE=Option is necessary

REPEAT=Option is optional, the default is 1

ORG=Option is optional, the default is next available tag, IE the next tag.

TAG Types:

The following tags are accepted by 'mktag':

Type              TAGTYPE"XXX"       Description                                    
NMBADQ             "BADQ"            /* Bad quality because of module */            
NMBOOL             "BOOL"            /* digital */                                  
NMBOOLIN          "BOOLIN"           /* Digital Report  */                          
NMBOOLSW          "BOOLSW"           /* Internal Digital */                         
NMCORD             "CORD"            /* Control Output Read */                      
NMCOWR            "COWR"             /* Control Output Write */                     
NMDAANL            "DAANL"           /* Data aquisition analog */                   
NMDADIG            "DADIG"           /* Data aquisition digital */                  
NMDDT              "DDT"             /* dd */                                       
NMEXTMOD          "EXTMOD"           /* Extended Module status */                   
NMMODULE          "MODULE"           /* Module Status  */                           
NMMSDDT            "MSDDT"           /* multi-                                      
state device                                                                        
driver tag*/                                                                        
NMMSDDT            "MSDDT"           /* msdd */                                     
NMPRCVAR           "PRCVAR"          /* Process Variable */                         
NMRATRD            "RATRD"           /* Ratio Index Read */                         
NMRATWR            "RATWR"           /* Ratio Index Write */                        
NMRCM              "RCM"             /* rcm */                                      
NMRCMIN           "RCMIN"            /* RCM Report */                               
NMREAL             "REAL"            /* ANALOG */                                   
NMREALIN          "REALIN"           /* Analog Report */                            
NMREALSW          "REALSW"           /* Internal Analog */                          
NMRMCB             "MRMCB"           /* remote motor control block */               
NMRMSC             "RMSC"            /* RMSC */                                     
NMRMSCIN          "RMSCIN"           /* remote manual set constant report */        
NMSETRD            "SETRD"           /* Setpoint Read */                            
NMSETWR            "SETWR"           /* Setpoint Write */                           
NMSTMODE           "STMODE"          /* Station Mode  */                            
NMSTN              "STN"             /* station */                                  
NMSTNIN           "STNIN"            /* station report */                           
NMSTSTAT          "STSTAT"           /* Station Status */                           
NMTEXT             "TEXT"            /* text */                                     

Note: Older name description are still supported such as tagtype="intanalog"

INTDIG TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does.." Optional, default " "

ALARMGROUP="0" Default is "0", can be 0 through 99

PRIMDISP="disp" Default is " "

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

Example: REPEAT="3"

Please refer to Internal Analog for use of REPEAT=

INTANALOG TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does.." Optional, default " "

EUDESC="2" Default is "0", example "2" = %

ALARMGROUP="0" Default is "0", can be 0 through 99

NUMDECPL="1" Default is "1"

PRIMDISP="disp" Default is " "

SPAN="10" Span, default is 0

ZERO="-10" Zero, default is 0

HALARM="10" Default is 0.

LALARM="-11" Default is 0

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

Example: REPEAT="3" TAGNAME="i01007p00e" TAGDESC="TJ MAN POWER ZN "

For 3 consecutive tags:

i01007p00e0000

i01007p00e0001

i01007p00e0002

With Descriptions:

TJ MAN POWER ZN 0000

TJ MAN POWER ZN 0001

TJ MAN POWER ZN 0002

RMSC TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does." Optional, default " "

EUDESC="2" Default is "0", example "2" = %

ALARMGROUP="0" Default is "0", can be 0 through 99

NUMDECPL="1" Default is "1"

PRIMDISP="disp" Default is " "

SPAN="10" Span, default is 0, note MFP updates this

ZERO="-10" Zero, default is 0, note MFP update this

HALARM="10" Default is 0., note MFP updates this

LALARM="-11" Default is 0, note MFP updates this

LOOP="1" Default is 0

PCU="1" Default is 0

MODULE="128" Default is 0

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

See Internal analog for more information on the REPEAT= parameter.

RCM TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does." Optional, default " "

ALARMGROUP="0" Default is "0", can be 0 through 99

PRIMDISP="disp" Default is " "

LOOP="1" Default is 0

PCU="1" Default is 0

MODULE="128" Default is 0

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

See Internal analog for more information on the REPEAT= parameter.

DD TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does." Optional, default " "

ALARMGROUP="0" Default is "0", can be 0 through 99

PRIMDISP="disp" Default is " "

LOOP="1" Default is 0

PCU="1" Default is 0

MODULE="128" Default is 0

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

See Internal analog for more information on the REPEAT= parameter.

MSDD TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does." Optional, default " "

ALARMGROUP="0" Default is "0", can be 0 through 99

PRIMDISP="disp" Default is " "

LOOP="1" Default is 0

PCU="1" Default is 0

MODULE="128" Default is 0

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

See Internal analog for more information on the REPEAT= parameter.

STATION TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does." Optional, default " "

ALARMGROUP="0" Default is "0", can be 0 through 99

PRIMDISP="disp" Default is " "

LOOP="1" Default is 0

PCU="1" Default is 0

MODULE="128" Default is 0

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

See Internal analog for more information on the REPEAT= parameter.

DIGITAL TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does." Optional, default " "

ALARMGROUP="0" Default is "0", can be 0 through 99

PRIMDISP="disp" Default is " "

LOOP="1" Default is 0

PCU="1" Default is 0

MODULE="128" Default is 0

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

See Internal analog for more information on the REPEAT= parameter.

ANALOG TAG:

Common parameters for the internal tag type are necessary for proper operation.

TAGNAME="tagname" Necessary

TAGDESC="this tag does." Optional, default " "

ALARMGROUP="0" Default is "0", can be 0 through 99

PRIMDISP="disp" Default is " "

LOOP="1" Default is 0

PCU="1" Default is 0

MODULE="128" Default is 0

SPAN="10" Span, default is 0, note MFP updates this

ZERO="-10" Zero, default is 0, note MFP update this

HALARM="10" Default is 0., note MFP updates this

LALARM="-11" Default is 0, note MFP updates this

If the ORG="10" is set, the tag index is set to 10, where this tag is laid; tags will run consecutive from this point on.

If the REPEAT=10 is set, the tag is repeated for 10 time from the current tag index. The tagname is incremented from this point, with 4 decimal asci characters amended to the tagname equate.

See Internal analog for more information on the REPEAT= parameter.

stdz
- Part Number

Syntax: stdz [options] &

Options: -sdsamplein Tag

-idsampletime Tag

-odsampleout Tag

-ddsambwn Tag

Examples: stdz -sdsamplein -idsampletime -odsampleout -ddsambwn &

Description: .

Dynamic Sample Program Copyright Impact <c> 1995

The following outlines the installation and use of the program called 'stdz'. This program is always assumes the Reel Scanner, on data path zero, for all its' calculations. It is designed to take an input from an external source, force the Scanner into a predetermined single point position, and record and display statistical information about four sensors(Basis Wt., Moisture, Caliper, and Ash). If you do not have one or more of the following gauges, you can delete this portion of the video display.

Software Required:

1. stdz

2. dynamic display page

3. appropriate mfp code to drive signalling

Hardware Required:

1. Digital switch

2. lamp indicator

Tags Required All in Consecutive Orde; with No Tag Missing:

1. dsamplein RMSC

2. dsampleout DIGITAL

3. dsampletime INTERNAL ANALOG

4. dsambwn INTERNAL ANALOG Basis Wt Now

5. dsambwvariance INTERNAL ANALOG Basis Wt. Variance

6. dsambwmean INTERNAL ANALOG Basis Wt. Mean

7. dsambw2sigma INTERNAL ANALOG Basis Wt. 2 Sigma

8. dsambwmaximum INTERNAL ANALOG Basis Wt. Highest Reading

9. dsambwminimum INTERNAL ANALOG Basis Wt. Lowest Reading

10. dsammon INTERNAL ANALOG Moisture

11. dsammovariance INTERNAL ANALOG

12. dsammomean INTERNAL ANALOG

13. dsammo2sigma INTERNAL ANALOG

14. dsammomaximum INTERNAL ANALOG

15. dsammominimum INTERNAL ANALOG

16. dsamcan INTERNAL ANALOG Caliper

17. dsamcavariance INTERNAL ANALOG

18. dsamcamean INTERNAL ANALOG

19. dsamca2sigma INTERNAL ANALOG

20. dsamcamaximum INTERNAL ANALOG

21. dsamcaminimum INTERNAL ANALOG

22. dsamasn INTERNAL ANALOG Ash

23. dsamasvariance INTERNAL ANALOG

24. dsamasmean INTERNAL ANALOG

25. dsamas2sigma INTERNAL ANALOG

26. dsamasmaximum INTERNAL ANALOG

27. dsamasminimum INTERNAL ANALOG

Command Line:

Contained within the /Impact/cmds/install.sh enter the following command line.

stdz -sdsamplein -idsampletime -odsampleout -ddsambwn &

Where -ddsambw is the name of the first tag in the statistical tags' array.

The procedure for the mfp program, handling the dsamplein and dsampleout tags, is as follows:

When the operator presses or closes the digital input set dsamplein to one, simultaneously, the mfp should: begin to flash the lamp indicator at a one second on - one second off intervals. At this point, the dsampleout tag starts at zero(if) and will remain at zero until the scanner reaches single point. Once the scanner reaches single point, the dsampleout tags should go to the number of seconds of the test. The mfp should stop flashing the lamp indicator and force the lamb on continuous. This indicates to the operator, that the test has begun; either mark the reel edge or drop a marker flag into the reel. The mfp should keep the lamp illuminate steady until it sees the dsampleout tag drop to zero or the time of the dsampleout tag has expired.

FlowLogicForMFP {

if ( someonepressed_button()) {

set_dsamplein_to_1();

while(dsampleout == 0) {

flash_lamp();

}

lamp_on_steady();

set_dsample_to_0();

while( dsampleout_time_has_expired() || dsampleout == 0) {

lamp_on_steady();

}

lamp_off()

}

}

Operators Use:

The operator should use the stdz program as follows:

Select an appropriate single point position, a flat spot, with the least variance. Enter this into the sample video page, noting the spot on the reel for lab test correlation.

Determine the waste tolerable at reel turnup in seconds prior to turnup. Example: Run the test for 30 seconds prior to turnup, enter 30 seconds on the dynamic video page.

Walk over to the dynamic test switch and press it prior to turnup. The lamp flashes, when the lamp comes on steady, mark the reel by dropping a different colour paper flag near the edge.

When the lamp goes off, walk over to the dynamic video page and press frame copy. This sheet should accompany the lab test at the same position, for the number of wraps back to the mar

Net 32 Unity Release Notes:

These are some things I have notices while Alpha Testing Net 2 for what it is worth. Also, some changes and between net32's netii.dev and net32.

1) All simulations were done on my site with Unity set to node 5, aplus simulator set to node 6. The Aplus simulator was run an a PC; not a STD Bus style computer. All Net 2 card installed in PCs (Unity and Aplus Simulator) were DTI cards. I never could get the Intel style card to work reliably.

Using the Intel style card seemed to cause multiple reset for no reason. Also, I descovered 3 bad DTI cards, one would flood the Unity with Interrupts for no reason ( Checked with Logic Prob) and one DTI card appeared to miss interrupts as best as I could tell.

The Intel card would never generate an Interrupt.

I do not have a scope, so I could not tell if there were any problems with the master clock sync pulse, but before I began I replace both In/Out line drivers.

Durring my test, I noticed if I placed a known bad isbx344 in the loop it just trashed the network. I have a known bad isbx344 PCB which I brought back from a site. This card is missing the upper half of the clock pulse when when testing in the master mode.

My setup included:

Node 6 Unity (DTI PDC) MASTER

Node 5 aplus simulator ( ON PC, DTI PCB) runs demo.exe

Node 73 siemens link

Node 71 a Therma Jet PUC

Node 72 a Caliper controller

Notable things: If I placed my known bad isbx344 on either of the multi bus computers it cause the network to reset at random intervals. It followed the isbx344 PCB for sure. I suspect, it was constantly coming on and going off the network causing the Unity at time to be in a perm reset condition. Anyway, replacing this PCB or moving it off the network remidied the problem.

With the DTI card which caused random, rapid interrupts for no reason placed into the Unity I found: When the Unity was made the Master very bad thing would happen. Unity slowed to a crawl, and net3.dev would run out of memory and on occasion even SIGB. What was curious, when the Unity was not made master(PUC Master), the Unity stayed up for hours without problems. The Unity was still slowed to a crawel.

The Intel card, which did not cause any inturrpts at all would start the network(When made Master), but the entire network would die after about 1 minute. When some other node was made master(PUC) and the Intel card was placed into Unity, occasionally the Unity would never be seen by other nodes. This would move arround to different nodes. Sometimes the PUC would not see the Unity, sometimes it was the aplus simulator. Placing terminators on the line sometimes made the problem look like it went away, sometimes taking 1 terminator off the line made it look like to problem went away.

With all good cards in the system, good line drivers, normal interrutps etc... This ended up as:

Node 6 Unity (DTI PDC) MASTER

Node 5 aplus simulator ( ON PC, DTI PCB) runs demo.exe

Node 73 siemens link

Node 71 a Therma Jet PUC

Node 72 a Caliper controller

Note: I never could get anything higher than net 9.91x to run correctly. But, to be fare I never placed net 9.93 on a PCB that was known good.

#CLOCKS_PER_SEC 1

;

; begin programme

; always do(s)

;

;

; Srini removed the mis code from reelsum.mfp. The new mis task handles

; directly. No support is required from reelsum.mfp for mis task.

; Only the "gradehaschange" tag needs to reset. This can be moved to

; gdr task. Since mfp needs some target information for now this can be

; done here.

;

; Will dynamic sample send scanner on sheet after sampling ?

; No

; All dynamic sample stuff is contained within `stdz' not reelsum.mfp..

; Dynamic sample code is removed by Srini with the approval of Dan Larson.

; `stdz' task already does the dynamica sampling. The code in the reelsum.mfp

; is redundant and will affect the performance.

;

jsr, $tjsetautoman ; this forces all zone to manual or auto

jsr, $brkscnchk ; saftey check of scanner path 0

gettag | pv, s1dszonelimit

ifec,0

settagc | pv, s1dszonelimit, 100

jsr, $speeddraw ; custom speed draw calc.

jsr, $aplusalm ; do alarm transfer to MFP

; FOR MFP to keep track of std. of grade.

; Please keep in always running list.

gettag | pv, s1bwttgt

settag | sp, rebwnominal

gettag | pv, s1moitgt

settag | sp, remonominal

jsr, $gradecheck

jsr, $breakcheck

jsr, $mfpscan

jsr, $larson

$end

exit

;---------------------end------------------------

; START OF SUBROUTINES SECTION

; This function is added here, but should be removed and a -d flag added to intergauge.

; This only serves to make the reelsum.mfp larger

;

$dwlavg1

gettag | pv, i23001p00e0002

divc,100

mul | pv, i23001p00e0000

mulc, -1

add | pv, i23001p00e0000

settag | pv, s1dwtlav

settag | pv, s1dwt

rtn

$aplusalm

; Get the APLUS sensor alarm then set MFP.

; This need to be updated for level compatibility.

; Now MFP tag is: 0 = OK 1 = ALARM

; The A+ is 1 = ALARM 2 = OK JGM.

; basis weight alarms

; please do not bother if APALM is 0.0

; for DI EXEPT tag you need to write in the PV ???

; This logic, bassically takes the 1 - 2 logic and turns it into normal boolean for mfp md control

gettag | pv, i23015p00e0017

ifec, 2.0

subc,2.0

settag | pv, rebwocntoutlim

gettag | pv, i23015p00e0018

ifec, 2.0

subc,2.0

settag | pv, rebwccntoutlim

gettag | pv, i23015p00e0019

ifec, 2.0

subc,2.0

settag | pv, rebwlavghilim

gettag | pv, i23015p00e0020

ifec, 2.0

subc,2.0

settag | pv, rebwlavglolim

;moisture alarms

gettag | pv, i23015p00e0022

ifec, 2.0

subc,2.0

settag | pv, remorcntoutlim

gettag | pv, i23015p00e0021

ifec, 2.0

subc,2.0

settag | pv, remowcntoutlim

gettag | pv, i23015p00e0023

ifec, 2.0

subc,2.0

settag | pv, remolavghilim

gettag | pv, i23015p00e0024

ifec, 2.0

subc,2.0

settag | pv, remolavglolim

gettag | pv, i23015p00e0025

ifec, 2.0

subc,2.0

settag | pv, reasccntoutlim

gettag | pv, i23015p00e0026

ifec, 2.0

subc,0

settag | pv, reasocntoutlim

gettag | pv, i23015p00e0027

ifec, 2.0

subc,2.0

settag | pv, reaslavghilim

gettag | pv, i23015p00e0028

ifec, 2.0

subc,2.0

settag | pv, reaslavglolim

rtn

;end of aplusalm ....for MFP

$speeddraw

gettag | pv, machinespeed

settag | pv, misspeed

rtn

$larson

; Set up alarms for KKA - BW deviation, Moi deviation, offsheet when running

; Dan Larson.

;

gettag |pv,i23001p00e0000 ; BW last average

sub |pv,s1bwttgt ; get deviation from tgt.

settag |pv,bwdeviation ; save for limit testing and alarm

gettag |pv,i23001p00e0002 ; Moisture last avg.

sub |pv,s1moitgt ; get deviation from tgt

settag |pv,moideviation ; save for limit testing and alarm

; check for scanner off sheet when not in a break

gettag |pv,i23010p00e0001 ; get scanner mode

ifgc,1 ; off sheet?

skip, $notoffsheet ; no; done with tests

; scanner is offsheet; are we in break??

gettag |pv,disheetbreak ;reel break

ifgc,0

skip, $notoffsheet ; is in break - scanner should be offsheet!

; scanner is offsheet, but we are not in a break - issue an alarm (set digital)

settagc |pv,badoffsheet,1

skip, $endoffsheet ; done

$notoffsheet

settagc |pv,badoffsheet,0 ; no problem with scanner - clear alarm digital

$endoffsheet

; End of Dan Larson code

;

rtn

$gradecheck

; Do a quick grade check, to see if the current grade has changed

; By the way.. nowgrade tag is for MFP use.. JGM

;

gettag | pv, gradehaschange

ifnx

rtn ;grade has not

;changed..get out

settagc | pv, gradehaschange,0

gettag | pv, currentgrade ; get the current grade

settag | sp, nowgrade

; settagc | pv, usescanwidth,0 ; operator needs to enter width, unless

; scanner can scan off sheet on front.

; settagc | pv, i05001p00e0004,3251 ;normal width...

settagc | pv, i23010p00e0000,2 ; force standardization for reel on grade

;change

gettag | pv, s1bwtstd

settag | pv, s1bwttgt

gettag | ALARMHI, s1bwtstd

settag | ALARMHI, s1bwttgt

; 4trend -------------

settag | ALARMHI, i23000p00e0000

settag | ALARMHI, i23001p00e0000

;--------

gettag | ALARMLO, s1bwtstd

settag | ALARMLO, s1bwttgt

; 4trend ------------

settag | ALARMLO, i23000p00e0000

settag | ALARMLO, i23001p00e0000

;--------------

gettag | pv, s1moistd

settag | pv, s1moitgt

gettag | ALARMHI, s1moistd

settag | ALARMHI, s1moitgt

; 4trend --------

settag | ALARMHI, i23000p00e0001

settag | ALARMHI, i23001p00e0002

;----------------

gettag | ALARMLO, s1moistd

settag | ALARMLO, s1moitgt

; 4trend --------

settag | ALARMLO, i23000p00e0001

settag | ALARMLO, i23001p00e0002

;----------------

gettag | pv, s1calstd

settag | pv, s1caltgt

gettag | ALARMHI, s1calstd

settag | ALARMHI, s1caltgt

; 4trend ----------

settag | ALARMHI,i23000p00e0004

settag | ALARMHI,i23001p00e0008

;------------------

gettag | ALARMLO, s1calstd

settag | ALARMLO, s1caltgt

; 4trend ----------

settag | ALARMLO, i23000p00e0004

settag | ALARMLO, i23001p00e0008

;------------------

rtn ;end of gradecheck

;missheetbreak is an internal digital tag. sheetbreak is a RCM tag.

;Believe me RCM tag cannot be read by mis. So the internal tag is invented.

;

$breakcheck

gettag | pv, disheetbreak

settag | pv, misbreak

rtn

;

; Send scanner offsheet if leading edge of break....

; This code was build by EWC, please do not change it...

; Place your code modifications in your own subroutine

; Path 0, scanner break check

; JAN, 18, 1996

;

$brkscnchk ; break check,

gettag | pv, disheetbreak ; get the reel break signal

ifnx ; if not break

skip, $brkscnchk1 ; pass the check

gettag | pv, reeldummy7 ; else there is a break, is it the first time

ifx ; had a break last time we were here

skip, $brkscnchk1 ; do nothing with scanner

; do path 0

gettag | pv,i23010p00e0001 ; else leading edge of break signal, get the scanner mode

ifgc,1.0 ; if it is in the offsheet target mode

settagc | pv,i23010p00e0000,1 ; set the scanner target to offsheet

; do path 1

; remove comment if path 1 scanner

; gettag | pv,i23010p01e0001 ; else leading edge of break signal, get the scanner mode

; ifgc,1.0 ; if it is in the offsheet target mode

; settagc | pv,i23010p01e0000,1 ; set the scanner target to offsheet

; do path 2

; remove comment if path 2 scanner

; gettag | pv,i23010p02e0001 ; else leading edge of break signal, get the scanner mode

; ifgc,1.0 ; if it is in the offsheet target mode

; settagc | pv,i23010p02e0000,1 ; set the scanner target to offsheet

;

$brkscnchk1

gettag | pv, disheetbreak ; record history of break, for next time

settag | pv, reeldummy7 ; save it to history tag for sheet break

rtn

;

; End path 0 scanner break check

;

$mfpscan

gettag | pv, i23010p00e0001 ; Get scanner 1 mode

settag | pv, rescanmode ; Set MFP tag

gettag | pv, i23001p00e0027 ; scanner even counter

ife | pv, reeldummy1 ; if it less than last time

rtn

settag | pv, reeldummy1 ; setup scan counter history to present

gettag | pv, i23001p00e0000 ;do weight

settag | pv, rebwlastavg

gettag | pv, i23001p00e0002 ;do moisture

settag | pv, remolastavg

gettag | pv, i23001p00e0027 ; scanner even counter

settag | pv, rescancounter ; for Jean Guy to see new scan

jsr, $dwlavg1

rtn ;end of mfpscan

$tjsetautoman

gettag | pv,tjsetautoman

ifnx

rtn

ifec, 1

skip,$tjcond

gettagc,0

$tjcond

settag | pv, i01005p00e0000

settag | pv, i01005p00e0001

settag | pv, i01005p00e0002

settag | pv, i01005p00e0003

settag | pv, i01005p00e0004

settag | pv, i01005p00e0005

settag | pv, i01005p00e0006

settag | pv, i01005p00e0007

settag | pv, i01005p00e0008

settag | pv, i01005p00e0009

settag | pv, i01005p00e0010

settag | pv, i01005p00e0011

settag | pv, i01005p00e0012

settag | pv, i01005p00e0013

settag | pv, i01005p00e0014

settag | pv, i01005p00e0015

settag | pv, i01005p00e0016

settag | pv, i01005p00e0017

settag | pv, i01005p00e0018

settag | pv, i01005p00e0019

settag | pv, i01005p00e0020

settag | pv, i01005p00e0021

settag | pv, i01005p00e0022

settag | pv, i01005p00e0023

settag | pv, i01005p00e0024

settag | pv, i01005p00e0025

settag | pv, i01005p00e0026

settag | pv, i01005p00e0027

settag | pv, i01005p00e0028

settag | pv, i01005p00e0029

settag | pv, i01005p00e0030

settag | pv, i01005p00e0031

settag | pv, i01005p00e0032

settag | pv, i01005p00e0033

settag | pv, i01005p00e0034

settag | pv, i01005p00e0035

settag | pv, i01005p00e0036

settag | pv, i01005p00e0037

settag | pv, i01005p00e0038

settag | pv, i01005p00e0039

settag | pv, i01005p00e0040

settag | pv, i01005p00e0041

settag | pv, i01005p00e0042

settag | pv, i01005p00e0043

settag | pv, i01005p00e0044

settag | pv, i01005p00e0045

settag | pv, i01005p00e0046

settag | pv, i01005p00e0047

settag | pv, i01005p00e0048

settag | pv, i01005p00e0049

settag | pv, i01005p00e0050

settag | pv, i01005p00e0051

settag | pv, i01005p00e0052

settag | pv, i01005p00e0053

settag | pv, i01005p00e0054

settag | pv, i01005p00e0055

settag | pv, i01005p00e0056

settag | pv, i01005p00e0057

settag | pv, i01005p00e0058

settag | pv, i01005p00e0059

settag | pv, i01005p00e0060

settag | pv, i01005p00e0061

settag | pv, i01005p00e0062

settag | pv, i01005p00e0063

settag | pv, i01005p00e0064

settag | pv, i01005p00e0065

settag | pv, i01005p00e0066

settag | pv, i01005p00e0067

settag | pv, i01005p00e0068

settag | pv, i01005p00e0069

settag | pv, i01005p00e0070

settag | pv, i01005p00e0071

settag | pv, i01005p00e0072

settag | pv, i01005p00e0073

settag | pv, i01005p00e0074

settag | pv, i01005p00e0075

settag | pv, i01005p00e0076

settag | pv, i01005p00e0077

settag | pv, i01005p00e0078

settag | pv, i01005p00e0079

settag | pv, i01005p00e0080

settag | pv, i01005p00e0081

settag | pv, i01005p00e0082

settag | pv, i01005p00e0083

settag | pv, i01005p00e0084

settag | pv, i01005p00e0085

settag | pv, i01005p00e0086

settag | pv, i01005p00e0087

settag | pv, i01005p00e0088

settag | pv, i01005p00e0089

settag | pv, i01005p00e0090

settag | pv, i01005p00e0091

settag | pv, i01005p00e0092

settag | pv, i01005p00e0093

settag | pv, i01005p00e0094

settag | pv, i01005p00e0095

settag | pv, i01005p00e0096

settag | pv, i01005p00e0097

settag | pv, i01005p00e0098

settag | pv, i01005p00e0099

settag | pv, i01005p00e0100

settag | pv, i01005p00e0101

settag | pv, i01005p00e0102

settag | pv, i01005p00e0103

settag | pv, i01005p00e0104

settag | pv, i01005p00e0105

settag | pv, i01005p00e0106

settag | pv, i01005p00e0107

settag | pv, i01005p00e0108

settag | pv, i01005p00e0109

settag | pv, i01005p00e0110

settag | pv, i01005p00e0111

settag | pv, i01005p00e0112

settag | pv, i01005p00e0113

settag | pv, i01005p00e0114

settag | pv, i01005p00e0115

settag | pv, i01005p00e0116

settag | pv, i01005p00e0117

settag | pv, i01005p00e0118

settag | pv, i01005p00e0119

settag | pv, i01005p00e0120

settag | pv, i01005p00e0121

settag | pv, i01005p00e0122

settag | pv, i01005p00e0123

settag | pv, i01005p00e0124

settag | pv, i01005p00e0125

settag | pv, i01005p00e0126

settag | pv, i01005p00e0127

settag | pv, i01005p00e0128

settag | pv, i01005p00e0129

settag | pv, i01005p00e0130

settag | pv, i01005p00e0131

settag | pv, i01005p00e0132

settag | pv, i01005p00e0133

settag | pv, i01005p00e0134

settag | pv, i01005p00e0135

settag | pv, i01005p00e0136

settag | pv, i01005p00e0137

settag | pv, i01005p00e0138

settag | pv, i01005p00e0139

settag | pv, i01005p00e0140

settag | pv, i01005p00e0141

settag | pv, i01005p00e0142

settag | pv, i01005p00e0143

settag | pv, i01005p00e0144

settag | pv, i01005p00e0145

settag | pv, i01005p00e0146

settag | pv, i01005p00e0147

settag | pv, i01005p00e0148

settag | pv, i01005p00e0149

settag | pv, i01005p00e0150

settag | pv, i01005p00e0151

settag | pv, i01005p00e0152

settag | pv, i01005p00e0153

settag | pv, i01005p00e0154

settag | pv, i01005p00e0155

settag | pv, i01005p00e0156

settag | pv, i01005p00e0157

settag | pv, i01005p00e0158

settag | pv, i01005p00e0159

settag | pv, i01005p00e0160

settag | pv, i01005p00e0161

settag | pv, i01005p00e0162

settag | pv, i01005p00e0163

settag | pv, i01005p00e0164

settag | pv, i01005p00e0165

settag | pv, i01005p00e0166

settag | pv, i01005p00e0167

settag | pv, i01005p00e0168

settag | pv, i01005p00e0169

settag | pv, i01005p00e0170

settag | pv, i01005p00e0171

settagc | pv, tjsetautoman,0

rtn

get_sta_mode Get the station mode return as mode for send_sta_tag

Synopsis:

"C"

#include <FastTag.h>

get_sta_mode(int index)

Arguments:

index - tag index

Return Value:

0 local manual

1 local auto

2 local cascade/ration

3 computer manual

4 computer auto

5 computer cascade/ratio

Description:

The "get_sta_mode" function will return the station mode using the passed tag index.

FSsend_tag_value Sets the tag using the passed tag index, value, and operation parameter

Synopsis:

"C"

#include <FastTag.h>

FSsend_tag_value(int index, float value, char parm)

Arguments:

index - tag index

value - floating point target value

parm - the following parameters apply

RCM: 1 sustained reset

2 sustained reset

5 pulse reset

6 pulse set

DD 8 auto

4 manual

2 set

1 reset

MSDD: 8 auto

4 manual

0 ... 3 request state

Return Value:

0 - success

1 - error

Description:

The "FSsend_tag_value" function operates exactly the same as "send_tag_value" with the following exceptions:

Internal Digital and Internal Analog can set value at 500,000,000 tags per / second, instead of the usual 5 tags per second with send_tag_value.

This function work with station tags.

FSget_tag_value Retrieves the current tag value and status from the LAN-90 PCV tag database using the passed tag index.

Synopsis:

"C"

#include <FastTag.h>

FSget_tag_value(int index, int pram, float *value, char *status)

Arguments:

index - tag index

parm - the following parameters apply

1 for PV (Process variable)

2 for SP (Setpoint)

3 for CO (Control Output)

4 for RI ( Ration Index)

*value - pointer to floating point storage for value

*status - pointer to integer storage for status of value.

The following list of all the status codes with description.

  Code:      Type Description:     
    0             No Alarm         
    1         Alarm ( Boolean)     
    2           Bad Quality        
    3          Out of service      
    4               High           
    5               Low            
    6          High Deviation      
    7          Low Deviation       

Return Value:

0 - success

1 - error

Description:

The "FSget_tag_value" function operates exactly the same as "get_tag_value" with the following exceptions:

Internal Digital and Internal Analog can set value at 500,000,000 tags per / second, instead of the usual 5 tags per second with send_tag_value.

DRAWING NUMBERING SYSTEM:

Srini Komandur 29 March, 1994

drawing number -> d1 d2 d3 d4 d5 d6 d7 d8 (8 characters) where:

Scanning Configuration d1 = 0 to 9

0       no scanner                        
1       1st  scanner                      
2       2nd scanner                       
3       3rd  scanner                      
4       4th  scanner                      
5       5th scanner 1st off machine       
6       6th scanner 2nd off machine       
7       7th scanner 3rd off machine       
8       8th scanner 4th off machine       
9       9th scanner record book system    
        never happen                      

Grouping Aycronymn d2 d3 = 2 letters

al      Alarm                             
cd      Cross direction                   
dl      Data Logger                       
es      Event End of Scan                 
ev      Event Type                        
ez      Event Standardization             
gr      Grades                            
hw      Hardware General                  
md      Machine Direction                 
me      Menu, calls other frames          
mi      MIS TYPE                          
pa      Parameter Entry                   
pr      Profile Porfile Manager           
tr      Trend                             

Class d4 d5 = 00 = 2 letters

aq      Aqua pac                          
ch      Chemical                          
co      Coater                            
di      Diagnostic                        
dr      Dry end                           
ds      Dyna step                         
ga      Gas                               
ip      InfraPac                          
om      Off Machine                       
s1      Sensor type Basis Wt              
s2      Sensor type Moisture              
s3      Sensor type Caliper               
s4      Sensor type Ash                   
s5      Sensor type Gloss                 
sc      Scanner type                      
se      Sensor  type information          
sm      Steam                             
sp      Speed                             
st      Stock                             
tj      Therma Jet                        
to      Total                             
we      Wet end                           

Further Drawing Number Descriptor

d6 d7 d8

Revision Control:

/usr/sodgdwgs/QRCS

Reconstruct drawing, Check Out:

co +lock drawing.T t=/usr/sodgdwgs/QRCS

ship file.T

xrf drawing.dr

Note: A lock is put in place so no other person can work on the same drawing, while the drawing is checked out.

Replace Drawing in Lib, Check In:

ship file.dr

ci file.T t=/usr/sodgdwgs/QRCS

Impact Drawing List

New Dwg        Old Dwg       Description                                                 
0alsc001.dr    apalarm.dr    scanner alarm                                               
0cdds001.dr    dsmansl.dr    dyna step auto/manual control                               
0cdip001.dr    ipmansl.dr    Manual / Auto Zone Selection Infra Pac Frame 1              
0cdtj001.dr    tjmansl.dr    therma-jet auto/manual control                              
0dihw001.dr    ioboard.dr    MFP Hardware Input/Output Diagnostic frame                  
0dlto001.dr    dlogger.dr    Data Logger Frame                                           
0grto001.dr    grades.dr     grades selection                                            
0mds4001.dr    mdash.dr      md ash control                                              
0mdsm001.dr    mdsteam.dr    md steam control                                            
0mdsp001.dr    speed.dr      Speed Draw frame                                            
0mdst001.dr    mdstock.dr    md stock control                                            
0mdto001.dr    mdctrl.dr     md control bw/moi/ash/speed                                 
0mdwe001.dr    papgr1.dr     Control Frame, Headbox YFY's headbox                        
0mdwe002.dr    mdwet.dr      headbox control                                             
0medr001.dr    profsel.dr    Profile Selection Menu Selects PROMGR displays 2            
0medr002.dr    profiles.dr   Profile Selection Menu Selects PROMGR displays 1            
0meds001.dr                  Impact Dyna Step Menus                                      
0meip001.dr    infrapac.dr   Impact Infra Pac Menu Selection                             
0mese001.dr                  Impact Sensor Selection Menu                                
0mesc001.dr    diagstic.dr   Impact Scanner Menu Only                                    
0mesp001.dr                  Impact Speed Selection Menu                                 
0metj001.dr    thermjet.dr   therma-jet menu                                             
0meto001.dr    impmenu.dr    Impact Main Menu....                                        
0meto002.dr                  Impact Main Diagnostic Menu                                 
0meto003.dr    utilmis.dr    MIS Menu to select different MIS frames.                    
0meto004.dr    trends.dr     Impact Trend Selection Menu                                 
0meto005.dr    cdctrl.dr     CD Control Selection Menu Only                              
0meto006.dr    mdcontrl.dr   md control menu to select steam/headbox/stock               
0mito001.dr    rptenab.dr    report enable /disable                                      
0mito002.dr    reelsumm.dr   reel summary                                                
0prto001.dr    proflim.dr    Span(s) Selections for PROMGR displays                      
0trsm001.dr    stmtrend.dr   Steam Section, Pressure Trends                              
0trsp001.dr    spdtrend.dr   Machine Speed Trend Plot                                    
0trto001.dr    trend4.dr     Stock Cons and Stock Trend Plot                             
1alsc001.dr                  1st scanner Aplus Scanner Alarms                            
1disc001.dr    apdig.dr      1st scanner diagnostics                                     
1dise002.dr    dsample.dr    1st scanner dynamic sample measurement                      
1essc001.dr    scanavg.dr    1st scanner scan avg/dev                                    
1evsc001.dr    reelscan.dr   1st scanner control                                         
1ezse001.dr    stdz.dr       1st scanner sensors standardization displays                
1mese001.dr    sensors.dr    1st scanner sensor menu (gr/stdz/calib/par)                 
1pasc003.dr    scanpars.dr   1st scanner parameters                                      
1pase001.dr    senspars.dr   1st scanner BW/MO/CAL/ASH Sensor Slopes/Intercepts          
1pase002.dr    senscalb.dr   1st scanner sensor parameters                               
1trse001.dr    stdtrend.dr   1st scanner sensors standardization trends diagnostic 1     
1trse002.dr    stdtrend.dr   1st scanner sensors standardization trends diagnostic 2     
1trse003.dr    stdtrend.dr   1st scanner sensors standardization trends diagnostic 2     
2alsc001.dr                  2nd scanner Scanner alarms                                  
2disc001.dr                  2nd scanner Scanner Diagnostic                              
2essc001.dr    2scanavg.dr   2nd scanner scan average/deviation                          
2evsc001.dr    2ndscan.dr    2nd scanner control                                         
2ezse001.dr    2stdz.dr      2nd scanner sensor standardization data                     
2pasc001.dr    2scnpars.dr   2nd scanner parameters                                      
2pase001.dr    2nd scanner   BW/MO/CAL/ASH Sensor Slopes/Intercepts                      
2pase002.dr                  2nd scanner sensor parameters                               
2trse001.dr                  2nd scanner sensors standardization trends diagnostic 1     
2trse002.dr                  2nd scanner sensors standardization trends diagnostic 2'    
2trse003.dr                  Reel Scanner's sensors standardization trends diagnostic 2  

Password Setup:

{ <PLEASE READ ALL DOCUMENTATION FILES PRIOR TO IMPLEMENTATION OF THIS } >

{ <PASSWORD ADMINISTRATION SYSTEM } >

<Installation Instructions For Existing PASS Users >

1. Review ALL documentation and make note of any changes

2. If you are about to perform this procedure when your users are online,please tell them not to login/logoff until this procedure is completed.

3. Login as your system administrator (User 255.255)

4. Bring down all of your password administrators using the break command.

5. Copy new versions of password utilities to your commands directory or directories if you are on a net

6. On your primary password administrator machine rename the old password file to password.old.chattr /config/password n=password.old

7. Start up the new password administrator as before except add the create option

eg. passadmin +p create l=4 &

8. Start up new authorize utility. Since you are now working with an empty password database, any password may be entered at the prompt.

9. Create the first user in the database. Remember your first user created must the system administrator (User 255.255). The name of the user MUST be the same as what you are currently logged in as (from step 2). Complete the password entry and add the record.

10. Use the Batch facility of authorize to load in your old password database by selecting the batch menu item (B) and entering the name of your old password file in (/config/password.old).

11. Exit the authorize utility

12. Inform your users that they are now free to login/logoff as they please

<FOR NETWORK USERS >

13. Issue the following command to change the primary password administrator to read only.

authorize -w

14. Replace the old password files used by the secondary and tertiary administrators with the new one using the cp command.

15. Issue the following command to change the primary password administrator back to read/write mode.

authorize +w

16. Restart your secondary and tertiary administrators

<Installation Instructions For NEW PASS Users >

1. Read and understand all the documentation included with this system. Since PASS is in its BETA phase, you don't have printed manual pages for the utilities. The file pass_util.doc contains the documentationfor the PASS utilities. The file pass_lib.doc contains the documentation for the library interface to the password administrator. Please distribute those portions of these documents which apply to your users.

2. Please tell them not to login/logoff until this procedure is completed. For first time installation it is probably best that this be done after hours. This way you can install the new password system, and test it without interfering with your users work, and most won't even notice the difference.

3. Login as your system administrator (User 255.255)

4. Copy all of password utilities to your commands (/cmds) directory or directories if you are on a network.

5. If you are installing this system on a network, select one node as your primary administrator. You can also select two other nodes as your secondary and tertiary administrator nodes. In all cases, each machine which is to run the password administrator must have a local hard disk and must have the timer started prior to starting up the administrator. (see your utilities reference for information on the timer command).

6. Start up the new password administrator. Please refer to the documentation on the invocation of the passadmin command for the command line options (pass_util.doc). The example below starts up the administrator using drive 3 to hold the password database with 4 login attempt allowed per login invocation and creates the database.

eg. passadmin +p create d=3 l=4 &

7. Next start up authorize utility by simply typing 'authorize'. Since you are now working with an empty password database, any password may be entered at the password prompt. For directions on the use of theauthorize utility please refer to the documentation contained in pass_util.doc

NOTE: If you would like all your users to have password expiry dates on their entries invoke authorize with the "e=expiry_period" option.

8. Create the first user in the database. Remember your first user created must the system administrator (User 255.255). The name of the user MUST be the same as what you are currently logged in as (from step 3). Complete the password entry and add the record.

9. Use the Batch facility of authorize to load in your old password database by selecting the batch menu item (B) and entering the name of your old password file in (/config/pass). This will create new password entries for all users in your existing pass file. You will still need to go through each record of the database to complete the additional fields (eg. Real Name, phone num, extension, login restrictions, etc) which aren't found in the old password file.

10. Exit the authorize utility.

11. Inform your users that they are now free to login/logoff as they please.

12. Add the necessary command to your sys.init file for your primary node. You will not use the 'create' keyword in the administrator invocation and make sure the timer administrator is started before the password administrator.

<FOR NETWORK USERS >

13. If you wish to run more than one password administrator in your network complete the following steps.

14. Issue the following command to change the primary password administrator to read only.authorize -w

15. Select your secondary and tertiary administrator nodes, remembering that these nodes must be running the timer and must have their own local hard disks.

16. Copy all of password utilities to your commands (/cmds) directories used on your secondary and tertiary nodes.

17. Copy the /config/password file created on your primary administrator over to the /config directories used on your secondary and tertiaries local disks.

18. Start up your other administrators. Since they are not the primary you will NOT specify the +primary option and you may use the r=refresh_period to indicate to the administrators how often you would like them to update their databases from the primaries.

19. Issue the following command to change the primary password administrator back to read/write mode.

authorize +w

20. Update the sys.init files for your secondary and tertiary nodes to invoke the password administrators at boot time. Make sure the timer administrator is started before the password administrator and that the disk which contains the password administrator is mounted.

PLEASE NOTE: The options to passadmin have changed! Please read docs. 4 New Library Calls added authorize now has command line option to turn write on/off the primary administrator for backup purposes All password utilities modified to use library calls (incl. login)

We finally made it through. Many of you have heard discussions on QUICS about the new password system we have been working on for a while now.It replaces the existing mechanism of security under QNX but is probably advisable to keep your old password file around as a backup mechanism. PASS has spent a long time in its beta test phased as it took time to evolve and we wanted to make sure it was reliable before releasing it on QUICS. We know how annoying it can be to not be able to even login! :->

As part of the new system, a library of access functions is also provided. It will be possible to access the data contained within the administrator for your application programs use. There are thirteen (were nine) different functions, enough functionality to write your own, system specific, maintenance utility if you like! Below is a detailed list of the components

of PASS.

READ.ME - your looking at it :->

pass_util.doc - utility documentation (PLEASE READ CAREFULLY)

pass_lib.doc - library routine documentation

authorize - full screen password database maintenance facility

finger - just like UNIX, general inquiry function

pswd - password changing utility

passadmin - the actual password database administrator

login - revised login routine to be used

pwd.o - object module containing PASS interface routines.

pwd.h - include file to go along with the library routines

sample.c - sample program which uses some of the interface routines.

note: You will have to change the dummy id's and passwords

used for authentication in some of the calls.

(see pass_lib.doc)

makefile - file to create sample program

If you have any problems, questions or comments please do not hesitate to contact me at Quantum or via QUICS (in the utilities conference). You can also send me private mail. My userid is 'jeff'.

Thank You

Jeffrey George

ADDPWENT - Add new record to the password database

Syntax:

int *addpwent( new_entry, auth_user, auth_pass )

struct passwd *new_entry;

unsigned char *auth_pass;

char *auth_user;

Arguments:

new_entry pointer to structure containing new user's data

auth_user name of user authorizing the addition

....auth_pass password of user authorizing the addition

Return Value:

Zero on success or a positive integer error number

Description:

ADDPWENT will add a new record to the password database. It requires a pointer to a structure containing the new entry information. It also requires the name of a user and the corresponding password to authorize the addition. The password administrator must be running in the background. For further information on adding password entries refer to AUTHORIZE in your utilities manual. As an extra measure of security, it is recommended that prior to exiting your application which uses this function, that the string containing the authorizing user's password be cleared as well as the structure containing the added user's entry (since it contains its password as well).

The structure of a password entry and error codes are found in

/lib/pwd.h.

See Also:

GETPWUID SETPWENT

GETPWNAM ENDPWENT

GETPWENT VRFPWENT

CHGPWENT DELPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

CHGPWENT - Change an existing record in the password database

Syntax:

int chgpwent( chg_user, new_entry, authg_user, auth_pass, chg_flag )

struct passwd *new_entry;

unsigned char *auth_pass;

char *chg_user, *auth_user, chg_flag;

Arguments:

....chg_user pointer to buffer containing login id of record to change

new_entry pointer to structure containing changed data data

auth_user name of user authorizing the change

....auth_pass password of user authorizing the change

....chg_pass flag indicating the password field is to be updated as well

Return Value:

Zero on success or a positive integer error number

Description:

CHGPWENT will change the contents of an existing password entry. It requires a a pointer to an array of characters containing the name of the user entry to change as well as pointer to a structure containing the new entry information. It also requires the name of a user and the corresponding password to authorize the change request. If the password contained in the new structure is to become the new password for the user entry, the chg_flag must be set to TRUE (1). The password administrator must be running in the background. For further information on changing password entries refer to AUTHORIZE in your utilities manual. As an extra measure of security, it is recommended that prior to exiting your application which uses this function, that the string containing the authorizing user's password be cleared.

The structure of a password entry and error codes are found in

/lib/pwd.h.

See Also:

GETPWUID SETPWENT

GETPWNAM ENDPWENT

GETPWENT VRFPWENT

ADDPWENT DELPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

DELPWENT - Delete a record from the password database

Syntax:

int *delpwent( del_user, auth_user, auth_pass )

unsigned char *auth_pass;

char *del_user, *auth_user;

Arguments:

....del_user pointer to buffer containing login id of record to change

auth_user name of user authorizing the deletion

....auth_pass password of user authorizing the deletion

Return Value:

Zero on success or a positive integer error number

Description:

DELPWENT will delete an existing record from the password database. It requires a pointer an array of characters containing the name of the user to delete. It also requires pointers to the name of a user and its corresponding password to authorize the deletion. The password administrator must be running in the background. For further information on removing password entries refer to AUTHORIZE in your utilities manual. As an extra measure of security, it is recommended that prior to exiting your application which uses this function, that the string containing the authorizing user's password be cleared.

The structure of a password entry and error codes are defined in

/lib/pwd.h.

See Also:

GETPWUID SETPWENT

GETPWNAM ENDPWENT

GETPWENT VRFPWENT

CHGPWENT ADDPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

ENDPWENT - Terminate password database inquiry session

Syntax:

struct passwd *endpwent()

Return Value:

NULL

Description:

ENDPWENT will terminate a password database inquiry session. Once any of the password inquiry functions are called successfully a virtual circuit to the password database may have been created if the password administrator was running on a remote node. In this case, the virtual circuit created will be removed to recover the allocated system resources. To use the password database routines, the password administrator must be running in the background.

See Also:

GETPWENT GETPWNAM

GETPWUID SETPWENT

VRFPWENT ADDPWENT

DELPWENT CHGPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

GETPWENT - Get next record from the password database

Syntax:

struct passwd *getpwent()

Return Value:

Pointer to static password structure or NULL on error.

Description:

GETPWENT will return a pointer to a structure containing the next record in the password database. If there are no further records to read from the database (EOF) a NULL pointer will be returned. If the password administrator cannot be located to service the request, a NULL pointer will also be returned. To use the password database routines, the password administrator must be running in the background.

The structure of a password entry and error codes are defined in

/lib/pwd.h.

See Also:

GETPWUID SETPWENT

GETPWNAM ENDPWENT

VRFPWENT ADDPWENT

CHGPWENT DELPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

GETPWNAM - Get the password entry for a specific Login ID

Syntax:

struct passwd *getpwnam( login_id )

char *login_id;

Arguments:

login_id pointer to a buffer contained the login id of the password entry to locate

Return Value:

Pointer to static password structure or NULL on error.

Description:

GETPWNAM will return a pointer to a structure containing the record matching a specific Login ID. If the desired record does not exist of if the password administrator could not be located a NULL pointer will be returned. To use the password database routines, the password administrator must be running in the

background.

The structure of a password entry and error codes are defined in

/lib/pwd.h

See Also:

GETPWENT SETPWENT

GETPWUID ENDPWENT

VRFPWENT ADDPWENT

DELPWENT CHGPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

GETPWUID - Get the record with the matchin UID from the password database

Syntax:

struct passwd *getpwuid( uid )

unsigned uid

Arguments:

uid unique password entry user id

Return Value:

Pointer to static password structure or NULL on error.

Description:

GETPWUID will return a pointer to a structure containing the first record in the password database matching the specified uid. If a matching record is not found or if the password administrator could not be located, a NULL pointer will be returned. To use the password database routines, the password administrator must be running in the background.

The structure of a password entry and error codes are defined in

/lib/pwd.h.

See Also:

GETPWENT SETPWENT

GETPWNAM ENDPWENT

VRFPWENT ADDPWENT

DELPWENT CHGPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

SETPWENT - Rewind password database to first record

Syntax:

struct passwd *setpwent()

Return Value:

NULL

Description:

SETPWENT will reset the record pointer to the password database to the first record in the password database. This function should be used in conjunction with the GETPWENT function. To use the password database routines, the password administrator must be running in the background.

See Also:

GETPWENT GETPWNAM

GETPWUID ENDPWENT

VRFPWENT ADDPWENT

DELPWENT CHGPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

VRFPWENT - Verify a Login ID and Password

Syntax:

struct passwd *vrfpwent( login_id, password, flag)

char *login_id;

unsigned char *password;

....unsigned char flag

Arguments:

login_id Pointer to a buffer contained the login id of the password entry to locate

password Pointer to a buffer contained the password of the login id to authenticate.

....flag Flag to indicate whether the last login time should be

updated. (1=Yes update, 0=No)

Return Value:

Pointer to static password structure or NULL on error.

Description:

VRFPWENT will return a pointer to a structure containing the record matching a specific login id if the corresponding password verifies successfully. If the authentication of the login id fails, or the password administrator could not be located a NULL pointer will be returned. To use the password database routines, the password administrator must be running in the background. As an extra measure of security, it is recommended that prior to exiting your application which uses this function, that the string containing the password being verified be cleared.

The structure of a password entry and error codes are defined in

/lib/pwd.h.

See Also:

GETPWENT SETPWENT

GETPWUID ENDPWENT

GETPWNAM ADDPWENT

DELPWENT CHGPWENT

CTRLPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

CTRLPWENT - Send a login control request to Administrator

Syntax:

int ctrlpwent( request, grp_or_nid, tty, control, auth_user, auth_pass)

unsigned char request;

unsigned grp_or_nid;

int tty;

unsigned char control;

char *auth_user;

unsigned char *auth_pass;

Arguments:

request send a node/tty control request or a group control request (CNTRL_NID or CNTRL_GROUP)

grp_or_nid node Id or Group ID to be affected

tty tty number or -1 for whole node. (CNTRL_NID requests only)

control whether to enable or disable the control restriction

auth_user name of user authorizing the control restriction

auth_pass password of user authorizing the control restriction

Return Value:

Zero on success, positive value on error. See /lib/pwd.h for error values.

Description:

CNTRLPWENT may be used to send login control restriction requests to the password administrator. It is possible to disable logins on a whole node, only specific tty's of a node, or of a group of users sharing the same Group ID. It is also possible to remove a login restriction that has been previously placed. These functions can only be authorized by a super user (Group Id 255). Definitions of the constants CNTRL_NID, CNTRL_GROUP, ENABLE and DISABLE may be found in the file /lib/pwd.h. To use the password database routines, the password administrator must be running in the background. As an extra measure of security, it is recommended that prior to exiting your application which uses this function, that the string containing the password being verified be cleared.

The structure of a password entry and error codes are defined in

/lib/pwd.h.

See Also:

GETPWENT SETPWENT

GETPWUID ENDPWENT

GETPWNAM ADDPWENT

DELPWENT CHGPWENT

VRFPWENT GET_GRP_CTRL

GET_NID_CTRL PSWD_SET_MODE

GET_GRP_CTRL - Get group control restrictions form the Administrator

Syntax:

int get_grp_ctrl( buffer )

unsigned char *buffer;

Arguments:

buffer Buffer of 255 characters to receive group control information

Return Value:

Zero on success, positive value on error. See /lib/pwd.h for error values.

Description:

GET_GRP_CTRL may be used to query the password adminsitrator for the login restrictions currently placed on all groups. The requested information is returned in the passed buffer. Each unsigned char represents the control flag for the corresponding group. A positive value represents logins disabled for that group. A value of zero represents no login restrictions on the group. To use the password database routines, the password

administrator must be running in the background.

The structure of a password entry and error codes are defined in

/lib/pwd.h.

See Also:

GETPWENT SETPWENT

GETPWUID ENDPWENT

GETPWNAM ADDPWENT

DELPWENT CHGPWENT

VRFPWENT CTRLPWENT

GET_NID_CTRL PSWD_SET_MODE

GET_NID_CTRL - Get Node/Tty control restrictions form the Administrator

Syntax:

int get_nid_ctrl( nid_report )

struct nid_tty_info *nid_report;

Arguments:

nid_report pointer to a structure containing the node/tty control

information

Return Value:

Zero on success, positive value on error. See /lib/pwd.h for error values.

Description:

GET_NID_CTRL may be used to query the password adminsitrator for the login restrictions currently placed on any node(s) and/or tty(s) in a network managed by the password administrator. . The requested information is returned in the passed structure, the definition of which may be found in the file /lib/pwd.h. The disabled node/tty list is an array of unsigned characters which breaks down as follows:

Number of bytes/node = ( Number of Ttys /8 ) +1

Each tty for each node is represented by a single bit. If the bit is set (1) the tty has had login restriction placed upon it. If the bit is clear (0) no login restrictions have been applied. To find out about any particular tty in a network the following formula is used to calculate the offset and bit number into the array of data:

for node X, tty Y [X]$ttyY

offset = (X * bytes/node) + (Y/8)

bit_no = Y % 8

To use the password database routines, the password administrator must be running in the background.

The structure of a node/tty report entry entry and error codes are defined in

/lib/pwd.h.

See Also:

GETPWENT SETPWENT

GETPWUID ENDPWENT

GETPWNAM ADDPWENT

DELPWENT CHGPWENT

VRFPWENT CTRLPWENT

GET_GRP_CTRL PSWD_SET_MODE

PSWD_SET_MODE - Set password administrator file access mode

Syntax:

long pswd_set_mode( mode, auth_user )

unsigned char mode;

char *auth_user;

Arguments:

mode The file access mode to set the password administrator to (READ_ONLY or READ_WRITE)

auth_user The name of the user_id authorizing the mode change request

Return Value:

Zero on failure, otherwise a long value where the top eight bits represents the node number where the administrator is running, and the bottom eight bits represents the drive number it is using on its node.

Description:

PSWD_SET_MODE may be used to send a message to the password administrator to select the mode that it holds the password database file open with. By default, the PRIMARY password administrator keeps this file open for READ/WRITE. This means the password data base is unavailable for backup purposes. By sending the primary a message to re-open the file for READ-ONLY mode, it becomes available for backup. Once a backup has been completed a message may be sent to tell the primary to switch back to READ/WRITE MODE again. NOTE: While the password database file is open for READ_ONLY mode, no changes to the password databases can be made. To use the password database routines, the password administrator must be running in the background.

The definition of the mode flags READ_ONLY and READ_WRITE may be found in

/lib/pwd.h.

See Also:

GETPWENT SETPWENT

GETPWUID ENDPWENT

GETPWNAM ADDPWENT

DELPWENT CHGPWENT

VRFPWENT CTRLPWENT

GET_GRP_CTRL GET_NID_CTRL

AUTHORIZE - Password administrator maintenance utility

Syntax:

authorize [user_id] [l=login_file] [a=add_shell_script]

[e=expiry_period] [c=config_file] [u=user_id]

[p=password] [[+|-]write]

Options:

user_id - Name of user to edit initially

l=login_file - Name of default login file (see Add)

a=add_shell_script - Script file to execute when adding users (see Add)

e=expiry_period - Default password expiry period to use (see Glossary)

c=config_file - File containing password entry defaults (see Add)

u=user_id - Name of user to authorize password requests (default is your own user name)

p=password - Authorizing user name's password

[+|-]write - toggle write on and off for backup purposes

Description:

AUTHORIZE is a utility that allows a system administrator to manage the password database. To be a system administrator your group or member number must be 255, otherwise attempts to run the utility will fail. Before entering the utility your password must be entered and verified. If the database has just been created, any password will suffice to get into authorize providing you are the super user (group and member 255). The first entry created in the password database must be a super user. Super users (group 255) may add, delete, and modify any password entry regardless of the entry's group and member number. Group leaders (member 255) may add, delete and modify passwords from only within the same group. All other operations available through the authorize utility are permitted without group leader or super user distinction. If at any time you wish to abort a selected operation, press the ESC key.

ÆViewu Add Delete Edit Control Report Batch Quit

Login Id : Grp,Mem : ( , )

Password : Status :

Directory :

Command :

User Name : Alt Grp,Me: ( , )

Phone # : Pswd Expy :

Phone Ext : Pswd Set :

Login Nids: Login Time:

Login Ttys: Terminal :

Login Days: # Logins :

Login Hrs : # Failures:

The full screen interface (shown above) allows for quick and easy inquiries, changes, additions, etc. It consists of a data entry/viewing area, a single options menu across the top of the screen, and a status line where informative messages/errors will be displayed. The fields which make up a password entry are described in the glossary. Each option may be selected by using the arrows keys to highlight the desired option and pressing <Enter> to select it OR by typing the first letter of the desired option. These options provide the ability to view user entries, add new users, delete existing users, modify or update an existing user's entry. AUTHORIZE also provides functions to manage login control, create simple reports, and to merge ascii files containing password entries into the password database. It is also possible to merge other password databases created by password administration system.

View

You will be prompted for a user name. A request to the password administrator is sent asking for the entry for the selected user. If the user exists, the entry will be displayed in the viewing area. If the user does not exist, or if an internal error of some sort interferes with the inquiry process, an appropriate message will be displayed at the bottom of the data viewing area.

Add

You will be prompted for the name of the user to be added to the password database. An editing screen will be displayed with many of the fields set to default values. If an alternate set of defaults is desired (system specific), a file containing the defaults to be used may be passed to authorize through the command line option c=config_file. The config file format is simple. It consists of three lines of text: default directory, default initial command, and password expiry period. Although the password for the new entry is not displayed, it is initialized to be the same as the user name. The data displayed may be edited and added to the password database by pressing the large <Grey Plus> key on the numeric keypad.

A super user (group 255) may add an entry of any group and member number whereas a group leader (member 255) may add entries only to the same group. When creating a new database the first user to be added must be a super user.

Once the new entry has been created, the authorize utility will prompt if it should create the new user's directory unless the directory already exists. If 'Yes' is selected, the add function will attempt to add the new directory and set ownership for the directory to be that of the new user. As well, if the default command that is executed at login time is left as the supplied default, it will ask if the default .login file is to be copied to the new user's home directory, and ownership set correctly. By default this file should be located in the /config directory and should be called .login although the file to be used may be specified through the l=login_file command line option.

Having completed the required password administration details, other system specific commands may be required to complete the addition of a new user to your system (e.g. create mailbox). An executable shell script may be automatically invoked when adding a new user. The name of the shell script to execute may be passed through the command line option a=add_shell_script. This script will be subsequently executed for each user being added and passed four arguments from authorize. These are the name of the user, the group number, the member number, and the home directory. These may be referenced within the shell script as shell arguments #1, #2, #3 and #4 respectively.

Delete

You will be prompted for the user name to delete. If a valid user name is entered, the entry for that user will be displayed in the viewing area and you will be required to verify that the displayed entry is indeed the entry which you wish to delete. A super user (group 255) may delete any entry within the password database whereas a group leader (member 255) may delete only users from within the same group. It is important to note that it is impossible for ANY user to delete their own password entry.

Edit

You will be prompted for the user name of the entry you wish to modify. An editing screen will be displayed with each field, except the password, holding the current entry within the database. The required changes are then performed. Once all the desired modifications are complete, they may be put into effect by pressing the large plus key '+' on the numeric keypad to accept the changes. A super user (group and member 255) may modify any password entry within the database whereas a group leader (member 255) may modify only users in the same group.

Control

The login Control option allows the system administrator to enable or disable logins for selected individuals, individuals of a specific group, or all groups except super users. As well, login control can be used to enable or disable logins on a particular node and/or port number (tty). Having selected the Login Control option from the menu, a secondary menu will be displayed offering five other options.

Node User Group All Return

If the Node sub-option is chosen, the node and tty number

where logins are to enabled or disabled must be entered. All

ports on a given node may be enabled/disabled or individual

port numbers (tty's) may be selected. The disabling of a

given node and port does NOT apply to super users.

If the User sub-option is chosen, the user name of the

password entry to enable or disable must be entered. A non-

existant password entry will produce an error and the list of

sub-options will be displayed again.

If the Group sub-option is chosen, the group number to enable

or disable must be entered. This can be a number between 0

and 255. Entering a group number of 255 will disable all

groups except for super users.

If the All sub-option is chosen, all users except for super

users may be enabled or disabled. This is the same as

selecting the group option and selecting group 255.

Once the desired sub-option has been selected, and additional information provided, one further question is asked: whether or not the specified case is to have its login ability enabled or disabled. To select which action is be taken, either press the first letter of the desired action or highlight your choice with the arrow keys and press <Enter> to confirm.

Report

The report function allows the system administrator to create reports on the contents of the database. It also allows the system administrator to determine which group numbers and which nodes/ttys have had logins disabled. To obtain reports on the contents of the database, the 'User' sub-option of report is selected. To list the groups which have been disabled select the 'Groups' sub-option. To list the nodes/ttys which have been disabled, the 'Nodes' sub-option should be selected.

When generating a Users report, a parameter selection area will be displayed containing default data selection parameters. The default selection would choose all active password entries. The reports may be displayed on a terminal, sent to a printer or other such device, or written to a file.

+--------------------------------------------------------------------------+

+--Selecting----------<Space> to change, <Enter> to select---+

Report Type : LONG

Status : ACTIVE

Grp,Mem : ( * , * )

Logged In Since: -Not Set-

Expired Entries: NO

Reset Log Count: NO

Set Pswd Update: NO

+-Press <Grey Plus> to accept, <Esc> to reject--------------+

+-----------------------------------------------------------------+

As you move through the various parameters, a brief explanation to their effect is displayed just below the entry box. Each is described below in greater detail:

Report Type Permitted values here are Long or Short. A short

report simply lists the user name of each password entry

andthe group and member number. A long report will

display allthe information contained in the password

database for each password entry, except the password. The

Batch report will write the minimum number of fields

necessary to create a password which can be used by the

Batch function. This allows the system administrator to

dump the contents of the password database into a form

which can be used to subsequently reload a newly

created database.

Status Permitted values are Active, Inactive or All. If

active is chosen, only those password entries whose current

status is active will be selected. If inactive, only inactive

entries are selected. If all is chosen, both active and

inactive entries are selected.

Grp,Mem With these two fields, password entries may be

selected on the basis of the group and/or member number. An

asterisk in these fields indicates that all group and member

numbers are acceptable. Thus, all members of a specific

group may be selected by entering a group number and then

leaving the member number as an asterisk.

Logged In

Since This field allows the selection of users from the data

base that have NOT logged on since the specified date.

This selection provides the system administrator with

information as to how many inactive password entries are

currently stored in the password database. The date

specification should be entered as dd-mmm-yy.

Expired

Entries Permitted values are Yes or No. This final selection

parameter will determine whether or not ONLY password

entries which have expired are included. If this value is

set to 'No', password entries which have expired will be

included in the report set. If 'Yes', ONLY those password

entries which have expired will be selected from the

password database.

Reset Log

Count This field allows the number of logins to be reset

back to zero for those password entries which match the

retrieval specification. This might prove useful to

determine how many times a group of users log in over a

specific time period.

Set Pswd

Update This field sets a bit in the entries status value

for those password entries which match the retrieval

specification. This will force the user owning the

entry to change his/her password the next time they

login. This feature allows the system administrator

to force his users to change their passwords and thus

decreasing the chance of illegal entry.

Having filled in the selection parameters to gather data from the password database, the actual report generation is ready to begin. To generate the report, press the large <Grey Plus> key on the numeric keypad.

Once the report generation sequence has been initiated, the destination for the output must be selected. The output may be directed to either a file on disk, to a device, or to the terminal screen for immediate viewing. To display the report on the screen, simply press <Enter> at the 'Output to' prompt. To have the report data directed to a file or device, simply enter the name of the file or device the report is to be written in.

When generating a Groups or Nodes report no further information is required to retrieve the necessary information. If any groups or nodes/ttys have been disabled, they will be listed in ascending order, in columnar form, in the viewing area. If there aren't any groups or nodes/ttys disabled, a message will be displayed on the status line.

Batch

This function allows old style QNX password files to be merged with an administrated password database as well as password databases created with the password administration system. This facilitates converting the old password system to the new or merging of two or more separate databases. You will be prompted for the name of the file to be merged. If there are any password entries in the file which have the same Login ID as an existing entry in the new database, an error message will be displayed and an error log will be created for reference (pswd_batch_log).

Glossary:

Login ID 16-character unique user name identifying the password entry.

Password 16-character access code for login verification.

Grp,Mem Group and member number for the user (group, member). Values of 0-255 are permitted. Super Users are designated as users whose group and member number are both 255. Group Leaders have a member number of 255 and some other group number (other than 255).

UID Is a unique value assigned to each password record in the database. If a record is deleted and then subsequently re-used for a different user name, it will contain the original UID assigned to that record. It is essential that the system administrator remove or move offline any files owned by the previous user when their record is deleted.

Status Password entry status. An active entry will allow the designated user to login. Inactive entries are effectively non- existent. This field allows the system administrator to have temporary user entries that are particularly useful when an outside party requires remote access to the machine. Instead of having to create an account at the time, an existing account created for this purpose could be activated/deactivated quickly and easily. This status can be changed through either the Edit or Control functions.

Directory The home directory for the password entry. This should contain the full path to the user's home directory (including node number and/or drive number if necessary). If the add function is selected, the option to create this directory is provided.

Command The initial command to be executed upon logging in to the system. This is a free form field of up to 60 characters, the contents of which will be executed after logging in.

User Name For larger password databases, it is not always possible or desirable to use the first or last name of a user as the Login ID because more than one person has the same name. In cases where a Login ID might not be indicative of the true identity of the user, this 20-character field is useful. It is simply for informational purposes and is commonly access- able via the finger utility which provides an informative summary for a given Login Id.

Phone # In organizations with a large number of users, the phone number where a user might be reached can prove invaluable. It allows the password administrator to act as an inter-office phone directory as well. This is a free form 15-character field in which any textual information may be stored.

Phone Ext# This 4-character field may be used to provide a users phone extension.

Login Nids These two positive numbers represent the node number range, in a network, where the user has permission to login. These login restrictions are enforced ONLY if the 'Limited Access' field (in the Status sub-menu) is enabled.

Login Ttys These two positive numbers represent the tty number range, on a given node, where the user has permission to login. These login restrictions are enforced ONLY if the 'Limited Access' field (in the Status sub-menu) is enabled.

Login Days These two positive numbers represent the span of days in a week, when the user has permission to login. These login restrictions are enforced ONLY if the 'Limited Access' field (in the Status sub-menu) is enabled.

Login Hrs These two positive numbers represent the span of hours in a day when the user has permission to login. These login restrictions are enforced ONLY if the 'Limited Access' field (in the Status sub-menu) is enabled.

Alt Grp,Me Alternate group and member number for the user (group, member). Values of 0-255 are permitted. Super Users are designated as users whose group and member number are both 255. Group Leaders have a member number of 255 and some other group number (other than 255). This field is currently not in use by any of the password utilities. It is for future enhancement.

Pswd Expy This feature of the password administration system helps enforce system security. It allows the system administrator to select an arbitrary period of time after which the selected password entry will expire. The next time a password entry which has expired is used, a new password must be entered. This feature is optional. Based on the lifetime of the password in weeks, a value of zero indicates that the password entry will never expire. A maximum number of 255 weeks is permitted (1785 days or almost five years). To set a default password expiry period to be used when adding new users via batch or single add, invoke authorize using the command line option e=expiry_period.

Pswd Set This field contains the date when the password for this entry was last set. This field is used in conjunction with the password lifetime to determine when the password expires.

Login Time This field is maintained by the password administrator. It holds the date and time of the last time the user logged in.

Terminal This field is maintained by the password administrator. It contains the terminal and node number where the user last logged in. This could be useful for locating users on a network which is spread out in a large building (provided you have a system map).

# Logins Maintained by the password administrator, this field lists the number of times the user has logged in. Upon reaching approximately four billion, this value will restart at zero.

# Failures Maintained by the password administrator, this field list the number of times this user attempted to login but failed. Upon each successful login, this value is reset to zero

NOTE: The password administrator (PASSADMIN) must be running in the background.

See Also:

PSWD

FINGER

PASSADMIN

FINGER - Obtain information on users

Syntax:

finger [user_id]* [[+|-]verbose]

Examples:

finger gonzo

finger dtdodge gbbell bill danh luc grant jeff

finger dtdodge gbbell +v

Description:

FINGER provides an informative summary about specified user(s) including such information as the last login time and location used (node and tty number). It will also list the user's home directory and initial command which is executed at login time. There are optional fields which may have been set in the password database to include the user's real name, phone number, and extension.

FINGER will check for the existence of two files in the selected user's home directory. The first file is called .project. The first line contained in this file will be displayed. The second file is called .plan. The complete contents of this file will be displayed.

When more than one user is selected, a shorter informational summary is given UNLESS the +verbose option is specified. This shorter summary does not include the information within the two files in each user's home directory.

NOTE: The password administrator (PASSADMIN) must be running in the background

See Also:

PSWD

AUTHORIZE

PASSADMIN

PASSADMIN - A Password Administrator

Syntax:

passadmin [create] [d=drive] [+primary] [l=login_retries]

[r=refresh_period(minutes)] &

Examples:

passadmin d=4 & -Start the administrator as a backup using the password file on local drive 4.

passadmin create +p & -Start the administrator as the primary and create a new password file on default local drive 3.

passadmin create d=4 +p & - Start a primary password administrator creating a new password file on local drive 4.

Description:

PASSADMIN is the password administrator which manages the password database. It verifies passwords at login time, provides the system administrator with the necessary tools to add, delete, and modify password entries, and answers general inquiries about the entries stored within.

The password database is stored in the file /config/password. By default, this file will be expected to be on drive 3, although another drive may be specified using the d=drive option. The drive specified must be a local drive.

If it is desireable to have the login task die after a specified number of failed login attempts, the l=login_retries option has been provided. This feature would aid in the prevention of unauthorized remote access. After some number of unsuccessfull attempts, the login task would be killed and the incoming call disconnected, thus making the task of breaking in much more difficult for the offending intruder.

In the event that the machine running the password administrator should go down, a backup administrator should be ready to take over. It is possible to run a total of three administrators over a network. One should be designated as the primary administrator. The other two administrators will become secondary and tertiary administrators. Only the primary can effect changes upon its password database; the other two may only read their own local password files. The system administrator is responsible for keeping all backup password files up to date. In the event that the machine running the primary password administrator should go down, the secondary administrator will field all password requests. If the secondary should go down, the tertiary will take over. And finally, if all three administrators are not running, the original password system will be defaulted to.

For those running more than one password administrator in a net, it may be desireabe to have the secondary and tertiary administrators refresh their databases from the primary. It is possible to specify a time period, in minutes, indicating how often the secondary or tertiary administrator are to refresh themselves. This is accomplished through the r=refresh_period option. Since the primary file is open for read/write at all times the traditional backup mechanisms are not available.

The create option is used to initially create the password database. It must be used in conjunction with the +primary option, as only the primary password administrator may perform write operations.

NOTE: The password administrator registers its name so that it may be located on the network. It does this via the clearinghouse utility (see CLRHOUSE). If the clearinghouse is not in use it will attempt to register its name with the global name server. The primary administrator will register itself under the name of 'pass1'. Secondary and tertiary administrators will register themselves as 'pass2' and 'pass3' respectively.

See Also:

PSWD

FINGER

AUTHORIZE

PSWD - Change user password and optionally the initial login command

Syntax:

pswd [+initial_command | i=initial_command] [u=user_id]

Options:

i=initial_command - New initial command to be executed at login time. (Max 60 characters).

+initial_command - Prompt for new initial command to execute at login time.

u=user_id - Userid of password to change.

Examples:

pswd - Change current user's password only.

pswd +i - Change user's password and prompt for new initial command.

pswd i="ec .login" - Change password and initial command.

pswd u=Gonzo - Change password for user Gonzo.

Description:

PSWD changes a user's password and optionally the initial command which is executed at login time. Before changing any information in the password database your original password must be verified. As well, the new password must be entered twice to verify that no typographical errors have occurred during entry.

Another user's password and/or initial command may also be changed via the PSWD utility. Note that a Group leader (member number 255) may change the entry for any member of the his/her own group and that Super Users (group 255) may change any user's password and/or initial command. When another user's entry is being changed, the original password is not required but your own password must be verified before the operation will be completed.

NOTE: The password administrator (PASSADMIN) must be running in the background.

See Also:

FINGER

AUTHORIZE

PASSADMIN

125017.wps

ERRORS and ALARMS

The following outline errors and alrms which may be seen from user window 4. It is important, when reporting q problem, to note any and all alarms or errors as displayed from user window 4.

Error      Description                  Action                            
Number                                                                    
#13        Obsoleted                    Could not find the b8044 card     
                                        hardware configuration file.      
                                        The user should re-run netiicfg   
                                        to construct another              
                                        configuration file.               
#24        Must be run as a             netii.dev must be run in the      
           background task              background mode, '&' suffix       
#35        Could not set IR NO          QNX is previously using, or       
                                        something else is using the       
                                        interrupt number associated       
                                        with this configuration.          
#46        Could not set mask           QNX is not permitting b8044.dvr   
                                        to set the PIC mask.              
#57        Cannot attach signal port    All the signaling ports are       
                                        used; therefore interrupts        
                                        activate poll fiffo.              
#68        Unable to register name      b8044.dvr is not able to          
                                        register its' name as a server,   
                                        re-run netiicfg and change the    
                                        name. Or check "tsk" to see if    
                                        b8044 is already active.          
#79        Unable to Attach  Time Out   User signaling port are all       
           Port                         used up.  The settmr()            
                                        signaling cannot be done.         
#810       Interrupt Error Shut Off     Could not shut -off, mask         
                                        interrupts, during an             
                                        installation of a Superman        
                                        Client.                           
#911       Interrupt Error Turn On      Could not turn-on, UN-mask        
                                        interrupts, after an              
                                        installation of a Superman        
                                        Client.                           
#1012      Unable to Attach Time Out    Could not re-attach the           
           Port                         time-out signaling port after     
                                        the installation of a Superman    
                                        Client.                           

Error      Description                  Action                               
Number                                                                       
#10113     Cannot  Login Network        Could not find the b8044.dvr  task   
           Driver InitServerApp()       running on any QNX computer.         
                                        Check to see if  b8044.dvr is        
                                        running and the registered name      
                                        give.  Also, check the associated    
                                        name given in "ois10.cfg". .         
#10214     Unable to Attach Port        All the signaling ports are used     
           Instream InitServerApp()     up, no ports left to attach the      
                                        Session Layer's Instream handler.    
#10315     Unable to Attach Port        All the signaling ports are used     
           init_status_request()        up, no port  available for status    
                                        check.                               
#20416     Malloc Error                 No memory available to construct     
           add_session_setup()          working array within "qnxsetup".     
#30517     isetup ois10.cfg &           Impact's setup data task is not      
                                        running in the background.  Check    
                                        "sys.init.X"  for "isetup"..         
#40618Ala  No net id assigned for                                            
rm No      variable, re-check                                                
Network    "ois10.cfg".                                                      
ID                                                                           
#40719     Path for Id xxx Must Be      Wrong path  assigned for variable,   
           DEFAULT, MONITOR, EGLOBAL,   re-check "ois10.cfg".                
           IGLOBAL                                                           
#40820     No Path Defined for Id xx    No path  assigned for variable,      
                                        re-check "ois10.cfg".                
#40921     Type for Id# xx, Must Be     Wrong type  assigned for variable,   
           CHAR, FLOAT, ETC.            re-check "ois10.cfg".                
#41022     Id# xx Needs Type Assigned   No type  assigned for variable,      
                                        re-check "ois10.cfg".                
#41123     Id #d, Must have Set Class   Not a legal Net II CLASS.            
           of ORIGINAL, DUPLICATE, or                                        
           UNIVERSAL                                                         
#41224     Id #d, Must Have A Class     No Class Assigned to this Id         
#41325     Id #xx, Needs a El_size      No Element Size to variables for     
                                        Id#.                                 
#41426     Id #xx, Must Have            There is no definition for actual    
           Max_Count Assigned           mega array number of elements for    
                                        Id#.                                 
#41527     Malloc Error BuildP()        Out of memory while constructing     
                                        Dynamic Ptable.                      
#41628     Error, "net2.LastID = "NOT   Search range for netii Id(s) not     
           DEFINED"                     given within "osi10.cfg".            
#41729     Malloc Error Conversion      Out of memory for working            
           String InitialPtableSetup()  construction of Ptable conversion.   
#41830     Malloc Error Constructing    Out of memory for working            
           Ptable                       construction of Ptable conversion.   
           InitialPTableSetup().                                             
#41931     Error Ptable                 Error in Ptable Construction         
#42032     Duplication of Net ID x      Two or more variable assigned        
                                        within "ois10.cfg" have the same     
                                        NetII id.                            
#52133     Cannot Set Disaster Abort    "netii.dev"    The end point         
           main()                       abort() cannot be set for bad        
                                        exits.                               
  #522     Session Layer : session      Cannot add anymore variable to the   
           full                         NetII Session Layer.                 
  #523     Session Layer : send net     Stream being written out  to the     
           failed, ID X                 "b8044.dvr" is oversized.            
  #524     Malloc ALARM send_net()      Memory allocation error sending to   
                                        "b8044.dvr".                         
  #525     Session Layer : data base    Memory allocation, no more room      
           full                         for block allocation.                
#52634     Malloc ALARM present_out()   Memory allocation error              
  #527     present_out() - invalid      Writing to an area outside mega      
           output bounds, id x          array bounds.                        
  #528     present_out() - output       Writing to memory extending past     
           data over length, id x       heap available for this network id.  
  #529     present_out() - label not    Writing to a network id which has    
           found, idx                   never been installed or which has    
                                        been removed.  Configure             
                                        "ois10.cfg" for this network id.     
#53035     Malloc ALARM present_in()    Memory allocation error.             
  #531     present_in() - invalid       A node on NetII is writing to an     
           input bounds, id x           element outside the bounds given     
                                        within the mega array.               
  #532     present_in() - input data    Presentation Layer cannot cast       
           invalid type, id x           variables to desired type.           
  #533     present_in() - input error   A message, somehow, has arrived at   
                                        the presentation layer without a     
                                        PRESENT_STX                          
#53436     Unable to Register N2        Netii.dev already running            
           Server                                                            
#53537     Net32a.dev must be run in    Run Netii.dev with '&'               
           background.                                                       

NETWORK STREAMS -C-

NetII Presentation Server Interface(NETII.DEV) Section D

Introduction

The following document introduces the method for interfacing, between Impact's Net II Presentation Layer[38 and active Clients under ]QNX 2.15G[39.

Data exchanges will take place through a Impact Supplied, Dynamic Library, mount(ed) resident to the QNX operating system.]

Interface Functions

From within the Dynamic Library any Client can interface directly with the Presentation Layer. The following function will describe the use and direct effect of use.

N2fopen Open a Net Id, add P-Table element

N2fclose Remove Net Id, removes from P-Table

N2fupdate Updates NetII after sequential writes

N2fwrite Write to an element.

N2fread Read to an element.

N2fseek re-wind element

N2feof End of file

N2getc get char element

N2getw get word element

N2getf get a float

N2getd get a double

N2putc put char data

N2putw put word data

N2putf put float data

N2putd put double data

N2Login Connect user signal handler to Present Stream("client's name" ).

N2Image Connect user without signal handler to Present Stream(void).

N2AttachUser Connects N2Stream handler to Present Stream signal

N2DetachUser Removes users signal handler from N2Stream..

N2Logoff Removes client from Presentation Stream.

Function Calls

N2fopen

Function Opens a stream to Present

Syntax #include "qnxmsg.h"

N2FILE * N2fopen(

const unsigned netid,

const char *mode,

);

Upon error, network id not available, this function returns NULL, otherwise a ptr to N2FILE.

N2fopen opens a netid for modification. This has the affect of adding a network id to the Presentation Layers P-Table.

netid equals Impact's Net II id.

path equals Impact's data path.

Mode Description

r Open stream for reading

w Open stream for writing

r+ Open stream for reading and writing

w+ Open stream for writing and reading.

When a N2FILE is open with 'r' it can only be read. When opened with 'w' it can only be written to. When 'w+r' both reading and writing can be done.

When writing, data will only pass out Net II when an N2fupdate is done. Any of the N2fwrite, N2putx will not by itself write out the Net II network. After writing, an N2fupdate(index, count) must be completed.

// start from 0, index and preset to index

N2fseek(N2FILE *, index, SEEK_SET);

// write 0, through count just some consecutive

for(i = 0; i < count; i++) {

N2putw(i, N2FILE *);

if(N2feof) break;

}

// now write the new stuff to the network.

N2fupdate(index, count, N2FILE *);

N2Login

Function Provide Logon signaling ability to user

Syntax #include "qnxmsg.h"

int N2Login( char *UserName);

This function provides a way for input signaling whenever a Net II Id interrupts. The user passes his client name as the only parameter.

typedef Mode { read = 1, write 2 }MODE;

#define size_tN2 int

struct N2FILE {

int netid;

long streamposition;

MODE action;

D_TYPE type;

int ele_size;

int ele_count;

int streamsize;

int path;

void (*UserFunction)();

};

N2Logoff

Function Provide input signal to user

Syntax #include "qnxmsg.h"

int N2Logoff( void );

This function provide a normal shut-down, of normal removal, of this module from the N2 Presentation Server.

Should be used during a normal shutdown of the client if the client has previously logged in with N2Login("name").

N2AttachUser

Function Provide input signal to user

Syntax #include "qnxmsg.h"

int N2AttachUser(N2FILE *stream, ( void (*UserFunction)(unsigned id, int index, int count, N2FILE *ptr, unsigned path)) );

Prototyping for the user function is done in a C++ manner for explanation only.

This function provides input signaling to the user whenever a Net II Id interrupts. The user passes a pointer to his signaling function. Whenever an ID interrupts, the user function will be called with an int netid, int mega_index, int ele_count, and N2FILE *ptr. The user is free to read/write to the given N2FILE *ptr.

The user function is called when an read is detected from Impact's Presentation Layer. It is called with above parameters; where N2FILE *ptr is a copy of the Stream pointer the user has already opened. It is only a copy, not the original, therefore it does not need to be closed. Additionally, reading or writing to this copy *ptr does not affect the users originally opened N2FILE *ptr. When the user function is called, the streamposition is present to the correct position to begin reading from the mega array. (streamposition = mega_index * sizeof(Element)). where the mega_index is the currently interrupting mega array index.

This only can be done if the Client has N2Login("name"); not if the client has created an N2Image(void).

N2DetachUser

Function Provide input signal to user

Syntax #include "qnxmsg.h"

int N2DetachUser(N2FILE *stream );

This function removes the signaling capability for this N2FILE; write a (void *)0 into the Stream user function.

N2fseek

Function Repositions a N2FILE * on the Presentation stream

Syntax #include "qnxmsg.h"

int N2fseek( N2FILE *stream, long position, int whence);

N2fseek set the file pointer associated with the Present stream to a new position that is offset bytes from the file location given by whence. whence must be one of the following values, 0,1, or 2, which represents the following defines.

Whence Mega Pointer location

SEEK_SET (0) Stream beginning or 0 mega

array.

SEEK_CUR (1) Current pointer position

SEEK_END (2) End-of-file

The position given are in units of bytes, the user must maintain index + sizeof elements themselves.

This function returns a 0 if successful, otherwise it returns a non-0 number if the request to reposition failed.

N2fclose

Function Closes a stream to Present

Syntax #include "qnxmsg.h"

void N2fclose( N2FILE *stream);

This function actually closes a stream from the Presentation Layer. Additionally, this removes the associated signaling to the user's signal handler.

See: N2Login(...).

N2fupdate

Function Updates the Presentation stream based on last N2fwrite functions.

Syntax #include "qnxmsg.h"

N2FILE * N2fupdate( N2FILE *stream, int index, int count, unsigned path );

N2fupdate either WRITEs or UPDATEs the Net II Presentation layer with data given bounds.

index is the index into the mega array, this is in units of data elements, for count. Both count and index are in units of data elements NOT JUST BYTES. This is a non-stream function, actual index and count representing element size must be given.

This function exists only because it would be impractical to write out to Net II nodes after every N2putc......etc.

N2fwrite

Function Writes to the Presentation stream

Syntax #include "qnxmsg.h"

size_tN2 N2fwrite( const void *ptr, size_tN2 size, size_tN2 n, N2FILE *stream);

N2fwrite appends n items of data, each of length size bytes, to the given output file. Data written begins at ptr. The total number of bytes written is (n * size). ptr is the declarations is a pointer to any object. At completion, the Presentation stream point is incremented by the number of bytes written.

On successful completion, N2fwrite returns the number of items(not bytes) actually written. It returns a short count on error.

N2fread

Function Read from the Presentation stream

Syntax #include "qnxmsg.h"

size_tN2 N2fread( const void *ptr, size_tN2 size, size_tN2 n, N2FILE *stream);

N2fread reads n items of data, each of length size bytes, to the given output file. Data written begins at ptr. The total number of bytes read is (n * size). ptr is the declarations is a pointer to any object. At completion, the Presentation stream point is incremented by the number of bytes written.

On successful completion, N2fwrite returns the number of items(not bytes) actually written. It returns as EOF on error.

N2feof

Function Detects end-of-file on a the Presentation stream

Syntax #include "qnxmsg.h"

int N2feof(N2FILE *stream);

N2feof tests the given Presentation stream for an end-of-file-indication. Once the indicator is set, a read or write operation returns EOF until N2rewind or N2fseek operations are called.

N2feof returns a non-zero is the end of the Presentation stream is reached.

N2getc

Function Gets character from the Presentation stream

Syntax #include "qnxmsg.h"

int N2getc(N2FILE *stream);

N2getc returns the next character from the Presentation stream and increments the stream's pointer to the next character.

On success, N2getc returns the character read, after converting it to an int without sign extension. On end-of-file or error, it returns EOF.

Function Gets integer from the Presentation stream

Syntax #include "qnxmsg.h"

int N2getw(N2FILE *stream);

Remarks:

N2getw returns the next integer from the Presentation stream and increments the stream's pointer to the next word.

Return:

On success, N2getw returns the word read, On end-of-file or error, it returns EOF. Since EOF is a valid integer value N2feof should be used to detect an end-of-file indication.

Function Gets float from the Presentation stream

Syntax #include "qnxmsg.h"

float N2getf(N2FILE *stream);

Remarks:

N2getf returns the next float from the Presentation stream and increments the stream's pointer to the next float.

Return:

On success, N2getf returns the float read, On end-of-file or error, it returns EOF. Since EOF is a valid float(-1) value N2feof should be used to detect an end-of-file indication.

Function Gets double from the Presentation stream

Syntax #include "qnxmsg.h"

double N2getd(N2FILE *stream);

Remarks:

N2getd returns the next double from the Presentation stream and increments the stream's pointer to the next double.

Return:

On success, N2getd returns the double read, On end-of-file or error, it returns EOF. Since EOF is a valid double(-1) value N2feof should be used to detect an end-of-file indication.

Function Outputs a character to the Presentation stream

Syntax #include "qnxmsg.h"

int N2putc(int c, N2FILE *stream);

Remarks:

N2putc outputs the character c to the Presentation stream. The Presentation stream pointer is incremented to the next character. On success, N2putc returns the character output, c, on error N2putc returns an EOF.

Function Outputs an integer to the Presentation stream

Syntax #include "qnxmsg.h"

int N2putw(int c, N2FILE *stream);

Remarks:

N2putw outputs the integer c to the Presentation stream. The Presentation stream pointer is incremented to the next integer. On success, N2putw returns the integer outputted, c, on error N2putw returns an EOF. Because EOF is an allowed int, N2feof should be used to check bounds.

Function Outputs a float to the Presentation stream

Syntax #include "qnxmsg.h"

float N2putf(float c, N2FILE *stream);

Remarks:

N2putf outputs the float c to the Presentation stream. The Presentation stream pointer is incremented to the next float. On success, N2putf returns the float outputted, c, on error N2putf returns an EOF. Because EOF is an allowed float, N2feof should be used to check bounds.

Function Outputs a double to the Presentation stream

Syntax #include "qnxmsg.h"

double N2putf(double c, N2FILE *stream);

Remarks:

N2putd outputs the double c to the Presentation stream. The Presentation stream pointer is incremented to the next double. On success, N2putd returns the double outputted, c, on error N2putd returns an EOF. Because EOF is an allowed double, N2feof should be used to check bounds.

Function Checks the netii.dev server; returning signals from Net 2

Syntax #include "qnxmsg.h"

void N2CheckNet(void);

Remarks:

N2CheckNet polls the netii.dev server and call the user's attached signal handler for appropriate attached signal handler. This function is only necessary and should oly be used when N2Login() is used; and it should nver be used when N2Image() applies.

The user function attached is called for the number of interrupts since the last call of N2CheckNet().