DataMonitor Programmer Notes

 Application Name:

 dataMon

 Development Path:

 rclCs/dataMon

 Wm_appl =

 

 Wm_winNum =

 

Contents

Form Information
Data Monitor = monRec
Data Communicator = monSend
GraphX = monGraphX
Utility Forms = monBrowse
Menus
Preferences
Data Structure Determination Algorithmn
 

Form Infomation


monRec
Label = "Data Monitor"
This form allows the operator to monitor a large number of variables. With numberous selection and editing tools, creating organized ists of variables is easy. This form allows the operator to view each variable in decimal and hexidecimal, and to monitor the how often a message is being received.
 
Objects
monRecSysObj
[0] File Menu Button -> local_fileMenuCB(0)
[1] Display Menu Button -> local_displayMenuCB(0)
 
monRecLabelObj
[0] #
[1] Variable Name
[2] Value
[3] Rate/Time
[4] File
 
monRecCmdObj
[0] Slider -> mon_sliderCB(100)
[1] Lower Index Range Input -> mon_rangeIndexCB(-100)
[2] Upper Index Range Input -> mon_rangeIndexCB(100)
[3] Move To Top Button -> mon_moveFarIndexCB(100)
[4] Move To Bottom Button -> mon_moveFarIndexCB(-100)
[5] Move Up Button -> mon_moveIndexCB(100)
[6] Move Down Button -> mon_moveIndexCB(-100)
[7] Select All Button -> mon_selectCB(101)
[8] Deselect All Button -> mon_selectCB(100)
[9] Duplicate Button -> mon_copyCB(100)
[10] Remove Button -> mon_deleteCB(100)
[11] Graph Menu Button -> mon_graphAMenuCB(100)
 
monRecTelOb j
[0] Total # Index Input
 
[2] Rows Selected Input
 
monRecCmd1Obj
[1-17] Index Button -> mon_indexCB (100+i)
where i is the number of the button , 1-17.
 
monRecCmd2Obj
[1-17] Variable Name Input -> mon_variableNameCB (100+i)
where i is the number of the button , 1-17.
 
monRecCmd3Obj
[1-17] Value Button -> mon_valueButtonCB(100+i)
where i is the number of the button , 1-17.
 
monRecCmd12Obj
[1-17] File Button -> mon_fileCB(100+i)
where i is the number of the button , 1-17.
 
monRecTel1Obj
[1-17] Rate/Time Input
 

monSend
Label = "Data Communicator"
The data communicator form provides the same functionality as the data monitor form. In addition, this form allows the operator to send commands. The message rate can be altered. Several premade function generators can be customized to produce unique updates to variables.
 
Objects
monSendSysObj
[0] File Menu Button -> local_fileMenuCB(0)
[1] Display Menu Button -> local_displayMenuCB(0)
 
monSendLabelObj
[0] #
[1] Variable Name
[2] Value
[3] Rate/Time
[4] Des Rate
[5] Function
[6] A
[7] B
[8] C
[9] Comm
[10] File
 
monSendCmdObj
[0] Slider -> mon_sliderCB(200)
[1] Lower Index Range Input -> mon_rangeIndexCB(-200)
[2] Upper Index Range Input -> mon_rangeIndexCB(200)
[3] Move To Top Button -> mon_moveFarIndexCB(200)
[4] Move To Bottom Button -> mon_moveFarIndexCB(-200)
[5] Move Up Button -> mon_moveIndexCB(200)
[6] Move Down Button -> mon_moveIndexCB(-200)
[7] Select All Button -> mon_selectCB(201)
[8] Deselect All Button -> mon_selectCB(200)
[9] Duplicate Button -> mon_copyCB(200)
[10] Remove Button -> mon_deleteCB(200)
[11] Graph Menu Button -> mon_graphAMenuCB(200)
 
monSendTelOb j
[0] Total # Index Input
 
[2] Rows Selected Input
 
monSendCmd1Obj
[1-17] Index Button -> mon_indexCB (200+i)
where i is the number of the button , 1-17.
 
monSendCmd2Obj
[1-17] Variable Name Input -> mon_variableNameCB (200+i)
where i is the number of the button , 1-17.
 
monSendCmd3Obj
[1-17] Value Button -> mon_valueButtonCB(200+i)
where i is the number of the button , 1-17.
 
monSendCmd4Obj
[1-17] Cmd Button -> mon_cmdCB(200+i)
where i is the number of the button , 1-17.
 
monSendCmd5Obj
[1-17] Send Button -> mon_sendCB(200+i)
where i is the number of the button , 1-17.
 
