首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scara机器人应用

01

接线布局

电源供电,动力,IO,气管等,具体需要用到的按照说明处理

02

建立通讯

通讯方式总共有种方式:串口、TCP ip和USB,其中tcp ip记得设置子网掩码和指定一下网关,并在DHCP服务器绑定一下ip比较好

03

创建方案与程序并建立链接

强制密钥认证是按Ctrl+alt+m+s;

Function point

主要功能点

01

点动和示教点位

通常用大地坐标系,每次点动距离,速度运行百分比,运动方式选择关节或者直线运动等方式~

变量点可以定位1024个点,每个定位进行示教点动

02

IO点位说明

MS-F,走的是NPN方式,

标准IO:24个输入,12个输出;

系统IO:8个输入,12个输出

03

位置点位以及专案都可以进行导入导出的,

在常用下的,点位表,档案控制程序

03

参数修改

其中机械手当中的轴增益以及效应和伺服驱动器的类似

编程定义,可尺寸NC嘛功能

变量定义:功能模块定义

定义点:

逻辑指令

运动指令

DI ,DO操作

程序示例

变量定义:

Count_OK    = ModbusRead16(0x2200)        --OK托盘计数

Count_NG    = ModbusRead16(0x2300)        --NG托盘计数

定位几个运动点位:

Reast_Point                = 1     --复位点

Qu_PiDai                = 5     --取皮带点  

Fang_JianCeTai            = 6     --放检测台点

Qu_JianCeTai            = 7     --取检测台点

JianCeFanMian            = 8     --底面相机检测点

Fang_OK1                = 9    --放OK料托盘点1

Fang_OK2                = 10   --放OK料托盘点2

Fang_NG1                = 12     --放NG料托盘点1

Fang_NG2                = 13     --放NG料托盘点2

QuHouDuJianCe1          = 15

QuHouDuJianCe2          = 16

JianCeDian1             = 17

JianCeDian2             = 18

XuanZhuan180            = 19

QuHouDuJianCe3          = 20

xuanzhuan1201           = 21

xuanzhuan1202           = 22

jiancedian3             = 23

jiancedian4             = 24

托盘以及安全高度定义

PalletDef(1,1,1,31,9,9,9,9,10)            --OK放料托盘

PalletDef(2,1,1,31,12,12,12,12,13)            --NG放料托盘

Safe_Height  =  -200  

Safe_Height2  =  -10

初始化并对机器人进行上电

ServoOn(13)

ServoOn(14)

ServoOn(15)

ServoOn(16)     --四个轴上电

ModbusWrite16(0x01FE, 1)            --清除报警

para.Write(0, 1, 7, 0x0FFF0000)        --IO控制器程序控制

Init_Move()    --复位移动

主程序循环:

::LB_CONTINUE::

ModbusWrite16(0x2107,Count_OK)             --OK计数发送PLC

ModbusWrite16(0x2108,Count_NG)               --NG计数发送PLC

  if ModbusRead16(0x2002) == 2 then    --手动清除OK下料台件数

     ModbusWrite16(0x2200,1)

     Count_OK    = ModbusRead16(0x2200)        --OK托盘计数

     ModbusWrite16(0x2102,2)

     repeat until ModbusRead16(0x2002) == 0

     ModbusWrite16(0x2102,0)

  end

  if ModbusRead16(0x2003) == 2 then    --手动清除NG下料台件数

     ModbusWrite16(0x2300,1)

     Count_NG    = ModbusRead16(0x2300)        --NG托盘计数

     ModbusWrite16(0x2103,2)

     repeat until ModbusRead16(0x2003) == 0

     ModbusWrite16(0x2103,0)

  end

if ModbusRead16(0x2000) == 10 then            --皮带取料信号

      Move_1()                --皮带取料检测台放料

elseif ModbusRead16(0x2000) == 30 then            --检测台取料信号

      Move_2()                --检测台取料托盘放料

elseif ModbusRead16(0x2000) == 1 then            --检测台取料信号

      Init_Move()                --检测台取料托盘放料

end

  if    ModbusRead16(0x2004) == 1 then      --PLC请求关闭夹爪

      Set_DOGroup(2,1)             --(要关闭的DO,要打开的DO)

      Check_DIGroup(2,1)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

      ModbusWrite16(0x2104,1)

  elseif ModbusRead16(0x2004) == 2 then  --PLC请求打开夹爪

      Set_DOGroup(1,2)             --(要关闭的DO,要打开的DO)

      Check_DIGroup(1,2)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

      ModbusWrite16(0x2104,2)

  end

goto LB_CONTINUE

1

function Speed(num)  --速度设置

function Speed(num)      --速度设置

  MaxSpdL(2000)                --movl最大速度

  MaxAccL(20000)              --movl最大加速度

  SetMovL_MODE(1)         --movl运动的速度参数模式

  AccL(num)                    --movl加速度

  DecL(num)                    --movl减速度

  SpdL(num)                    --movl速度

  MaxSpdJ(9000)                --movp最大速度

  MaxAccJ(300)                --movp最大加速度

  AccJ(num)                    --movp加速度

  DecJ(num)                    --movp减速度

  SpdJ(num)                    --movp速度

