From c071be1dca40d475e8a67f1bce6207e3240a38ad Mon Sep 17 00:00:00 2001 From: yvan Date: Tue, 22 Jul 2025 12:44:11 +0800 Subject: [PATCH] jx_test --- jx_test/envs/20.json | 24 + jx_test/envs/23.json | 23 + jx_test/floor/f1.json | 1344 +++++++++++++++++++++++++++++++++++++++++++ jx_test/project.json | 53 ++ jx_test/scripts/CL2_DEMO.ts | 61 ++ jx_test/scripts/CLX_DEMO.ts | 61 ++ jx_test/scripts/ZH_CL2.ts | 85 +++ jx_test/scripts/ZH_CLX.ts | 85 +++ jx_test/scripts/all_test.ts | 35 ++ jx_test/scripts/charger.ts | 3 + jx_test/scripts/run1.ts | 26 + tw_zh/envs/13.json | 4 +- 12 files changed, 1802 insertions(+), 2 deletions(-) create mode 100644 jx_test/envs/20.json create mode 100644 jx_test/envs/23.json create mode 100644 jx_test/floor/f1.json create mode 100644 jx_test/project.json create mode 100644 jx_test/scripts/CL2_DEMO.ts create mode 100644 jx_test/scripts/CLX_DEMO.ts create mode 100644 jx_test/scripts/ZH_CL2.ts create mode 100644 jx_test/scripts/ZH_CLX.ts create mode 100644 jx_test/scripts/all_test.ts create mode 100644 jx_test/scripts/charger.ts create mode 100644 jx_test/scripts/run1.ts diff --git a/jx_test/envs/20.json b/jx_test/envs/20.json new file mode 100644 index 0000000..df7b843 --- /dev/null +++ b/jx_test/envs/20.json @@ -0,0 +1,24 @@ +{ + "envId": 10, + "envName": "嘉兴物理环境", + "isVirtual": false, + "envConfig": { + "mqtt": { + "brokerUrl": "tcp://10.10.101.8:1885", + "username": "admin", + "password": "admin", + "websocket": "mqtt://10.10.101.8:9001" + }, + "mysql": { + "jdbcUrl": "jdbc:p6spy:mysql://180.100.199.56:8306/rcs2_tw_zhanghui", + "username": "rcs2_tw_zhanghui", + "password": "Rcs2_tw_zhanghui" + }, + "redis": { + "host": "180.100.199.56", + "port": 6379, + "database": 0, + "password": "yxt123456" + } + } +} diff --git a/jx_test/envs/23.json b/jx_test/envs/23.json new file mode 100644 index 0000000..29bd522 --- /dev/null +++ b/jx_test/envs/23.json @@ -0,0 +1,23 @@ +{ + "envId": 13, + "envName": "嘉兴测试1", + "isVirtual": true, + "envConfig": { + "mqtt": { + "brokerUrl": "tcp://180.100.199.56:7097", + "username": "galaxis", + "password": "Admin1234_", + "websocket": "mqtt://180.100.199.56:9097" + }, + "mysql": { + "jdbc-url": "jdbc:p6spy:mysql://180.100.199.56:8306/rcs2_tw_zhanghui", + "username": "rcs2_tw_zhanghui", + "password": "Rcs2_tw_zhanghui" + }, + "redis": { + "host": "127.0.0.1", + "port": 6379, + "database": 0 + } + } +} diff --git a/jx_test/floor/f1.json b/jx_test/floor/f1.json new file mode 100644 index 0000000..44f04b5 --- /dev/null +++ b/jx_test/floor/f1.json @@ -0,0 +1,1344 @@ +[ + { + "id": "m1", + "t": "measure", + "v": true, + "tf": [ + [ + 0, + 0.02, + 0 + ], + [ + 90, + 0, + 0 + ], + [ + 0.25, + 0.25, + 0.1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [ + "m2", + "m4" + ] + } + }, + { + "id": "m2", + "t": "measure", + "v": true, + "tf": [ + [ + 8.4, + 0.02, + 0 + ], + [ + 90, + 0, + 0 + ], + [ + 0.25, + 0.25, + 0.1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [ + "m1", + "m3" + ] + } + }, + { + "id": "m3", + "t": "measure", + "v": true, + "tf": [ + [ + 8.4, + 0.02, + 9 + ], + [ + 90, + 0, + 0 + ], + [ + 0.25, + 0.25, + 0.1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [ + "m2", + "m4" + ] + } + }, + { + "id": "m4", + "t": "measure", + "v": true, + "tf": [ + [ + 0, + 0.02, + 9 + ], + [ + 90, + 0, + 0 + ], + [ + 0.25, + 0.25, + 0.1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [ + "m3", + "m1" + ] + } + }, + { + "id": "rack1", + "t": "rack", + "v": true, + "tf": [ + [ + 4.196, + 0, + 5.882 + ], + [ + 0, + 90, + 0 + ], + [ + 5.1, + 4.95, + 1 + ] + ], + "dt": { + "rackDepth": 1, + "bottomBarHeight": 0.2, + "bottomLinkHeight": 0.2, + "topLinkDistance": 0.2, + "levelCount": 3, + "bayCount": 4, + "hideFloor": 0, + "extendColumns": 1, + "columnSpacing": 1, + "bays": [ + { + "bayWidth": 1.275, + "levelHeight": [ + 0.25, + 1.65, + 3.05 + ], + "topHeight": 0.5 + }, + { + "bayWidth": 1.275, + "levelHeight": [ + 0.25, + 1.65, + 3.05 + ], + "topHeight": 0.5 + }, + { + "bayWidth": 1.275, + "levelHeight": [ + 0.25, + 1.65, + 3.05 + ], + "topHeight": 0.5 + }, + { + "bayWidth": 1.275, + "levelHeight": [ + 0.25, + 1.65, + 3.05 + ], + "topHeight": 0.5 + } + ], + "center": [], + "in": [], + "out": [], + "rackWidth": 5.1, + "rackHeight": 4.95 + } + }, + { + "id": "10_10", + "t": "way", + "v": true, + "logicX": 10, + "logicY": 10, + "logicZ": 1, + "tf": [ + [ + 1.5, + 0, + 2.13 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_10" + ], + "out": [ + "11_10" + ], + "center": [], + "linkStore": [ + { + "item": "500_500", + "bay": 0, + "level": 0, + "cell": 0, + "direction": "up" + } + ] + } + }, + { + "id": "12_10", + "t": "way", + "v": true, + "logicX": 12, + "logicY": 10, + "logicZ": 1, + "tf": [ + [ + 3.9, + 0, + 2.13 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_10" + ], + "out": [ + "11_10" + ], + "center": [], + "linkStore": [ + { + "item": "502_500", + "bay": 0, + "level": 0, + "cell": 0, + "direction": "up" + } + ] + } + }, + { + "id": "11_10", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 10, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 2.13 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "10_10", + "11_11", + "12_10" + ], + "out": [ + "10_10", + "11_11", + "12_10" + ], + "center": [], + "agvRotation": [ + "cl2", + "clx" + ] + } + }, + { + "id": "11_11", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 11, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 2.832 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_10", + "11_13" + ], + "out": [ + "11_10", + "11_13" + ], + "center": [] + } + }, + { + "id": "11_13", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 13, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 3.932 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_11", + "11_15" + ], + "out": [ + "11_11", + "11_15" + ], + "center": [], + "linkStore": [ + { + "item": "rack1", + "bay": 3, + "level": 2, + "cell": 0, + "direction": "right" + } + ] + } + }, + { + "id": "11_15", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 15, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 4.582 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_13", + "11_16" + ], + "out": [ + "11_13", + "11_16" + ], + "center": [] + } + }, + { + "id": "11_16", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 16, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 5.232 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_15", + "11_17" + ], + "out": [ + "11_15", + "11_17" + ], + "center": [], + "linkStore": [ + { + "item": "rack1", + "bay": 2, + "level": 2, + "cell": 0, + "direction": "right" + } + ] + } + }, + { + "id": "11_17", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 17, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 5.882 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_16", + "11_18" + ], + "out": [ + "11_16", + "11_18" + ], + "center": [] + } + }, + { + "id": "11_18", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 18, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 6.532 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_17", + "11_20" + ], + "out": [ + "11_17", + "11_20" + ], + "center": [], + "linkStore": [ + { + "item": "rack1", + "bay": 1, + "level": 1, + "cell": 0, + "direction": "right" + } + ] + } + }, + { + "id": "11_20", + "t": "way", + "v": true, + "logicX": 11, + "logicY": 20, + "logicZ": 1, + "tf": [ + [ + 2.7, + 0, + 7.75 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "11_18", + "charger1" + ], + "out": [ + "11_18", + "charger1" + ], + "center": [], + "linkStore": [ + { + "item": "rack1", + "bay": 0, + "level": 2, + "cell": 0, + "direction": "right" + } + ] + } + }, + { + "id": "13_10", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 10, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 2.13 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_12" + ], + "out": [ + "13_12" + ], + "center": [] + } + }, + { + "id": "13_12", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 12, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 2.865 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_10", + "13_13" + ], + "out": [ + "13_10", + "13_13" + ], + "center": [], + "linkStore": [ + { + "item": "504_501", + "bay": 0, + "level": 0, + "cell": 0, + "direction": "right" + } + ] + } + }, + { + "id": "13_13", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 13, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 3.932 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_12", + "13_14" + ], + "out": [ + "13_12", + "13_14" + ], + "center": [], + "linkStore": [ + { + "item": "rack1", + "bay": 3, + "level": 1, + "cell": 0, + "direction": "left" + } + ] + } + }, + { + "id": "13_14", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 14, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 4.348 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_13", + "13_16" + ], + "out": [ + "13_13", + "13_16" + ], + "center": [], + "linkStore": [ + { + "item": "504_503", + "bay": 0, + "level": 0, + "cell": 0, + "direction": "right" + } + ] + } + }, + { + "id": "13_16", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 16, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 5.232 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_14", + "13_17" + ], + "out": [ + "13_14", + "13_17" + ], + "center": [], + "agvRotation": [ + "cl2", + "clx" + ], + "linkStore": [ + { + "item": "rack1", + "bay": 2, + "level": 1, + "cell": 0, + "direction": "left" + } + ] + } + }, + { + "id": "13_17", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 17, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 5.882 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_16", + "13_18" + ], + "out": [ + "13_16", + "13_18" + ], + "center": [] + } + }, + { + "id": "13_18", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 18, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 6.532 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_17", + "13_19" + ], + "out": [ + "13_17", + "13_19" + ], + "center": [], + "linkStore": [ + { + "item": "rack1", + "bay": 1, + "level": 1, + "cell": 0, + "direction": "left" + } + ] + } + }, + { + "id": "13_19", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 19, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 6.744 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_18", + "13_20" + ], + "out": [ + "13_18", + "13_20" + ], + "center": [], + "linkStore": [ + { + "item": "504_506", + "bay": 0, + "level": 0, + "cell": 0, + "direction": "right" + } + ] + } + }, + { + "id": "13_20", + "t": "way", + "v": true, + "logicX": 13, + "logicY": 20, + "logicZ": 1, + "tf": [ + [ + 5.65, + 0, + 7.75 + ], + [ + 0, + 0, + 0 + ], + [ + 0.25, + 0.1, + 0.25 + ] + ], + "dt": { + "in": [ + "13_19", + "charger2" + ], + "out": [ + "13_19", + "charger2" + ], + "center": [], + "linkStore": [ + { + "item": "rack1", + "bay": 0, + "level": 1, + "cell": 0, + "direction": "left" + } + ] + } + }, + { + "id": "502_500", + "t": "gstore", + "v": true, + "tf": [ + [ + 3.9, + 0, + 0.63 + ], + [ + 0, + 90, + 0 + ], + [ + 1, + 0.01, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "strokeWidth": 0.1 + } + }, + { + "id": "500_500", + "t": "gstore", + "v": true, + "tf": [ + [ + 1.5, + 0, + 0.63 + ], + [ + 0, + 90, + 0 + ], + [ + 1, + 0.01, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "strokeWidth": 0.1 + }, + "name": "礼品托盘位" + }, + { + "id": "504_501", + "t": "gstore", + "v": true, + "tf": [ + [ + 7.1, + 0, + 2.865 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 0.01, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "strokeWidth": 0.1 + } + }, + { + "id": "504_503", + "t": "gstore", + "v": true, + "tf": [ + [ + 7.1, + 0, + 4.35 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 0.01, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "strokeWidth": 0.1 + }, + "name": "出库站点" + }, + { + "id": "504_506", + "t": "gstore", + "v": true, + "tf": [ + [ + 7.1, + 0, + 6.75 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 0.01, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "strokeWidth": 0.1 + }, + "name": "入库站点" + }, + { + "id": "charger1", + "t": "way", + "v": true, + "tf": [ + [ + 2.696, + 0, + 8.75 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 1, + 1 + ] + ], + "dt": { + "in": [ + "11_20" + ], + "out": [ + "11_20" + ], + "chargerPortDirection": "up", + "center": [], + "isCharger": true + } + }, + { + "id": "charger2", + "t": "way", + "v": true, + "tf": [ + [ + 5.655, + 0, + 8.75 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 1, + 1 + ] + ], + "dt": { + "in": [ + "13_20" + ], + "out": [ + "13_20" + ], + "chargerPortDirection": "up", + "center": [], + "isCharger": true + } + }, + { + "id": "carton0", + "t": "carton", + "v": true, + "tf": [ + [ + 4.196, + 0.25, + 7.794499999999999 + ], + [ + 0, + 180, + 0 + ], + [ + 1.2, + 1, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "storeAt": { + "item": "rack1", + "bay": 0, + "level": 0, + "cell": 0 + } + } + }, + { + "id": "carton1", + "t": "carton", + "v": true, + "tf": [ + [ + 4.196, + 0.25, + 6.5195 + ], + [ + 0, + 180, + 0 + ], + [ + 1.2, + 1, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "storeAt": { + "item": "rack1", + "bay": 1, + "level": 0, + "cell": 0 + } + } + }, + { + "id": "carton2", + "t": "carton", + "v": true, + "tf": [ + [ + 4.196, + 0.25, + 5.2444999999999995 + ], + [ + 0, + 180, + 0 + ], + [ + 1.2, + 1, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "storeAt": { + "item": "rack1", + "bay": 2, + "level": 0, + "cell": 0 + } + } + }, + { + "id": "carton3", + "t": "carton", + "v": true, + "tf": [ + [ + 4.196, + 0.25, + 3.9695 + ], + [ + 0, + 180, + 0 + ], + [ + 1.2, + 1, + 1 + ] + ], + "dt": { + "in": [], + "out": [], + "center": [], + "storeAt": { + "item": "rack1", + "bay": 3, + "level": 0, + "cell": 0 + } + } + } +] \ No newline at end of file diff --git a/jx_test/project.json b/jx_test/project.json new file mode 100644 index 0000000..8a74090 --- /dev/null +++ b/jx_test/project.json @@ -0,0 +1,53 @@ +{ + "projectUuid" : "jx_cd", + "projectLabel" : "嘉兴测试场地", + "subSystemList" : [ "RCS" ], + "projectFileLocation" : "", + "directoryData" : [ { + "label" : "仓库楼层", + "items" : [ { + "catalogCode" : "f1", + "label" : "一楼 (f1)" + } ] + } ], + "otherData" : { + "Tool" : { + "Group" : [ ], + "GlobalVariables" : [ ], + "UserCommand" : [ ], + "Dashboard" : [ ], + "DataTable" : [ ], + "Trigger" : [ { + "name" : "OnOpen", + "fn" : "" + }, { + "name" : "OnReset", + "fn" : "" + }, { + "name" : "OnStart", + "fn" : "" + }, { + "name" : "OnStop", + "fn" : "" + } ], + "gridHelper" : { + "axesEnabled" : true, + "axesSize" : 5, + "axesColor" : 11184810, + "axesWidth" : 2, + "groundColor" : 16777215, + "gridEnabled" : true, + "gridSize" : 1000, + "gridDivisions" : 1000, + "gridColor" : 14540253, + "gridOpacity" : 1, + "backgroundColor" : 16119285, + "snapEnabled" : true, + "snapDistance" : 0.25 + } + }, + "elevator" : [ ], + "wall" : [ ], + "pillar" : [ ] + } +} diff --git a/jx_test/scripts/CL2_DEMO.ts b/jx_test/scripts/CL2_DEMO.ts new file mode 100644 index 0000000..2f35439 --- /dev/null +++ b/jx_test/scripts/CL2_DEMO.ts @@ -0,0 +1,61 @@ +const gstore = '105_105' +const agvId = '3' +const demoLocList = ['rack1/1/1/0', 'rack2/0/1/0', 'rack2/1/1/0'] +const demoLocList2 = [ 'rack1/1/1/0', 'rack2/0/1/0', 'rack2/1/1/0' ].reverse() + +while (true) { + + const [dd] = (await LCC.queryInv({ rack: gstore })).data + if (dd) { + // 地堆上有托盘, 找一个空货位放过去 + LCC.log('地堆上有托盘') + for (const loc of demoLocList) { + const [rack, bay, level] = loc.split('/') + if (!rack) { + continue; + } + const [emptyLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (!emptyLoc) { + // 这是一个好位置 + LCC.log(`RCS.agvCarry('${agvId}', '${gstore}', '${loc}')`) + await RCS.agvCarry(agvId, gstore, loc) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + break; + } + } + + + } else { + // 地上没有托盘位, 找个位置拖过去 + const [carInv] = (await LCC.queryInv({ rack: agvId, bay: 0, level: 0, cell: 0 })).data + if (carInv) { + LCC.log('托盘在车上') + LCC.log(`RCS.agvUnload('${agvId}', '${gstore}')`) + await RCS.agvUnload(agvId, gstore) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + continue; + } else { + LCC.log('托盘在货架') + } + + let has = false + for (const loc of demoLocList2) { + const [rack, bay, level, cell] = loc.split('/') + const [palletLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (palletLoc) { + has = true + LCC.log(`RCS.agvCarry('${agvId}', '${loc}', '${gstore}')`) + await RCS.agvCarry(agvId, loc, gstore) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + break + } + } + + if (!has) { + LCC.log('货架没有空托盘,无法执行') + } + } +} \ No newline at end of file diff --git a/jx_test/scripts/CLX_DEMO.ts b/jx_test/scripts/CLX_DEMO.ts new file mode 100644 index 0000000..cd0637a --- /dev/null +++ b/jx_test/scripts/CLX_DEMO.ts @@ -0,0 +1,61 @@ +const gstore = '108_108' +const agvId = '4' +const demoLocList = ['rack3/0/1/0', 'rack3/1/1/0', 'rack3/0/2/0', 'rack3/1/2/0'] +const demoLocList2 = ['rack3/0/1/0', 'rack3/1/1/0', 'rack3/0/2/0', 'rack3/1/2/0'].reverse() + +while (true) { + await LCC.sleep(3000) + const [dd] = (await LCC.queryInv({ rack: gstore })).data + if (dd) { + // 地堆上有托盘, 找一个空货位放过去 + for (const loc of demoLocList) { + const [rack, bay, level] = loc.split('/') + if (!rack) { + continue; + } + const [emptyLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (!emptyLoc) { + // 这是一个好位置 + LCC.log('agvCarry', gstore, loc) + await RCS.agvCarry(agvId, gstore, loc) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + break; + } + } + + + } else { + // 地上没有托盘位, 找个位置拖过去 + const [carInv] = (await LCC.queryInv({ rack: agvId, bay: 0, level: 0, cell: 0 })).data + if (carInv) { + LCC.log('托盘在车上') + LCC.log(`RCS.agvUnload('${agvId}', '${gstore}')`) + await RCS.agvUnload(agvId, gstore) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + continue; + } else { + LCC.log('托盘在货架') + } + + let has = false + for (const loc of demoLocList2) { + const [rack, bay, level, cell] = loc.split('/') + const [palletLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (palletLoc) { + has = true + + LCC.log(`RCS.agvCarry('${agvId}', '${loc}', '${gstore}')`) + await RCS.agvCarry(agvId, loc, gstore) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + break + } + } + + if (!has) { + LCC.log('货架没有空托盘,无法执行') + } + } +} diff --git a/jx_test/scripts/ZH_CL2.ts b/jx_test/scripts/ZH_CL2.ts new file mode 100644 index 0000000..b75d3ec --- /dev/null +++ b/jx_test/scripts/ZH_CL2.ts @@ -0,0 +1,85 @@ +const gstore = '504_501' +const agvId = '1' +const demoLocList = ['rack1/0/1/0', 'rack1/1/1/0', 'rack1/2/1/0', 'rack1/3/1/0'] + +while (true) { + const [carInv] = (await LCC.queryInv({ rack: agvId, bay: 0, level: 0, cell: 0 })).data + const [dd] = (await LCC.queryInv({ rack: gstore })).data + // demoLocList.reverse() + + + if (dd) { + // 地堆上有托盘, 找一个空货位放过去 + LCC.log('地堆上有托盘') + const freeLoc = await findFreeLoc() + if (carInv) { + // 托盘在车上 + LCC.log('托盘在车上') + LCC.log(`RCS.agvUnload('${agvId}', '${freeLoc}')`) + await RCS.agvUnload(agvId, freeLoc) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + continue + } + + LCC.log(`RCS.agvCarry('${agvId}', '${gstore}', '${freeLoc}')`) + await RCS.agvCarry(agvId, gstore, freeLoc) + await RCS.waitTaskFinish(agvId) + + } else { + // 地上没有托盘位, 找个位置拖过去 + if (carInv) { + // 托盘在车上 + LCC.log('托盘在车上') + LCC.log(`RCS.agvUnload('${agvId}', '${gstore}')`) + await RCS.agvUnload(agvId, gstore) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + continue + } + + const invLoc = await findRackInvLoc() + if (!invLoc) { + LCC.log('货架没有托盘,无法执行') + } else { + LCC.log(`RCS.agvCarry('${agvId}', '${invLoc}', '${gstore}')`) + await RCS.agvCarry(agvId, invLoc, gstore) + await RCS.waitTaskFinish(agvId) + } + } + + await LCC.sleep(1000) +} + +async function findFreeLoc() { + for (const loc of shuffleArray(demoLocList)) { + const [rack, bay, level] = loc.split('/') + if (!rack) { + continue + } + const [emptyLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (!emptyLoc) { + // 这是一个好位置 + return loc + } + } +} + +async function findRackInvLoc() { + for (const loc of shuffleArray(demoLocList)) { + const [rack, bay, level, cell] = loc.split('/') + const [palletLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (palletLoc) { + return loc + } + } +} + +// 打乱数组顺序的函数 +function shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); // 随机选择一个位置 j + [array[i], array[j]] = [array[j], array[i]] // 交换元素 + } + return array +} diff --git a/jx_test/scripts/ZH_CLX.ts b/jx_test/scripts/ZH_CLX.ts new file mode 100644 index 0000000..089b14a --- /dev/null +++ b/jx_test/scripts/ZH_CLX.ts @@ -0,0 +1,85 @@ +const gstore = '500_500' +const agvId = '2' +const demoLocList = ['rack1/0/2/0', 'rack1/1/2/0', 'rack1/2/2/0', 'rack1/3/2/0'] + +while (true) { + const [carInv] = (await LCC.queryInv({ rack: agvId, bay: 0, level: 0, cell: 0 })).data + const [dd] = (await LCC.queryInv({ rack: gstore })).data + // demoLocList.reverse() + + + if (dd) { + // 地堆上有托盘, 找一个空货位放过去 + LCC.log('地堆上有托盘') + const freeLoc = await findFreeLoc() + if (carInv) { + // 托盘在车上 + LCC.log('托盘在车上') + LCC.log(`RCS.agvUnload('${agvId}', '${freeLoc}')`) + await RCS.agvUnload(agvId, freeLoc) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + continue + } + + LCC.log(`RCS.agvCarry('${agvId}', '${gstore}', '${freeLoc}')`) + await RCS.agvCarry(agvId, gstore, freeLoc) + await RCS.waitTaskFinish(agvId) + + } else { + // 地上没有托盘位, 找个位置拖过去 + if (carInv) { + // 托盘在车上 + LCC.log('托盘在车上') + LCC.log(`RCS.agvUnload('${agvId}', '${gstore}')`) + await RCS.agvUnload(agvId, gstore) + await RCS.waitTaskFinish(agvId) + await LCC.sleep(1000) + continue + } + + const invLoc = await findRackInvLoc() + if (!invLoc) { + LCC.log('货架没有托盘,无法执行') + } else { + LCC.log(`RCS.agvCarry('${agvId}', '${invLoc}', '${gstore}')`) + await RCS.agvCarry(agvId, invLoc, gstore) + await RCS.waitTaskFinish(agvId) + } + } + + await LCC.sleep(1000) +} + +async function findFreeLoc() { + for (const loc of shuffleArray(demoLocList)) { + const [rack, bay, level] = loc.split('/') + if (!rack) { + continue + } + const [emptyLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (!emptyLoc) { + // 这是一个好位置 + return loc + } + } +} + +async function findRackInvLoc() { + for (const loc of shuffleArray(demoLocList)) { + const [rack, bay, level, cell] = loc.split('/') + const [palletLoc] = (await LCC.queryInv({ rack, bay: parseInt(bay), level: parseInt(level) })).data + if (palletLoc) { + return loc + } + } +} + +// 打乱数组顺序的函数 +function shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); // 随机选择一个位置 j + [array[i], array[j]] = [array[j], array[i]] // 交换元素 + } + return array +} diff --git a/jx_test/scripts/all_test.ts b/jx_test/scripts/all_test.ts new file mode 100644 index 0000000..b995987 --- /dev/null +++ b/jx_test/scripts/all_test.ts @@ -0,0 +1,35 @@ +// 初始 6_2 的右姿态,转到 6_2 的左姿态 +await RCS.cancelTasks('3'); +await RCS.agvMove('3', '4_2', '', { priority: 1, forceStartWayPointId: '6_2', forceStartDirection: 'RIGHT' }) + +/* 立刻载货 */ +await RCS.cancelTasks('3'); +await RCS.agvLoad('3', '105_105', { priority: 1, forceStartWayPointId: '4_2', forceStartDirection: 'LEFT' }) + +/* 立刻卸货 */ +await RCS.cancelTasks('3'); +await RCS.agvUnload('3', '105_105', { priority: 1, forceStartWayPointId: '4_2', forceStartDirection: 'LEFT' }) + +/* 3_2 -> 2_2 -> 1_2 */ +await RCS.cancelTasks('3'); +await RCS.agvMove('3', '1_2', '', { priority: 1, forceStartWayPointId: '4_2', forceStartDirection: 'LEFT' }) + +/* 5_2 -> 4_2 -> 3_2 -> 2_2 -> 1_2 -> load -> 2_2 -> unload */ +await RCS.cancelTasks('3'); +await RCS.agvCarry('3', 'rack1/0/0/0', 'rack1/1/0/0', { priority: 1, forceStartWayPointId: '6_2', forceStartDirection: 'RIGHT' }) + +/* 5_2 -> 4_2 -> 3_2 -> 2_2 -> 1_2 -> load -> 2_2 -> 3_2 -> 4_2 -> 5_2 -> 6_2 -> Rotation180 -> 5_2 -> 4_2 -> unload */ +await RCS.cancelTasks('3'); +await RCS.agvCarry('3', 'rack1/0/0/0', '105_105', { priority: 1, forceStartWayPointId: '6_2', forceStartDirection: 'RIGHT' }) + +/* 5_2 -> 4_2 -> 3_2 -> 2_2 -> 1_2 -> load */ +await RCS.cancelTasks('3'); +await RCS.agvLoad('3', 'rack1/0/0/0', { priority: 1, forceStartWayPointId: '6_2', forceStartDirection: 'RIGHT' }) + +/* 4_2 -> 5_2 -> 6_2 -> Rotation180 -> 5_2 -> 4_2 -> load */ +await RCS.cancelTasks('3'); +await RCS.agvLoad('3', '105_105', { priority: 1, forceStartWayPointId: '3_2', forceStartDirection: 'RIGHT' }) + +/* Rotation180 -> 5_2 -> 4_2 -> unload */ +await RCS.cancelTasks('3'); +await RCS.agvUnload('3', '105_105', { priority: 1, forceStartWayPointId: '6_2', forceStartDirection: 'RIGHT' }) \ No newline at end of file diff --git a/jx_test/scripts/charger.ts b/jx_test/scripts/charger.ts new file mode 100644 index 0000000..67e11d9 --- /dev/null +++ b/jx_test/scripts/charger.ts @@ -0,0 +1,3 @@ +await RCS.cancelTasks('3') +await RCS.agvToCharger('3', 'charger1') +// await RCS.agvInfo('4'); \ No newline at end of file diff --git a/jx_test/scripts/run1.ts b/jx_test/scripts/run1.ts new file mode 100644 index 0000000..58a1bcc --- /dev/null +++ b/jx_test/scripts/run1.ts @@ -0,0 +1,26 @@ +// const v = await RCS.agvCarry('3', 'rack1/1/1/0', 'rack2/1/1/0', { priority: 1 }) +// await RCS.agvCarry('3', 'rack2/0/1/0', 'rack2/1/1/0') +// await RCS.agvCarry('3', 'rack2/1/1/0', 'rack2/0/1/0') +// await RCS.cancelTasks('3') +// await RCS.agvUnload('3', 'rack2/0/1/0') +// const v = await RCS.agvCarry('3', 'rack1/0/1/0', '105_105', { priority: 1 }) +// const v = await RCS.agvCarry('3','rack2/0/0/0', '105_105', { priority: 1 }) +// await RCS.agvCarry('3', 'rack2/0/1/0', '105_105', { priority: 1 }) +// await RCS.agvCarry('3', '105_105', 'rack1/1/1/0', { priority: 1 }) +// await RCS.agvCarry('3','rack1/1/1/0','105_105', { priority: 1 }) +// const v = await RCS.agvMove('3', '6_4', 'LEFT') +// const v = await RCS.agvMove('4', '5_4', 'LEFT') +// await RCS.cancelTasks('3') +// await RCS.agvMove('3', '10_4', 'RIGHT') +// const v = await RCS.agvMove('3', '8_4', 'LEFT') +// await RCS.agvInfo('4') +// await RCS.cancelTasks("4") +// await RCS.agvMove('4', '1_4', 'RIGHT') +// const v = await RCS.agvCarry('4', '108_108/0/0/0', 'rack3/0/1/0', { priority: 1 }) +const v = await RCS.agvUnload('4', '108_108/0/0/0', { priority: 1 }) + +// const v = await RCS.agvCarry('4', 'rack3/0/1/0', 'rack3/1/2/0', { priority: 1 }) + +// await LCC.moveInv('TP001', 'AGV_3') + + diff --git a/tw_zh/envs/13.json b/tw_zh/envs/13.json index f8d8006..6f86e9c 100644 --- a/tw_zh/envs/13.json +++ b/tw_zh/envs/13.json @@ -4,10 +4,10 @@ "isVirtual": true, "envConfig": { "mqtt": { - "brokerUrl": "tcp://127.0.0.1:1883", + "brokerUrl": "tcp://10.10.101.8:1883", "username": "user", "password": "user", - "websocket": "mqtt://127.0.0.1:7883" + "websocket": "mqtt://10.10.101.8:7883" }, "mysql": { "jdbc-url": "jdbc:p6spy:mysql://180.100.199.56:8306/rcs2_tw_zhanghui",