EC机器人简单码垛(4点法)

2025-07-02

简介

该文档适用于👽漫蛙机🎀器人🕑EC/EA系列机械臂,可【kě】用于一些机械臂码【xiè bì mǎ】垛应用【duǒ yīng yòng】场景。该码垛程序包使用时只需要🏛设置码盘的🍩4个对角点的物【diǎn de wù】料位置【liào wèi zhì】,以及物🥫料总数【liào zǒng shù】🤨,码盘层数【shù】,层高即【céng gāo jí】😋可【kě】,操作简🐔单【dān】🚠,实用易懂。初始程序包是【xù bāo shì】由陈瞭【yóu chén liǎo】编写📶。

1 仅码垛

仅码垛【jǐn mǎ duǒ】💦的意思就是该😖程序只【chéng xù zhī】支持码垛【duǒ】,单点取👮料放入码盘中

1.1 操作步骤及所需变量

(1)使用前需打开以下变量:

V158 //码垛上方位

V159 //码垛位

P150 //码盘第一个点

P151 //码盘第二个点

P152 //码盘第三个点

P153 //码盘第四个点

I 100 //码垛计数

(2)将【jiāng】JBI主程序和子程【hé zǐ chéng】🔣序导入【rù】🕝到机械🚋臂里面【bì lǐ miàn】,LUA程序导入【rù】🕝机械臂并保存设置。

(3)打开JBI子程序【zǐ chéng xù】,更新🌻P150-153这【zhè】4个点位,点位设🌂置示意🧘图如下【tú rú xià】:

(4)设置好子程序🤥里面【lǐ miàn】 I150-153 等参数,参数解【cān shù jiě】析如下Ⓜ:

I150 第一个方向个数(行数)

I151 第二个方向个数(列数)

I152 Z方向层数

I153 单层层高,单位mm

(5)在【zài】🏠JBI主程序🐱里面【lǐ miàn】,设置固定抓取【dìng zhuā qǔ】点,固定抓取【dìng zhuā qǔ】点的🎆位置为第👹17行

(6)将机械【jiāng jī xiè】臂程序【chéng xù】运行模🚚式设置为 “ 连续循环🐃 “ 模式【mó shì】🥀,运行主程序【chéng xù】


1.2 JBI程序

● 主程序

该程序是主运行程序(JBI),无需修改


NOP
CALL JOB:test_pallet_setting
//调用子程序
RESTARTLUA INDEX=1
//B000与后台LUA交互【jiāo hù】
//1:计算码垛【mǎ duǒ】⬜
//2:计算拆垛【duǒ】📁
SET B000 0
//I100 当前码🗾垛【duǒ】📁个数
SET I100 1

LABEL *startpallet
SET B000 1
TIMER T=0.1 S
WAIT B000 = 0
// 此处需增加固【zēng jiā gù】定点抓【dìng diǎn zhuā】🍸取程序⬇

// V158为当前计算得到的码垛【mǎ duǒ】⬜点
// v159 上方偏移【yí】30mm
SET V159 V158
CCOOD CART
ADD V159(2) 30

//码垛【mǎ duǒ】⬜
MOVL V159 V=1000MM/S CR=10.0MM ACC=50 DEC=50
MOVL V158 V=100MM/S CR=0.0MM ACC=50 DEC=50
TIMER T=0.5 S
MOVL V159 V=1000MM/S CR=0.0MM ACC=50 DEC=50
INC I100
JUMP *startpallet IF I100<I159
END


● 子程序

在该程🐮序里面🥢设置码盘【pán】4个对角🍻点点位⭐,码垛层【mǎ duǒ céng】数【shù】,层高,码垛总【mǎ duǒ zǒng】个数【shù】(JBI)

NOP

// 以下为🥟码垛设🔣置部分😀
// **************
// 150-159用于码【yòng yú mǎ】💡垛
// P150 startpose 第一个【dì yī gè】💂点
// P151 rowpose  第一个【dì yī gè】💂方向的🔢末端点【mò duān diǎn】🚼
// P152 columnpose  第二个【dì èr gè】方向的🔢末端点【mò duān diǎn】🚼
// P153 refpose  远端点
//P150---------->P152
// |  第二个【dì èr gè】方向    |
// |              |
// |              |
//第一个【dì yī gè】💂方向        |
// |               |
//P151  -------- P153
SETJOINT P150 -13.5978,-104.8072,145.8060,-129.0093,134.8434,-180.1184
SETJOINT P151 -47.0715,-104.5984,133.2336,-88.6142,125.0733,-222.4587
SETJOINT P152 -5.5062,-53.8769,86.6584,-128.8164,134.5548,-168.7319
SETJOINT P153 -23.4796,-55.2147,81.2515,-104.4537,133.6682,-193.8322
// I150 第一个【dì yī gè】💂方向个【fāng xiàng gè】🖥数【shù】🛅
// I151 第二个【dì èr gè】方向个【fāng xiàng gè】🖥数【shù】🛅
// I152 Z方向层【fāng xiàng céng】👲数【shù】🛅
// I153 单层层【dān céng céng】高【gāo】🐂,单位mm
SET I150 3
SET I151 4
SET I152 2
SET I153 50
// **************
// 以上为码垛【wéi mǎ duǒ】设🔣置部分😀