monSendCmd6Obj
[1-17] Des Rate Input -> mon_desRateCB(200+i)
where i is the number of the button , 1-17.
 
monSendCmd7Obj
[1-17] Function Menu -> mon_functionMenuCB(200+1)
where i is the number of the button , 1-17.
 
monSendCmd8Obj
[1-17] A Parameter Input -> mon_aParamCB(200+i)
where i is the number of the button , 1-17.
monSendCmd9Obj
[1-17] B Parameter Input -> mon_bParamCB(200+i)
where i is the number of the button , 1-17.
 
monSendCmd10Obj
[1-17] C Parameter Input -> mon_cParamCB(200+i)
where i is the number of the button , 1-17.
 
monSendCmd11Obj
[1-17] Comm Type Button -> mon_commTypeCB(200+i)
where i is the number of the button , 1-17.
 
monSendCmd12Obj
[1-17] File Button -> mon_fileCB(200+i)
where i is the number of the button , 1-17.
 
monSendTel1Obj
[1-17] Rate/Time Input

monGraphX
Label = "GraphX"
where X is a number between 0-9

These forms allow the operator to graph up to nine different variables at once. Several graphs can be chosen includign: bar graph, pie charts, line graphs, and strip charts. Colors and line styles can be customized to ease identification of the different variables.

 
Objects
monGraphXSysObj
[0] File Menu Button -> local_fileMenuCB(0)
[1] Display Menu Button -> local_displayMenuCB(0)
 
monGraphXLabelObj
 
monGraphXCmdObj
[0] Shrink/Expand Button -> mon_shrinkCB(1000 + X00)
where X is a digit between 0-9
[1] Graph Menu ->monGraphMenuCB(1000 +X00)
where X is a digit between 0-9
[2] Upper Bounds Input -> mon_graphBoundsCB(2)
[3] Lower Bounds Input -> mon_graphBoundsCB(3)
[4] Upper horizontal bounds input -> mon_graphBoundsCB(4)
[5] AutoScale button-> mon_graphBoundsCB(5)
 
monGraphXTelOb j
[0] Chart
[1] XY Plot
 
monGraphXCmd1Obj
[1-9] Index Button -> mon_indexCB (1000 + X00+i)
where X is a digit between 0-9, and
where i is the number of the button , 1-9.
 
monGraphXCmd2Obj
[1-9] Variable Name Input -> mon_variableNameCB (1000 + X00+i)
where X is a digit between 0-9, and
where i is the number of the button , 1-9.
 
monGraphXCmd3Obj
[1-9] Value Button -> mon_valueButtonCB(1000 + X00+i)
where X is a digit between 0-9, and
where i is the number of the button , 1-9.
 
monGraphXCmd4Obj
[1-9] Color Button -> mon_colorCB(1000 + X00+i)
where X is a digit between 0-9, and
where i is the number of the button , 1-9.
 
monGraphXCmd5Obj
[1-9] Plot Type Button -> mon_plotTypeMenuCB(1000 + X00+i)
where X is a digit between 0-9, and
where i is the number of the button , 1-9.
 

Utility Form
monBrowse
 
monBrowseCmdObj
[0] Bowser -> monBrowse_browserCB(0)
 
monMenu
 
monMenuCmdObj
[0] Replace Button ->
[1] Duplicate Button -> mon_copyCB(300)
[2] Remove Button -> mon_deleteCB(300)
[3] Shift To Top Button -> mon_moveFarIndexCB(300)
[4] Shift Up Button -> mon_moveIndexCB(300)
[5] Shift Down Button -> mon_moveIndexCB(-300)
[6] Shift To Bottom Button -> mon_moveFarIndexCB(-300)
[7] Graph Button -> mon_graphCB(300)

 
Menus
 
monMenu
Replace -> mon_indexCB(300)
Duplicate -> mon_copyCB(300)
Remove -> mon_deletCB(300)
Shift To Top -> mon_moveFarIndexCB(300)
Shift Up -> mon_moveIndexCB(300)
Shift Down -> mon_moveIndexCB(-300)
Shift To Bottom -> mon_moveIndexCB(-300)
Graph -> mon_graphAMenuCB(300)
 
monFileMenu
monFileMenuButton
[1] - Load Display List ... -> mon_fileMenuButtonCB(1)
[2] - Save Display List ... -> mon_fileMenuButtonCB(2)
[3] - Close Window -> mon_fileMenuButtonCB(3)
[4] - Quit -> mon_fileMenuButtonCB(4)
 
