12 changed files with 1802 additions and 2 deletions
@ -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" |
|||
} |
|||
} |
|||
} |
|||
@ -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 |
|||
} |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
@ -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" : [ ] |
|||
} |
|||
} |
|||
@ -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('货架没有空托盘,无法执行') |
|||
} |
|||
} |
|||
} |
|||
@ -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('货架没有空托盘,无法执行') |
|||
} |
|||
} |
|||
} |
|||
@ -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 |
|||
} |
|||
@ -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 |
|||
} |
|||
@ -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' }) |
|||
@ -0,0 +1,3 @@ |
|||
await RCS.cancelTasks('3') |
|||
await RCS.agvToCharger('3', 'charger1') |
|||
// await RCS.agvInfo('4');
|
|||
@ -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')
|
|||
|
|||
|
|||
Loading…
Reference in new issue