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.
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.
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.
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.
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
-----------------------------------------------------------------------------
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.
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.
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.
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.
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.
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
%%
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 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
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,
]
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.
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.
#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.
#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 "
#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.
#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.
#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.
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
-----------------------------------------------------------------------------
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.
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.
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.
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.
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.
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.
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.
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.
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
%%
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.
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 TrendClass 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
{ <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
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-
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().