@kuriousdesign/machine-sdk 1.0.51 → 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.
@@ -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 { RobData } from "./Devices/Robot";
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]: RobData;
52
+ [NodeId.RobData]: RobDataDEPRECATED;
53
53
  }
54
54
  export declare enum InputNodeId {
55
55
  ButtonBarStopBtnClick = "Main.HMI.ButtonBar.StopBtn.wasClicked",
@@ -0,0 +1,10 @@
1
+ export declare enum ConMethods {
2
+ NONE = 0,
3
+ UDPATE_PART = 1,
4
+ TRANSFER_PART = 2,
5
+ CONFIRM_PARTS_LOADED = 3,
6
+ CONFIRM_PARTS_UNLOADED = 4,
7
+ CLEAR_ALL_FIXTURE_PARTS = 5,
8
+ LOAD_ALL_FIXTURE_PARTS_RAW = 6
9
+ }
10
+ export declare function conMethodToString(method: ConMethods): string;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ // {attribute 'qualified_only'}
3
+ // {attribute 'strict'}
4
+ // TYPE ConMethods :
5
+ // (
6
+ // NONE := 0, //do not remove or change this
7
+ // UDPATE_PART := 1, //param0: partLocationId, param1: newPartState
8
+ // TRANSFER_PART := 2, //param0: currentLocationId, param1: newLocationId
9
+ // CONFIRM_PARTS_LOADED :=3, //no params
10
+ // CONFIRM_PARTS_UNLOADED :=4, //no params
11
+ // CLEAR_ALL_FIXTURE_PARTS :=5,
12
+ // LOAD_ALL_FIXTURE_PARTS_RAW :=6
13
+ // );
14
+ // END_TYPE
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ConMethods = void 0;
17
+ exports.conMethodToString = conMethodToString;
18
+ var ConMethods;
19
+ (function (ConMethods) {
20
+ ConMethods[ConMethods["NONE"] = 0] = "NONE";
21
+ ConMethods[ConMethods["UDPATE_PART"] = 1] = "UDPATE_PART";
22
+ ConMethods[ConMethods["TRANSFER_PART"] = 2] = "TRANSFER_PART";
23
+ ConMethods[ConMethods["CONFIRM_PARTS_LOADED"] = 3] = "CONFIRM_PARTS_LOADED";
24
+ ConMethods[ConMethods["CONFIRM_PARTS_UNLOADED"] = 4] = "CONFIRM_PARTS_UNLOADED";
25
+ ConMethods[ConMethods["CLEAR_ALL_FIXTURE_PARTS"] = 5] = "CLEAR_ALL_FIXTURE_PARTS";
26
+ ConMethods[ConMethods["LOAD_ALL_FIXTURE_PARTS_RAW"] = 6] = "LOAD_ALL_FIXTURE_PARTS_RAW";
27
+ })(ConMethods || (exports.ConMethods = ConMethods = {}));
28
+ function conMethodToString(method) {
29
+ switch (method) {
30
+ case ConMethods.NONE:
31
+ return "NONE";
32
+ case ConMethods.UDPATE_PART:
33
+ return "UPDATE_PART";
34
+ case ConMethods.TRANSFER_PART:
35
+ return "TRANSFER_PART";
36
+ case ConMethods.CONFIRM_PARTS_LOADED:
37
+ return "CONFIRM_PARTS_LOADED";
38
+ case ConMethods.CONFIRM_PARTS_UNLOADED:
39
+ return "CONFIRM_PARTS_UNLOADED";
40
+ case ConMethods.CLEAR_ALL_FIXTURE_PARTS:
41
+ return "CLEAR_ALL_FIXTURE_PARTS";
42
+ case ConMethods.LOAD_ALL_FIXTURE_PARTS_RAW:
43
+ return "LOAD_ALL_FIXTURE_PARTS_RAW";
44
+ default:
45
+ return "UNKNOWN_METHOD";
46
+ }
47
+ }
@@ -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 RobData {
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;
@@ -1,3 +1,4 @@
1
1
  export * from "./Axis";
2
2
  export * from "../BaseDevice/Device";
3
3
  export * from "./DeviceTypes";
4
+ export * from "./Conductor";
@@ -17,3 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Axis"), exports);
18
18
  __exportStar(require("../BaseDevice/Device"), exports);
19
19
  __exportStar(require("./DeviceTypes"), exports);
20
+ __exportStar(require("./Conductor"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kuriousdesign/machine-sdk",
3
- "version": "1.0.51",
3
+ "version": "1.0.53",
4
4
  "description": "Shared data types and helpers for machine-related repositories",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -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 { RobData } from "./Devices/Robot";
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]: RobData;
66
+ [NodeId.RobData]: RobDataDEPRECATED;
67
67
  }
68
68
 
69
69
  export enum InputNodeId {
@@ -0,0 +1,44 @@
1
+ // {attribute 'qualified_only'}
2
+ // {attribute 'strict'}
3
+ // TYPE ConMethods :
4
+ // (
5
+ // NONE := 0, //do not remove or change this
6
+ // UDPATE_PART := 1, //param0: partLocationId, param1: newPartState
7
+ // TRANSFER_PART := 2, //param0: currentLocationId, param1: newLocationId
8
+ // CONFIRM_PARTS_LOADED :=3, //no params
9
+ // CONFIRM_PARTS_UNLOADED :=4, //no params
10
+ // CLEAR_ALL_FIXTURE_PARTS :=5,
11
+ // LOAD_ALL_FIXTURE_PARTS_RAW :=6
12
+ // );
13
+ // END_TYPE
14
+
15
+ export enum ConMethods {
16
+ NONE = 0,
17
+ UDPATE_PART = 1,
18
+ TRANSFER_PART = 2,
19
+ CONFIRM_PARTS_LOADED = 3,
20
+ CONFIRM_PARTS_UNLOADED = 4,
21
+ CLEAR_ALL_FIXTURE_PARTS = 5,
22
+ LOAD_ALL_FIXTURE_PARTS_RAW = 6,
23
+ }
24
+
25
+ export function conMethodToString(method: ConMethods): string {
26
+ switch (method) {
27
+ case ConMethods.NONE:
28
+ return "NONE";
29
+ case ConMethods.UDPATE_PART:
30
+ return "UPDATE_PART";
31
+ case ConMethods.TRANSFER_PART:
32
+ return "TRANSFER_PART";
33
+ case ConMethods.CONFIRM_PARTS_LOADED:
34
+ return "CONFIRM_PARTS_LOADED";
35
+ case ConMethods.CONFIRM_PARTS_UNLOADED:
36
+ return "CONFIRM_PARTS_UNLOADED";
37
+ case ConMethods.CLEAR_ALL_FIXTURE_PARTS:
38
+ return "CLEAR_ALL_FIXTURE_PARTS";
39
+ case ConMethods.LOAD_ALL_FIXTURE_PARTS_RAW:
40
+ return "LOAD_ALL_FIXTURE_PARTS_RAW";
41
+ default:
42
+ return "UNKNOWN_METHOD";
43
+ }
44
+ }
@@ -138,7 +138,50 @@ export function robotTaskToString(task: number): string {
138
138
  }
139
139
 
140
140
 
141
- export interface RobData {
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;
@@ -1,3 +1,4 @@
1
1
  export * from "./Axis";
2
2
  export * from "../BaseDevice/Device";
3
3
  export * from "./DeviceTypes";
4
+ export * from "./Conductor";