@kuriousdesign/machine-sdk 1.0.52 → 1.0.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/custom-types/AppState.d.ts +2 -2
- package/dist/custom-types/Devices/Robot.d.ts +18 -1
- package/package.json +1 -1
- package/src/abb/enums/GCs.mod +44 -0
- package/src/abb/enums/PartLocationIds.mod +13 -0
- package/src/abb/enums/RobTasks.mod +18 -0
- package/src/abb/enums/States.mod +20 -0
- package/src/abb/procs/MainModule.mod +188 -0
- package/src/abb/records/DeviceDataTypes.mod +35 -0
- package/src/custom-types/AppState.ts +2 -2
- package/src/custom-types/Devices/Robot.ts +44 -1
|
@@ -4,7 +4,7 @@ import { PartDataDeprecated } from "./Part";
|
|
|
4
4
|
import { Device } from "./BaseDevice/Device";
|
|
5
5
|
import { GlobalConstants } from "./GlobalConstants";
|
|
6
6
|
import { RackData, RackHmiPbs, RecipeData, RecipeManagerPbs, SystemFaultData, TaskQueue, UserData, UserManagerFB } from ".";
|
|
7
|
-
import {
|
|
7
|
+
import { RobDataDEPRECATED } from "./Devices/Robot";
|
|
8
8
|
export declare enum NodeId {
|
|
9
9
|
ButtonBar = "Main.HMI.ButtonBar",
|
|
10
10
|
StatusBar = "Main.HMI.StatusBar",
|
|
@@ -49,7 +49,7 @@ export interface AppState {
|
|
|
49
49
|
[NodeId.RecipeManagerPbs]: RecipeManagerPbs;
|
|
50
50
|
[NodeId.UserManagerFB]: UserManagerFB;
|
|
51
51
|
[NodeId.RemoteControlPage]: Page;
|
|
52
|
-
[NodeId.RobData]:
|
|
52
|
+
[NodeId.RobData]: RobDataDEPRECATED;
|
|
53
53
|
}
|
|
54
54
|
export declare enum InputNodeId {
|
|
55
55
|
ButtonBarStopBtnClick = "Main.HMI.ButtonBar.StopBtn.wasClicked",
|
|
@@ -29,7 +29,24 @@ export declare const RobTasks: {
|
|
|
29
29
|
TAKE_IMAGES: number;
|
|
30
30
|
};
|
|
31
31
|
export declare function robotTaskToString(task: number): string;
|
|
32
|
-
export interface
|
|
32
|
+
export interface RobWaypointPlan {
|
|
33
|
+
cnt: number;
|
|
34
|
+
activeIndex: number;
|
|
35
|
+
list: number[];
|
|
36
|
+
}
|
|
37
|
+
export interface RobCfg {
|
|
38
|
+
}
|
|
39
|
+
export interface RobSts {
|
|
40
|
+
cfg: RobCfg;
|
|
41
|
+
activeToolId: number;
|
|
42
|
+
actualWaypoint: number;
|
|
43
|
+
targetWaypoint: number;
|
|
44
|
+
actualZone: number;
|
|
45
|
+
waypointPlan: RobWaypointPlan;
|
|
46
|
+
squeegeeIsCalibrated: boolean;
|
|
47
|
+
squeegeeIsHomed: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface RobDataDEPRECATED {
|
|
33
50
|
zone: RobZoneData;
|
|
34
51
|
pos: RobWaypoints;
|
|
35
52
|
dest: RobWaypoints;
|
package/package.json
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
MODULE Globals
|
|
2
|
+
|
|
3
|
+
! Axes & device counts
|
|
4
|
+
CONST num NUM_AXES := 20;
|
|
5
|
+
CONST num MAX_NUM_NAUTILUS_AXES := 20;
|
|
6
|
+
CONST num NUM_DEVICES := 50;
|
|
7
|
+
|
|
8
|
+
! Timing & durations
|
|
9
|
+
CONST clock MOMENTARY_PB := T#250MS;
|
|
10
|
+
CONST num DEFAULT_TASK_DURATION_SEC := 5;
|
|
11
|
+
|
|
12
|
+
! Robot & part counts
|
|
13
|
+
CONST num ROBOT_PART_COUNT := 2;
|
|
14
|
+
CONST num RECIPE_COUNT_MAX := 20;
|
|
15
|
+
CONST bool HIDE_LEFT_TWO_COLUMNS := TRUE;
|
|
16
|
+
CONST bool HIDE_RIGHT_COLUMN := TRUE;
|
|
17
|
+
CONST bool HIDE_LEFT_ONE_COLUMN := FALSE;
|
|
18
|
+
CONST num SHELF_PART_COUNT := 100;
|
|
19
|
+
CONST num NUM_OF_COLS := 20;
|
|
20
|
+
CONST num PARTS_IN_COL := 5;
|
|
21
|
+
CONST num NUM_PARTS_XFER := 10;
|
|
22
|
+
CONST num NUM_PARTS_IB := 51;
|
|
23
|
+
CONST num NUM_PARTS_PER_FIXTURE := 8;
|
|
24
|
+
|
|
25
|
+
! Logging & tasks
|
|
26
|
+
CONST num NUM_LOG_ENTRIES := 25;
|
|
27
|
+
CONST num TASK_LIST_LEN := 25;
|
|
28
|
+
CONST num TASK_STORE_LEN := 125; ! 100 + TASK_LIST_LEN
|
|
29
|
+
CONST num TASK_LOG_LEN := 25;
|
|
30
|
+
CONST num STATION_COUNT := 6;
|
|
31
|
+
CONST num TOP_PRIORITY_COUNT := 7;
|
|
32
|
+
CONST num PARTDATA_COUNT := 25;
|
|
33
|
+
CONST num USERFRAME_COUNT := 10;
|
|
34
|
+
CONST num NUM_ENTRIES_MACHINE_LOG := 100;
|
|
35
|
+
|
|
36
|
+
! Machine & IO limits
|
|
37
|
+
CONST num MACHINE_FAULTCODEARRAY_LEN := 50;
|
|
38
|
+
CONST num MAX_NUM_INPUTS := 50;
|
|
39
|
+
CONST num MAX_NUM_HW_CARDS := 16;
|
|
40
|
+
|
|
41
|
+
! Time conversion
|
|
42
|
+
CONST num SYSTIME_TO_UTC_SCALAR := 10000000; ! 10E6, RAPID uses num/ULINT as needed
|
|
43
|
+
|
|
44
|
+
ENDMODULE
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
MODULE PartLocationIds
|
|
2
|
+
|
|
3
|
+
! Define the part locations as a record
|
|
4
|
+
CONST record PartLocationRec :=
|
|
5
|
+
[
|
|
6
|
+
None := 0,
|
|
7
|
+
LeftFixture_P1 := 1,
|
|
8
|
+
RightFixture_P9 := LeftFixture_P1 + GCs.NUM_PARTS_PER_FIXTURE,
|
|
9
|
+
RobotGripper := RightFixture_P9 + GCs.NUM_PARTS_PER_FIXTURE,
|
|
10
|
+
Lost := RobotGripper + 1
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
ENDMODULE
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
MODULE RobTasks
|
|
2
|
+
|
|
3
|
+
! Define a record containing only PASSTHRU tasks
|
|
4
|
+
CONST record RobTasksRec :=
|
|
5
|
+
[
|
|
6
|
+
RETRIEVE_TOOL := 1, ! param0: toolId
|
|
7
|
+
RETURN_TOOL := 2, ! param0: toolId
|
|
8
|
+
PICK_PART_FROM_FIXTURE := 4, ! param0: partLocationId
|
|
9
|
+
WEIGH_PART := 5, ! param0: partLocationId
|
|
10
|
+
PLACE_PART_IN_FIXTURE := 6, ! param0: partLocationId
|
|
11
|
+
WIPE_APPLICATOR := 9, ! no params
|
|
12
|
+
APPLY_LINER := 10, ! param0: partLocationId
|
|
13
|
+
PHOTOGRAPH_TUBE := 12, ! param0: partLocationId
|
|
14
|
+
RELEASE_PART_AND_MOVE_TO_PERCH := 13, ! param0: partLocationId
|
|
15
|
+
CALIBRATE_SQUEEGEE := 14 ! no params
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
ENDMODULE
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
!************************************************************
|
|
2
|
+
! States.mod — Shared State Definitions
|
|
3
|
+
!************************************************************
|
|
4
|
+
MODULE States
|
|
5
|
+
|
|
6
|
+
CONST record StatesType
|
|
7
|
+
ABORTING := -3,
|
|
8
|
+
ERROR := -2,
|
|
9
|
+
KILLED := -1,
|
|
10
|
+
INACTIVE := 0,
|
|
11
|
+
RESETTING := 50,
|
|
12
|
+
IDLE := 100,
|
|
13
|
+
RUNNING := 500,
|
|
14
|
+
STOPPING := 900,
|
|
15
|
+
PAUSED := 999,
|
|
16
|
+
DONE := 1000,
|
|
17
|
+
MANUAL := 1100;
|
|
18
|
+
CONST StatesType States;
|
|
19
|
+
|
|
20
|
+
ENDMODULE
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
!************************************************************
|
|
2
|
+
! RAPID MAIN PROGRAM — State Machine Framework (PLC-style)
|
|
3
|
+
!************************************************************
|
|
4
|
+
MODULE MainModule
|
|
5
|
+
|
|
6
|
+
!========================================================
|
|
7
|
+
! GLOBAL STATE VARIABLES
|
|
8
|
+
!========================================================
|
|
9
|
+
PERS num StepNum := States.INACTIVE;
|
|
10
|
+
VAR bool FirstScan := TRUE;
|
|
11
|
+
VAR bool StepMode := FALSE;
|
|
12
|
+
VAR bool GoToNextStep := FALSE;
|
|
13
|
+
VAR clock StepStartTime;
|
|
14
|
+
|
|
15
|
+
!========================================================
|
|
16
|
+
! SIMULATED DEVICE & ENGINE FLAGS (replace with real I/O)
|
|
17
|
+
!========================================================
|
|
18
|
+
VAR bool ErrorPresent := FALSE;
|
|
19
|
+
VAR bool ChildrenErrorPresent := FALSE;
|
|
20
|
+
VAR bool InstantKill_ON := FALSE;
|
|
21
|
+
VAR bool Reset_REQ := FALSE;
|
|
22
|
+
VAR bool Clear_REQ := FALSE;
|
|
23
|
+
VAR bool AutoReset := FALSE;
|
|
24
|
+
|
|
25
|
+
VAR bool RequestTask := FALSE;
|
|
26
|
+
VAR bool RequestProcess := FALSE;
|
|
27
|
+
|
|
28
|
+
!========================================================
|
|
29
|
+
! HELPER PROCEDURES / FUNCTIONS
|
|
30
|
+
!========================================================
|
|
31
|
+
PROC preRun()
|
|
32
|
+
! Overhead logic before state processing
|
|
33
|
+
ENDPROC
|
|
34
|
+
|
|
35
|
+
PROC updateStatus()
|
|
36
|
+
! Update status or communications
|
|
37
|
+
ENDPROC
|
|
38
|
+
|
|
39
|
+
PROC postRun()
|
|
40
|
+
! Cleanup or end-of-cycle logic
|
|
41
|
+
ENDPROC
|
|
42
|
+
|
|
43
|
+
PROC desc(msg STRING)
|
|
44
|
+
TPWrite "STATE: "\msg;
|
|
45
|
+
ENDPROC
|
|
46
|
+
|
|
47
|
+
PROC setNextStep(nextState num)
|
|
48
|
+
StepNum := nextState;
|
|
49
|
+
FirstScan := TRUE;
|
|
50
|
+
StepStartTime := Clock();
|
|
51
|
+
TPWrite "→ Next State: "\numtostr(nextState, 0);
|
|
52
|
+
ENDPROC
|
|
53
|
+
|
|
54
|
+
FUNC bool Aborting()
|
|
55
|
+
! Insert abort handling logic
|
|
56
|
+
RETURN TRUE;
|
|
57
|
+
ENDFUNC
|
|
58
|
+
|
|
59
|
+
FUNC bool Resetting()
|
|
60
|
+
! Insert reset logic
|
|
61
|
+
RETURN TRUE;
|
|
62
|
+
ENDFUNC
|
|
63
|
+
|
|
64
|
+
FUNC bool Stopping()
|
|
65
|
+
! Insert stop logic
|
|
66
|
+
RETURN TRUE;
|
|
67
|
+
ENDFUNC
|
|
68
|
+
|
|
69
|
+
PROC Clear()
|
|
70
|
+
ErrorPresent := FALSE;
|
|
71
|
+
ChildrenErrorPresent := FALSE;
|
|
72
|
+
TPWrite "Cleared errors";
|
|
73
|
+
ENDPROC
|
|
74
|
+
|
|
75
|
+
!========================================================
|
|
76
|
+
! MAIN EXECUTION LOOP
|
|
77
|
+
!========================================================
|
|
78
|
+
PROC main()
|
|
79
|
+
TPWrite "=== Starting Main State Machine ===";
|
|
80
|
+
StepStartTime := Clock();
|
|
81
|
+
|
|
82
|
+
WHILE TRUE DO
|
|
83
|
+
preRun;
|
|
84
|
+
updateStatus;
|
|
85
|
+
|
|
86
|
+
! Step mode logic
|
|
87
|
+
IF StepMode THEN
|
|
88
|
+
IF GoToNextStep THEN
|
|
89
|
+
GoToNextStep := FALSE;
|
|
90
|
+
FirstScan := TRUE;
|
|
91
|
+
ENDIF
|
|
92
|
+
ENDIF
|
|
93
|
+
|
|
94
|
+
!----------------------------------------------------
|
|
95
|
+
! STATE MACHINE
|
|
96
|
+
!----------------------------------------------------
|
|
97
|
+
SELECT StepNum
|
|
98
|
+
|
|
99
|
+
CASE States.ABORTING:
|
|
100
|
+
desc("ABORTING");
|
|
101
|
+
IF Aborting() THEN
|
|
102
|
+
setNextStep(States.KILLED);
|
|
103
|
+
ENDIF
|
|
104
|
+
|
|
105
|
+
CASE States.KILLED:
|
|
106
|
+
desc("KILLED");
|
|
107
|
+
IF NOT InstantKill_ON THEN
|
|
108
|
+
IF ErrorPresent OR ChildrenErrorPresent THEN
|
|
109
|
+
setNextStep(States.ERROR);
|
|
110
|
+
ELSE
|
|
111
|
+
setNextStep(States.INACTIVE);
|
|
112
|
+
ENDIF
|
|
113
|
+
ENDIF
|
|
114
|
+
|
|
115
|
+
CASE States.ERROR:
|
|
116
|
+
desc("ERROR");
|
|
117
|
+
IF NOT ErrorPresent AND NOT ChildrenErrorPresent THEN
|
|
118
|
+
setNextStep(States.INACTIVE);
|
|
119
|
+
ELSIF Clear_REQ THEN
|
|
120
|
+
Clear;
|
|
121
|
+
ENDIF
|
|
122
|
+
|
|
123
|
+
CASE States.INACTIVE:
|
|
124
|
+
desc("INACTIVE");
|
|
125
|
+
IF ErrorPresent OR ChildrenErrorPresent THEN
|
|
126
|
+
setNextStep(States.ERROR);
|
|
127
|
+
ELSIF Reset_REQ OR AutoReset THEN
|
|
128
|
+
setNextStep(States.RESETTING);
|
|
129
|
+
ENDIF
|
|
130
|
+
|
|
131
|
+
CASE States.RESETTING:
|
|
132
|
+
desc("RESETTING");
|
|
133
|
+
IF Resetting() THEN
|
|
134
|
+
setNextStep(States.IDLE);
|
|
135
|
+
ENDIF
|
|
136
|
+
|
|
137
|
+
CASE States.IDLE:
|
|
138
|
+
desc("IDLE");
|
|
139
|
+
checkForNewTaskRequest(); --> going to read the pLC variable for task Request and those task params
|
|
140
|
+
SWITCH requestedTaskId ! Pseudo-variable for requested task
|
|
141
|
+
CASE RobTasks.WEIGHING:
|
|
142
|
+
PROC WeighingTask();
|
|
143
|
+
setNextStep(States.RUNNING);
|
|
144
|
+
! Idle logic here
|
|
145
|
+
! check for any task requests and transition to running if so
|
|
146
|
+
! setNextStep(States.RUNNING);
|
|
147
|
+
|
|
148
|
+
CASE States.RUNNING:
|
|
149
|
+
desc("RUNNING");
|
|
150
|
+
SELECT requestedTaskId ! Pseudo-variable for requested task
|
|
151
|
+
CASE 1:
|
|
152
|
+
! Execute Task 1
|
|
153
|
+
|
|
154
|
+
CASE States.STOPPING:
|
|
155
|
+
desc("STOPPING");
|
|
156
|
+
IF Stopping() THEN
|
|
157
|
+
IF ErrorPresent OR ChildrenErrorPresent THEN
|
|
158
|
+
setNextStep(States.ABORTING);
|
|
159
|
+
ELSE
|
|
160
|
+
setNextStep(States.IDLE);
|
|
161
|
+
ENDIF
|
|
162
|
+
ENDIF
|
|
163
|
+
|
|
164
|
+
CASE States.DONE:
|
|
165
|
+
desc("DONE");
|
|
166
|
+
! Final state logic
|
|
167
|
+
|
|
168
|
+
CASE States.PAUSED:
|
|
169
|
+
desc("PAUSED");
|
|
170
|
+
! Handle paused logic
|
|
171
|
+
|
|
172
|
+
CASE States.MANUAL:
|
|
173
|
+
desc("MANUAL");
|
|
174
|
+
! Handle manual mode logic
|
|
175
|
+
|
|
176
|
+
DEFAULT:
|
|
177
|
+
desc("UNKNOWN STATE");
|
|
178
|
+
setNextStep(States.INACTIVE);
|
|
179
|
+
|
|
180
|
+
ENDSELECT
|
|
181
|
+
|
|
182
|
+
postRun;
|
|
183
|
+
FirstScan := FALSE;
|
|
184
|
+
WaitTime 0.1; ! 100ms scan cycle
|
|
185
|
+
ENDWHILE
|
|
186
|
+
ENDPROC
|
|
187
|
+
|
|
188
|
+
ENDMODULE
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
MODULE DeviceDataTypes
|
|
2
|
+
|
|
3
|
+
! Maximum parameters constant (from your DeviceConstants)
|
|
4
|
+
CONST num MAX_NUM_PARAMS := 10; ! replace 10 with actual value from DeviceConstants
|
|
5
|
+
|
|
6
|
+
! Define ProcessData record
|
|
7
|
+
TYPE ProcessData
|
|
8
|
+
STRUCT
|
|
9
|
+
!------------------------------------------------------
|
|
10
|
+
! Parameters that must only be written by SendProcessRequest()
|
|
11
|
+
!------------------------------------------------------
|
|
12
|
+
UniqueActionRequestId : num; ! DINT in ST
|
|
13
|
+
RequestId : num; ! INT in ST
|
|
14
|
+
RequestParamArray : array[0..MAX_NUM_PARAMS-1] of num; ! LREAL in ST
|
|
15
|
+
SenderId : num; ! INT in ST
|
|
16
|
+
|
|
17
|
+
!------------------------------------------------------
|
|
18
|
+
! Internal parameters
|
|
19
|
+
!------------------------------------------------------
|
|
20
|
+
ActiveId : num;
|
|
21
|
+
ActiveName : string[255];
|
|
22
|
+
LastId : num;
|
|
23
|
+
firstScan : bool;
|
|
24
|
+
isStepNum : num; ! read-only in ST
|
|
25
|
+
StepDescription : string[255];
|
|
26
|
+
isDone : bool;
|
|
27
|
+
isError : bool;
|
|
28
|
+
NextStepNum : num;
|
|
29
|
+
DeviceStateThatCalled : num;
|
|
30
|
+
DeviceStepThatCalled : num;
|
|
31
|
+
ParamArray : array[0..MAX_NUM_PARAMS-1] of num;
|
|
32
|
+
END_STRUCT
|
|
33
|
+
END_TYPE
|
|
34
|
+
|
|
35
|
+
ENDMODULE
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
UserData,
|
|
14
14
|
UserManagerFB,
|
|
15
15
|
} from ".";
|
|
16
|
-
import {
|
|
16
|
+
import { RobDataDEPRECATED } from "./Devices/Robot";
|
|
17
17
|
|
|
18
18
|
export enum NodeId {
|
|
19
19
|
// new node ids
|
|
@@ -63,7 +63,7 @@ export interface AppState {
|
|
|
63
63
|
[NodeId.RecipeManagerPbs]: RecipeManagerPbs;
|
|
64
64
|
[NodeId.UserManagerFB]: UserManagerFB;
|
|
65
65
|
[NodeId.RemoteControlPage]: Page;
|
|
66
|
-
[NodeId.RobData]:
|
|
66
|
+
[NodeId.RobData]: RobDataDEPRECATED;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export enum InputNodeId {
|
|
@@ -138,7 +138,50 @@ export function robotTaskToString(task: number): string {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
// TYPE RobSts :
|
|
142
|
+
// STRUCT
|
|
143
|
+
// Cfg:DeviceTemplateCfg; //read-only, references _cfg
|
|
144
|
+
// ActiveToolId:INT;
|
|
145
|
+
// ActualWaypoint:INT;
|
|
146
|
+
// TargetWaypoint:INT;
|
|
147
|
+
// ActualZone:INT;
|
|
148
|
+
// WaypointPlan: RobWaypointPlan;
|
|
149
|
+
// SqueegeeIsCalibrated:BOOL; //required once per job
|
|
150
|
+
// SqueegeeIsHomed:BOOL; //required after every tool change
|
|
151
|
+
// END_STRUCT
|
|
152
|
+
// END_TYPE
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
// TYPE RobWaypointPlan :
|
|
156
|
+
// STRUCT
|
|
157
|
+
// Cnt:INT;
|
|
158
|
+
// activeIndex:INT;
|
|
159
|
+
// list:ARRAY[0..RobConstants.MOVE_PLAN_LEN -1] OF INT;
|
|
160
|
+
// END_STRUCT
|
|
161
|
+
// END_TYPE
|
|
162
|
+
|
|
163
|
+
export interface RobWaypointPlan {
|
|
164
|
+
cnt: number;
|
|
165
|
+
activeIndex: number;
|
|
166
|
+
list: number[];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
export interface RobCfg {
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export interface RobSts {
|
|
174
|
+
cfg: RobCfg;
|
|
175
|
+
activeToolId: number;
|
|
176
|
+
actualWaypoint: number;
|
|
177
|
+
targetWaypoint: number;
|
|
178
|
+
actualZone: number;
|
|
179
|
+
waypointPlan: RobWaypointPlan;
|
|
180
|
+
squeegeeIsCalibrated: boolean;
|
|
181
|
+
squeegeeIsHomed: boolean;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export interface RobDataDEPRECATED {
|
|
142
185
|
zone: RobZoneData;
|
|
143
186
|
pos: RobWaypoints;
|
|
144
187
|
dest: RobWaypoints;
|