//以下部分无需【fèn wú xū】设置和修改
JOINTTOPOSE P150 V150
JOINTTOPOSE P151 V151
JOINTTOPOSE P152 V152
JOINTTOPOSE P153 V153
SET I159 I150
MUL I159 I151
MUL I159 I152
INC I159
// I159为码垛【wéi mǎ duǒ】总个数【shù】🛅
TPWRITE FinishSetting
END


1.3 Lua程序

该lua脚本在🎓机器人【jī qì rén】后台运【hòu tái yùn】行即可🛎,无需修🎈改【gǎi】(LUA)


-- 1st pallet direction:  startpos--->rowpos

-- 2nd pallet direction:  startpos--->columnpos

-- 3rd pallet direction:  startpos--->Z direction


-- startpos(1)   ------ columnpos(2)

--    |

--    |

--    |

-- rowpos(3)             refpos(4)


-- count:        current pallet number   global variable :I100

-- count_row:    total row number        global variable :I150

-- count_column: total column nubmer     global variable :I151

-- count_layer:  total layer  nubmer     global variable :I152

-- height:       single layer height     global variable :I153

-- startpos                              global variable :V150

-- rowpos                                global variable :V151

-- columnpos                             global variable :V152

-- refpos                                global variable :V153


-- outpos  : calculation result          global variable :V160


function Interpolate_pose(p_from, p_to, alpha)

    -- Linear interpolation of tool position

    -- When alpha is 0, returns p_from. When alpha is 1, returns p_to. As alpha goes from 0 to 1, returns a

    -- pose going in a straight line from p_from to p_to.

    -- If alpha is less than 0, returns a point before p_from on the line.

    -- If alpha is greater than 1, returns a pose after p_to on the line.

    local p = }

    local rowpos = get_global_variable(j_rowpos)}

    local refpos = get_global_variable(j_refpos)}

    p[1] = p_from[1] + (p_to[1] - p_from[1]) * alpha

    p[2] = p_from[2] + (p_to[2] - p_from[2]) * alpha

    p[3] = p_from[3] + (p_to[3] - p_from[3]) * alpha

    p[4] = p_from[4]

    p[5] = p_from[5]

    p[6] = p_from[6]

    return p

end


function WaitUntil(var, value)

    --local vtmp =

    while get_global_variable(var) ~= value do

        sleep(0.05)

    end

end

--set_global_variable("B0", 0)


function 

PalletCal(j_count,j_row,j_column,j_height,j_startpos,j_rowpos,j_columnpos,j_refpos)

    local count = get_global_variable(j_count)

    local count_row = get_global_variable(j_row)

    local count_column = get_global_variable(j_column)

    local layer_height = get_global_variable(j_height)



    local startpos = get_global_variable(j_startpos)}

    local columnpos = get_global_variable(j_columnpos)}


    local current_layer = math.floor((count - 1) / (count_row*count_column))

    count = math.fmod(count-1, (count_row*count_column)) +1 --获取在当前层【dāng qián céng】🌡第几个

    local current_row = math.fmod(count - 1, count_row) -- 取余数【qǔ yú shù】📒  get residual

    local current_column = math.floor((count - 1) / count_row) -- 取整数【qǔ zhěng shù】🐽 get integer+1

    if(count_row==1)  then

        count_row =2

    end

    if(count_column==1)  then

        count_column =2

    end

    local outpos1 = Interpolate_pose(startpos, rowpos, current_row / (count_row - 1))

    local outpos2 = Interpolate_pose(columnpos, refpos, current_row / (count_row - 1))

    local outpos3 = Interpolate_pose(outpos1, outpos2, current_column / (count_column - 1))


    outpos3[3] = outpos3[3] + layer_height * current_layer

    return outpos3

end


while true do

    local state = get_global_variable('B0')

    if state ==1 then

        -- 码垛【mǎ duǒ】🎌

        local outpos3 =PalletCal("I100","I150","I151","I153","V150","V151","V152","V153")

        set_global_variable('V158',outpos3[1],outpos3[2],outpos3[3],outpos3[4],outpos3[5],outpos3[6])

        state = 0

        set_global_variable("B0", 0)


    elseif state == 2 then

        -- 拆垛【chāi duǒ】⛎

        local outpos3 =PalletCal("I101","I160","I161","I163","V160","V161","V162","V163")

        set_global_variable('V168',outpos3[1],outpos3[2],outpos3[3],outpos3[4],outpos3[5],outpos3[6])

        state = 0

        set_global_variable("B0", 0)

    end

    sleep(0.01)

end



附件

1.  仅码垛

(1)简易说明

reademe.md

(2)LUA脚本程序

pallet_maduo.lua

(3)JBI程序

主程序:

test_pallet_only_maduo.jbi

子程序:

test_pallet_setting_only_maduo.jbi

2.  码垛与拆垛

(1)简易说明

reademe.md

(2)LUA脚本程序

pallet_calculation2.lua

(3)JBI程序

主程序

test_pallet.jbi

子程序

test_pallet_setting2.jbi



download-669.svg comicon14.svg

电话咨询

download-397.svg comicon15.svg

免费试用

Vector.svg Frame.svg

微信小程序

img1.jpg

微信小程序

准备好突破增长瓶颈,开启智能制造了吗?
了解我们的机器人如何帮助您的业务增长
欢迎下载漫蛙机器人资料

我已阅读并同意漫蛙《隐私政策》《法律声明》

我已知【wǒ yǐ zhī】📚晓并同【xiǎo bìng tóng】意漫蛙【yì màn wā】🕺通过电子邮件发送相关资料🏚

提交