end

2

清除机械手发送的modbus信号

function MODBUS_OFF()            --清除机械手发送的modbus信号

  ModbusWrite16(0x2100,0)        --清除plc和机械手通讯信号

  ModbusWrite16(0x2102,0)        --清除OK下料台机器人计数

  ModbusWrite16(0x2103,0)        --清除NG下料台机器人计数

  --ModbusWrite16(0x2104,0)        --控制夹爪状态(1:关闭        2:打开)

  ModbusWrite16(0x2105,0)        --清除相机检测请求

  end

3

DO输出(关闭DO的ID,打开DO的ID)

function Set_DOGroup(DO_idOFF,DO_idON)  --DO输出(关闭DO的ID,打开DO的ID)

  User_DO(DO_idOFF,"OFF")

  User_DO(DO_idON,"ON")

end

4

检查信号到位

function Check_DIGroup(DI_idOFF,DI_idxON)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

  time = 1

  repeat

      DELAY(0.1)

      time = time + 1

      if time > 20 then

          ModbusWrite16(0x2106,1)    --输出报警

          DELAY(1)

          ModbusWrite16(0x2106,2)    --关闭报警

      end

  until User_DI(DI_idxON) == 1

end

5

复位移动

function Init_Move()    --复位移动

  Speed(100)

  MODBUS_OFF()            --清除机械手发送的modbus信号

  ModbusWrite16(0x2100,1)      --机械手复位中

_,Here= motion.GetFeedbackPosition(1)   --获取当前位置

MovP(Here.. P.Z(Safe_Height))      --提高到安全高度

MovP(Reast_Point .. P.Z(Safe_Height)) --MovP(Reast_Point)          --复位点

ModbusWrite16(0x2100,2)        --机械手复位完成

  if ModbusRead16(0x2002) == 2 then

     ModbusWrite16(0x2200,1)

Count_OK    = ModbusRead16(0x2200)        --OK托盘计数

    ModbusWrite16(0x2102,2)

repeat until ModbusRead16(0x2002) == 0

     ModbusWrite16(0x2102,0)

  end

  if ModbusRead16(0x2003) == 2 then

     ModbusWrite16(0x2300,1)

Count_NG    = ModbusRead16(0x2300)        --NG托盘计数

     ModbusWrite16(0x2103,2)

 repeat until ModbusRead16(0x2003) == 0

     ModbusWrite16(0x2103,0)

  end

  if Count_OK < 1 or  Count_OK > PalletLength(1) then

      Count_OK= 1

      ModbusWrite16(0x2200,Count_OK)

  end

  if Count_NG < 1 or  Count_NG > PalletLength(2) then

      Count_NG = 1

      ModbusWrite16(0x2300,Count_NG)

  end

end

6

Move_1

7

Move_2()

function Move_2()                --检测台取料托盘放料

  ModbusWrite16(0x2100,30)--检测转盘取料中

  Set_DOGroup(1,2)             --(要关闭的DO,要打开的DO)

  Check_DIGroup(1,2)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

  MovP(Qu_JianCeTai .. P.Z(Safe_Height))

  MovP(Qu_JianCeTai)        --轴承1取料点

  --*Yu   夹爪闭合

  DELAY(0.4)

  Set_DOGroup(2,1)             --(要关闭的DO,要打开的DO)

  Check_DIGroup(2,1)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

  MovP(Qu_JianCeTai .. P.Z(Safe_Height))

  ModbusWrite16(0x2100,39)            --检测台取料完成

  if Count_OK > PalletLength(1) then           --OK放料计数判断

          Count_OK = 1

          ModbusWrite16(0x2200,Count_OK)

      end

  if Count_NG > PalletLength(2) then           --NG放料计数判断

          Count_NG = 1

          ModbusWrite16(0x2300,Count_NG)

      end

  repeat until ModbusRead16(0x2000) == 60 or  ModbusRead16(0x2000) == 50    --底面相机检测或放NG

  if ModbusRead16(0x2000) == 60 then

  ModbusWrite16(0x2100,60)                   --底面相机检测中

  MovP(JianCeFanMian)                          --底面相机检测点

  ModbusWrite16(0x2105,1)                   --请求底面相机检测

  repeat until ModbusRead16(0x2005) == 1    --等待底面相机检测完成

  ModbusWrite16(0x2105,0)          

  ModbusWrite16(0x2100,69)                     --底面相机检测完成

elseif ModbusRead16(0x2000) == 50 then

      ModbusWrite16(0x2100,50)         --下料转盘NG支架放料中

MovP(PalletP(2,Count_NG) .. P.Z(Safe_Height))

      MovP(PalletP(2,Count_NG))        --轴承1取料点

      --*Yu  夹爪张开

      Set_DOGroup(1,2)             --(要关闭的DO,要打开的DO)

      Check_DIGroup(1,2)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

      --ModbusWrite16(0x2104,2)  --夹爪打开

      --repeat until ModbusRead16(0x2004) == 2

      --Yu*      

      MovP(PalletP(2,Count_NG) .. P.Z(Safe_Height))

      ModbusWrite16(0x2100,59)            --NG台放料完成

      Count_NG = Count_NG + 1

      ModbusWrite16(0x2300,Count_NG)

      MovP(Qu_PiDai .. P.Z(Safe_Height))