monDisplayMenu
monDisplayMenuButton
[1] Data Monitor - mon_displayMenuButtonCB(1)
[2] Data Communicator - mon_displayMenuButtonCB(2)
[10] Graph0- mon_displayMenuButtonCB(10)
 
monFunctionMenu
monFunctionMenuButton
[1] Fixed = C -> mon_functionCB(1)
[2] Increment = Ax + C -> mon_functionCB(2)
[3] Sine Wave = A sin(Bx) + C -> mon_functionCB(3)
[4] Sawtooth -> mon_functionCB(4)
[5] Square Wave = C -> mon_functionCB(5)
 
monDisplayValueMenu
monDisplayValueMenuButton
[1] Decimal -> mon_displayValueMenuButtonCB(1)
[2] Hexidecimal -> mon_displayValueMenuButtonCB(2)
[3] Binary -> mon_displayValueMenuButtonCB(3)
 
monGraphMenu
monGraphMenuButton
[0] Vertical Bar -> mon_graphMenuButtonCB(0)
[1] Horizontal Bar -> mon_graphMenuButtonCB(1)
[2] Line -> mon_graphMenuButtonCB(2)
[3] Spike -> mon_graphMenuButtonCB(3)
[4] Filled -> mon_graphMenuButtonCB(4)
[5] Pie -> mon_graphMenuButtonCB(5)
[6] Pie - Special -> mon_graphMenuButtonCB(6)
[7] Strip (Line)-> mon_graphMenuButtonCB(7)
[8] Strip (Filled)-> mon_graphMenuButtonCB(8)
 
 
monPlotTypeMenu
monPlotTypeMenuButton
[0] Hidden -> mon_plotTypeMenuButtonCB(0)
[1] Solid Line -> mon_plotTypeMenuButtonCB(1)
[2] Dashed Line -> mon_plotTypeMenuButtonCB(2)
[3] Long Dashed Line -> mon_plotTypeMenuButtonCB(3)
[4] Dotted Line -> mon_plotTypeMenuButtonCB(4)
[5] Dot-Dash Line -> mon_plotTypeMenuButtonCB(5)
[6] Line w/ Points -> mon_plotTypeMenuButtonCB(6)
[7] Line w/ Squares -> mon_plotTypeMenuButtonCB(7)
[8] Line w/ Circles -> mon_plotTypeMenuButtonCB(8)
[9] Only Points -> mon_plotTypeMenuButtonCB(9)
[10] Filled -> mon_plotTypeMenuButtonCB(10)
[11] Impulse -> mon_plotTypeMenuButtonCB(11)
 

Preference Form
wmuPrefSysObj
[0] File Menu Button -> local_fileMenuCB(-1)
[1] Display Menu Button -> local_fileMenuCB(-1);
 
wmuPrefCmdObj
 
wmuPrefTelObj
[1] - Min Duty Cycle Input
[2] - Ave Duty Cycle Input
[3] - Max Duty Cycle Input
[4] - Duty Cycle Chart
[5] - Min Loop Rate Input
[6] - Ave Loop Rate Input
[7] - Max Loop Rate Input
[8] - Loop Rate Chart

Data Structure Determination Algorithmn


 Given a potential name of a structure the flowchart on the right shows how the dataMonitor determines what kind of structure it is.

1) First the program searches through the structures database to match the name to the structure. If it can not find it an error is presented.

2) The algorithmn then checks to see if the found structure is a 'Basic' data type. This typically means the structure is a float, char, int, or some other data type which is not a container structure. If it is the algorithmn then determines the array size. This could include matrices.

3) If the structure is not a 'Basic' type, it is check to see if it has multiple elements contained within. If it is a container structure, the algorithm will deal with each element, checking the the element's data type to see if it is a pass through structure. For example:

typedef intStruct int;
typedef int3dof int[3];

are pass through structures, they are merely renamed. The algorithm keeps track of any arrays so in the end

int3dof x[4] is equivalent to
int x[3][4].

4) Now match on the first element's data type with a structure in the database. If it can not be found flag an error.

5) The algorithm checks to see if the element is a basic data type. Two examples are

int x;
intStruct x;

Although bothe are basic types, the latter is a pass-through basic type.

6) If the element is not a basic type, check to see if it is a pass through container structure.

typedef struct {
  int x;
  float y;
} intFloatStruct;

typedef ifStruct intFloatStruct;

struct struct1 {
  intFloatStruct element1;
}

struct struct2 {
  ifStruct element2;
}

Here struct1 and struct2 are both single-element/non-basic type structures. 'element1' is equivalent to 'element2', however, 'element1' is a pass through structure.