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
领取专属 10元无门槛券
私享最新 技术干货