end

  repeat until ModbusRead16(0x2000) == 80 or  ModbusRead16(0x2000) == 50 or  ModbusRead16(0x2000) == 70   --厚度检测或放NG

  if ModbusRead16(0x2000) == 80 then

  --MovP(QuHouDuJianCe1 .. P.Z(Safe_Height2))                          --厚度检测点1

  MovP(QuHouDuJianCe1 .. P.Z(Safe_Height2))

  MovP(QuHouDuJianCe1)

  MovP(QuHouDuJianCe2,40,80,80,80)

  MovP(JianCeDian1,5,40,40,40)

  ModbusWrite16(0x2100,80)                   --厚度1检测中

  repeat until ModbusRead16(0x2000) == 81

  MovP(QuHouDuJianCe2,40,80,80,80)

  MovP(XuanZhuan180,80,80,80,80)

  MovP(JianCeDian2,5,40,40,40)

  ModbusWrite16(0x2100,81)

  repeat until ModbusRead16(0x2000) == 82

      MovP(XuanZhuan180,40,80,80,80)

      MovP(QuHouDuJianCe1)

      MovP(QuHouDuJianCe1 .. P.Z(Safe_Height2))

  ModbusWrite16(0x2100,89)

elseif ModbusRead16(0x2000) == 50 then

      ModbusWrite16(0x2100,50)         --下料转盘NG支架放料中

      MovP(PalletP(2,Count_NG) .. P.Z(Safe_Height))

      MovP(PalletP(2,Count_NG))        --轴承1取料点

      --*Yu  夹爪张开

      Set_DOGroup(1,2)             --(要关闭的DO,要打开的DO)

      Check_DIGroup(1,2)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

      --ModbusWrite16(0x2104,2)  --夹爪打开

      --repeat until ModbusRead16(0x2004) == 2

      --Yu*      

      MovP(PalletP(2,Count_NG) .. P.Z(Safe_Height))

      ModbusWrite16(0x2100,59)            --NG台放料完成

      Count_NG = Count_NG + 1

      ModbusWrite16(0x2300,Count_NG)

      MovP(Qu_PiDai .. P.Z(Safe_Height))

 elseif ModbusRead16(0x2000) == 70 then

      ModbusWrite16(0x2100,79)

end

  --repeat until ModbusRead16(0x2000) ~=0         --成品放料信号

  repeat until ModbusRead16(0x2000) == 40 or  ModbusRead16(0x2000) == 50 or  ModbusRead16(0x2000) == 70         --成品放料信号

  if ModbusRead16(0x2000) == 40 then

      ModbusWrite16(0x2100,40)                     --下料OK转盘放料中

      MovP(PalletP(1,Count_OK) .. P.Z(Safe_Height))

      MovP(PalletP(1,Count_OK))        --轴承1取料点

      --*Yu  夹爪张开

      Set_DOGroup(1,2)             --(要关闭的DO,要打开的DO)

      Check_DIGroup(1,2)    --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

      --ModbusWrite16(0x2104,2)    --夹爪打开

      --repeat until ModbusRead16(0x2004) == 2      

      --Yu*

      MovP(PalletP(1,Count_OK) .. P.Z(Safe_Height))

      ModbusWrite16(0x2100,49)            --OK台放料完成

       Count_OK= Count_OK + 1

      ModbusWrite16(0x2200,Count_OK)

      MovP(Qu_PiDai .. P.Z(Safe_Height))

   elseif ModbusRead16(0x2000) == 50 then

      ModbusWrite16(0x2100,50)         --下料转盘NG支架放料中

      MovP(PalletP(2,Count_NG) .. P.Z(Safe_Height))

      MovP(PalletP(2,Count_NG))        --轴承1取料点

      --*Yu  夹爪张开

      Set_DOGroup(1,2)              --(要关闭的DO,要打开的DO)

      Check_DIGroup(1,2)          --检查到位DI(MODBUS地址,没信号的di,有信号的di)   ,检测超时后输出报警

      --ModbusWrite16(0x2104,2)       --夹爪打开

      --repeat until ModbusRead16(0x2004) == 2

      --Yu*

      MovP(PalletP(2,Count_NG) .. P.Z(Safe_Height))

      ModbusWrite16(0x2100,59)            --NG台放料完成

      Count_NG = Count_NG + 1

      ModbusWrite16(0x2300,Count_NG)

      MovP(Qu_PiDai .. P.Z(Safe_Height))

      repeat until ModbusRead16(0x2000) == 70 --等待程序结束

      ModbusWrite16(0x2100,79)                --程序结束

   elseif ModbusRead16(0x2000) == 70 then

      ModbusWrite16(0x2100,79)                --程序结束

end

end

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ORhtZSO1eSqPTUfVUFIQ9-Uw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券