鼠标装配机器人程序

2024-04-26

鼠标装配机器人程序(精选5篇)

篇1:鼠标装配机器人程序

MODULE Module1 CONSTrobtarget

pHome:=[[475.395989043,658.308108557,504.791394735],[0.099045666,0.892399288,-0.369643273,0.239117789],[-1,0,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

pickGpot:=[[1284.963592872,738.815790313,25.869169392],[0.068204518,-0.002398066,-0.997668473,0.000107188],[-2,0,-1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

pickGwait1:=[[908.411232745,672.850762454,378.307511016],[0.010244907,0.482635243,-0.875743333,0.005646121],[-1,-1,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

pickGwait2:=[[1176.437528319,673.642532691,257.234457149],[0.068204435,-0.002398463,-0.997668477,0.000107599],[-2,0,-1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];PERSnum nCountG:=1;PERSnum nCountUSB:=1;PERSnum nCount:=1;VARdnum value;PERSrobtarget

vrPickG:=[[1164.96,438.816,25.8692],[0.0682045,-0.00239807,-0.997668,0.000107188],[-2,0,-1,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];PERSrobtarget

vrPickUSB:=[[320.366,420.259,32.1482],[0.00603875,-0.703985,0.710163,-0.0060945],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONSTrobtarget

placeGpot:=[[491.933622165,846.937141509,160.846974852],[0.005008794,0.935474011,0.014272505,0.353071638],[-1,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

placeGwait:=[[507.240197782,605.725272386,378.307511016],[0.004224647,0.932443514,-0.361126372,0.010908214],[0,0,-1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

PressGwait:=[[500.114949513,623.456625976,378.507861069],[0.705929951,0.70233864,-0.072147603,0.056374304],[-1,-1,1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

PressPot1:=[[504.379458439,774.722785044,233.501667922],[0.705929374,0.702339261,-0.072147646,0.056373739],[-1,-1,1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

PressPot2:=[[459.683447723,774.724224404,225.569285468],[0.685817737,0.68475246,-0.182196214,0.166050111],[-1,-2,1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

PressPot3:=[[468.687935979,774.724120389,217.120366301],[0.685818109,0.684752091,-0.182196202,0.166050111],[-1,-2,1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTnum nYg:=-150;CONSTnum nXg:=-120;CONSTnum nYu:=60;CONSTnum nXu:=50;CONSTrobtarget

PickUSBpot:=[[220.36551859,360.258970705,32.14823204],[0.006038746,-0.703985263,0.710162757,-0.006094499],[0,0,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

PickUSBwait:=[[504.866605476,422.213803361,328.76973602],[0.006039381,-0.703984162,0.710163837,-0.006095185],[0,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

Put_usb:=[[479.824350594,835.130027981,542.371213165],[0.494243592,-0.499964028,0.495931919,0.509716367],[0,-2,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];PERSrobtarget

vrPick_usb:=[[1284.96,738.816,25.8692],[0.0682045,-0.00239807,-0.997668,0.000107188],[-2,0,-1,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONSTrobtarget

pickGwait3:=[[647.436094755,690.649278184,728.876166045],[0.493819119,-0.293854288,0.233426425,0.784413437],[-1,0,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];CONSTrobtarget

pickGwait4:=[[544.760859012,636.772731418,439.244061946],[0.113819259,-0.841453732,0.440897874,0.290877738],[-1,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];PROC main()

rInitAll;WHILETRUEDO ResetDO7_COM;

rpickG;WaitDIDI6_COM,1;

rPlaceG;

rPressG;SetDO6_COM;

rPickUSB;WaitTime 2;

rPlaceUSB;SetDO7_COM;ResetDO6_COM;

CallMath;ENDWHILE ENDPROC PROC rInitAll()

rCheckHomePos;MoveJ pHome,v800,z50,tool3WObj:=Workobject_2;

ResetDO5_usb;ResetDO6_COM;ResetDO7_COM;

nCountG:=1;

nCount:=1;

nCountUSB:=1;AccSet 50,100;WaitTime 0.5;

ENDPROC PROC rpickG()

rCallPosG;MoveJ pickGwait1,v800,z50,tool3WObj:=Workobject_2;

MoveJ pickGwait2,v800,z50,tool3WObj:=Workobject_2;MoveJoffs(vrPickG,0,0,50),v500,z50,tool3WObj:=Workobject_2;MoveL vrPickG,v50,fine,tool3WObj:=Workobject_2;SetDO8_xipan;WaitTime 0.3;MoveLoffs(vrPickG,0,0,50),v200,fine,tool3WObj:=Workobject_2;MoveJ pickGwait2,v800,z50,tool3WObj:=Workobject_2;MoveJ pickGwait1,v800,z50,tool3WObj:=Workobject_2;MoveJ pickGwait4,v800,z50,tooldata2WObj:=Workobject_2;ENDPROC PROC rPlaceG()MoveJ placeGwait,v800,z50,tool3WObj:=Workobject_2;MoveJoffs(placeGpot,0,0,50),v500,z50,tool3WObj:=Workobject_2;MoveL placeGpot,v50,fine,tool3WObj:=Workobject_2;ResetDO8_xipan;WaitTime 0.3;MoveLoffs(placeGpot,0,0,100),v200,fine,tool3WObj:=Workobject_2;MoveJ placeGwait,v800,z50,tool3WObj:=Workobject_2;

CallMathG;ENDPROC

PROC rPressG()MoveJ PressGwait,v800,z100,tool3WObj:=Workobject_2;MoveJoffs(PressPot1,0,0,20),v500,z50,tool3WObj:=Workobject_2;MoveL PressPot1,v50,fine,tool3WObj:=Workobject_2;MoveLoffs(PressPot1,0,0,20),v80,fine,tool3WObj:=Workobject_2;MoveL PressPot2,v50,fine,tool3WObj:=Workobject_2;MoveL PressPot3,v50,fine,tool3WObj:=Workobject_2;MoveL PressPot2,v50,fine,tool3WObj:=Workobject_2;MoveJoffs(PressPot2,0,0,20),v200,fine,tool3WObj:=Workobject_2;MoveJ PressGwait,v800,z100,tool3WObj:=Workobject_2;ENDPROC

PROC rPickUSB()

rCallPosUSB;MoveJ PickUSBwait,v800,z50,tooldata2WObj:=Workobject_2;MoveJoffs(vrPickUSB,0,0,50),v500,z50,tooldata2WObj:=Workobject_2;MoveL vrPickUSB,v50,fine,tooldata2WObj:=Workobject_2;SetDO5_usb;WaitTime 0.3;MoveLoffs(vrPickUSB,0,0,100),v500,z50,tooldata2WObj:=Workobject_2;MoveJ PickUSBwait,v800,z50,tooldata2WObj:=Workobject_2;ENDPROC

PROC rPlaceUSB()MoveJoffs(Put_usb,0,-100,0),v800,z100,tooldata2WObj:=Workobject_2;MoveJoffs(Put_usb,0,-50,0),v500,z50,tooldata2WObj:=Workobject_2;MoveL Put_usb,v50,fine,tooldata2WObj:=Workobject_2;ResetDO5_usb;WaitTime 0.3;MoveLoffs(Put_usb,0,-10,0),v10,fine,tooldata2WObj:=Workobject_2;SetDO5_usb;WaitTime 0.3;MoveL Put_usb,v10,fine,tooldata2WObj:=Workobject_2;WaitTime 1;MoveJoffs(Put_usb,0,-100,0),v800,z100,tooldata2WObj:=Workobject_2;

CallMathU;ResetDO5_usb;ENDPROC

PROC rCallPosG()TEST nCountG CASE 1:

vrPickG:=Offs(pickGpot,0,0,0);CASE 2:

vrPickG:=Offs(pickGpot,0,nYg,0);CASE 3:

vrPickG:=Offs(pickGpot,0,2*nYg,0);CASE 4:

vrPickG:=Offs(pickGpot,nXg,0,0);CASE 5:

vrPickG:=Offs(pickGpot,nXg,nYg,0);CASE 6:

vrPickG:=Offs(pickGpot,nXg,2*nYg,0);DEFAULT: ENDTEST ENDPROC

PROC rCallPosUSB()TEST nCountUSB CASE 1:

vrPickUSB:=Offs(PickUSBpot,0,0,0);CASE 2:

vrPickUSB:=Offs(PickUSBpot,0,nYu,0);CASE 3:

vrPickUSB:=Offs(PickUSBpot,nXu,0,0);CASE 4:

vrPickUSB:=Offs(PickUSBpot,nXu,nYu,0);CASE 5:

vrPickUSB:=Offs(PickUSBpot,2*nXu,0,0);CASE 6:

vrPickUSB:=Offs(PickUSBpot,2*nXu,nYu,0);DEFAULT: ENDTEST ENDPROC

PROC CallMathG()

nCountG:=nCountG+1;ENDPROC

PROC CallMathU()

nCountUSB:=nCountUSB+1;ENDPROC

PROC CallMath()

nCount:=nCount+1;IF nCount>6 THEN

MoveJ pHome,v800,z50,tool3WObj:=Workobject_2;TPErase;TPWrite“WARNING!”;TPWrite“Mission Accomplished”;TPWrite“.”;TPWrite“To restart the task”;TPWrite“please ensure the robot in manual mode!”;TPWrite“When put the part back to its original position”;TPWrite“.”;TPReadFK reg2,“Do you know the current situation?”,stEmpty,stEmpty,stEmpty,stEmpty,“YES”;IF reg2=5 THEN

rInitAll;Stop;ENDIF ENDIF ENDPROC

PROC rCheckHomePos()VARrobtarget pActualPos;IFNOT CurrentPos(pHome,tool3)THEN TPErase;TPWrite“WARNING!”;TPWrite“.”;TPWrite“Please in Manual Mode ”;TPWrite“Operating the robot back to security posture(pHome)”;Stop;!pActualpos:=CRobT(Tool:=tool3WObj:=Workobject_2);!pActualpos.trans.z:=pHome.trans.z;

!MoveL pActualpos,v100,z10,tool3WObj:=Workobject_2;!MoveL pHome,v100,fine,tool3WObj:=Workobject_2;

ENDIF ENDPROC

FUNCbool CurrentPos(robtarget ComparePos,INOUTtooldata TCP)VARnum Counter:=0;VARrobtarget ActualPos;!

!-------------------

!Abstract : Function to compare current ROBOT position with THE given position!-------------------!

ActualPos:=CRobT(Tool:=tool3WObj:=Workobject_2);IF ActualPos.trans.x>ComparePos.trans.x-25 AND ActualPos.trans.xComparePos.trans.y-25 AND ActualPos.trans.yComparePos.trans.z-25 AND ActualPos.trans.zComparePos.rot.q1-0.1 AND ActualPos.rot.q1ComparePos.rot.q2-0.1 AND ActualPos.rot.q2ComparePos.rot.q3-0.1 AND ActualPos.rot.q3ComparePos.rot.q4-0.1 AND ActualPos.rot.q4

篇2:鼠标装配机器人程序

在Windows大行其道的今天,windows界面程序受到广大用户的欢迎。对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。有时,对于繁杂的,或重复性的输入操作,我们能否通过编制程序来代替手工输入,而用程序来模拟键盘及鼠标的输入呢?答案是肯定的。这里主要是通过两个Windows API函数来实现的。下面以 VC++为例来介绍一下如何实现这两个功能。

本文示例代码

模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数。在VC里调用api函数是既简单又方便不过的事了。

首先介绍一下Keybd_event函数。Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。用如下代码即可实现模拟按下键,其中的XX表示XX键的虚拟键值,在这里也就是各键对应的键码,如'A'=65

keybd_event(65,0,0,0);

keybd_event(65,0,KEYEVENTF_KEYUP,0);...mouse_event最好配合SetCursorPos(x,y)函数一起使用,与Keybd_event类似,mouse_event有五个参数,第一个为选项标志,为MOUSEEVENTF_LEFTDOWN时表示左键按下为MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息。第二三个参数分别表示x,y

相对位置,一般可设为0,0,第四五个参数并不重要,一般也可设为0,0。若要得到Keybd_event和mouse_event函数的更详细的用法,可以查阅msdn或delphi帮助。

下面是关于mouse_event的示例代码:

POINT lpPoint;

GetCursorPos(&lpPoint);

SetCursorPos(lpPoint.x, lpPoint.y);

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

上面的代码表示鼠标的双击,若要表示单击,用两个mouse_event即可(一次放下,一次松开)。

篇3:飞机自动装配机器人设计及仿真

1 机器人自由度分配

装配机器人的结构有很多种,为了满足工作要求,本课题总体上选用6自由度关节机器人结构[3],在机器人末端安装钻铆单元作为执行器[4](如图1)。在工作中,首先由6自由度机械臂把钻铆单元运输到指定铆接点[5],并调整姿态使钻铆单元垂直于零件表面,然后再由钻铆单元完成钻孔、放钉、压铆3道工序[6]。

在结构上6个自由度全部为旋转自由度,具体配置情况如图2,坐标系0为基础坐标系,坐标系1~6分别是建立在6个关节中心的关节坐标。

在本课题中,钻孔单元所使用的钻头和铆钉都是回转体,且回转轴线平行于Z6轴,所以机器人只需要5个自由度就可以满足位置和姿态要求。但为了简化控制过程,设计中增加了一个用于机器人机动的关节2(如表1所示),且其转角θ2=180°-θ1,从而使由连杆4、5组成的平面平行于X0Z0平面。直线L1、L2分别表示铆接点处零件曲面与X0Z0、Y0Z0平面截交线的切线,α、β为L1、L2的斜角。当关节5、6的转角分别为θ5=α+θ4+θ3+90、θ6=β时,则连杆5平行于L1,连杆6垂直于L2关,从而末端执行器轴线Z6在该点垂直于零件表面,达到铆接姿态的要求。

2 钻铆单元设计建模

钻铆单元是飞机装配机器人的重要组成部分,它主要完成在零件上钻孔、放置铆钉和压铆3个工序,为了在钻孔过程中不会在两个待装配零件间产生切削毛刺和压铆时零件充分贴合,在钻孔和压铆过程中还必须压紧零件,所以在结构上钻铆单元必须带有压紧机构、钻孔机构、放钉机构、铆接机构。同时由于在飞机装配中所使用的铆钉直径规格不同,钻铆单元上必须包含几种规格的钻头。所以,在总体上钻铆单元采用由一个分度机构和一个复合刀盘组成(见图3),其中刀盘包括:4个不同直径规格的钻孔单元和1个铆接单元均布在同一圆周上。设压铆单元位置为分度机构的初始位置,其总体工作流程为:分度机构动作(选择钻孔单元)→钻孔→分度机构动作(返回初始位置)→放置铆钉→铆接。

3.1 钻孔单元设计

根据装配工艺要求,钻孔单元必须包括压紧零件、钻头旋转、钻头进给3个动作。如图3、图4(a)、4(b),设计中采用安装在电机支架上的电机来独立提供钻头钻转动力,同时安装在复合刀盘上的电机与丝杆联接带动电机支架向下进给,在进给过程中电机支架压缩弹簧推动压筒向下运动(压筒不受丝杆控制仅沿丝杆滑动),从而压紧零件实施钻孔。

3.2 压铆单元设计

压铆单元设计的关键在于零件压紧、放钉、压铆的协调。设计中选用丝杆1和丝杆2独立控制压铆杆和压筒的运动(如图4(c)),当分度盘归零后首先丝杆2动作,带动压筒进给压紧零件,压筒动作1s后铆钉沿铆钉滑槽下滑,并从压筒上铆钉入口滑入压筒,从而滑入零件铆钉孔,再由丝杆2动作带动压铆杆进给完成压铆。

4 基于ADAMS的仿真分析

4.1 工作时序

飞机铆接装配工作量很大,在装配中要求机器人每个动作协调性好且响应快,按照项目对装配效率的要求,需要在15s内完成一个铆钉的安装,表2为该飞机装配机器人各部分动作时序。

4.2 仿真结果

从仿真结果可以看出,钻孔压缩过程对零件的最大压力都在220~350N,压铆杆压力最大800N,根据飞机零件及铆钉材料特性分析压紧过程对零件压力不会对零件造成损伤,而压铆力也满足直径小于15mm的铝合金铆钉变形要求(飞机装配用铆钉直径一般小于8mm)。同时钻孔进给速度和压铆进给速度都小于60mm/s,满足快速性和系统稳定性要求。

5 小结

飞机是一国家的国防支柱,作为一个空中战略武器平台受到各国空前的关注。目前我国的飞机制造特别是飞机装配技术还完全依赖手工铆接,这严重制约了我国下一代战机和大飞机项目的发展。本文以飞机自动装配机器人研制过程为基础,介绍了了该机器人的结构设计方案,运动方案,以及在ADAMS下的钻铆单元仿真情况,从最终仿真结果可以看出,其结构及运动设计完全满足设计预期。同时由于飞机装配机器人是一个复杂的系统,还需要后续研究来不断改进完善。

参考文献

[1]费军.自动钻铆技术发展现状及应用分析[J].航空制造技术,2005(6):31-35.

[2]刘善国.先进飞机装配技术及其发展[J].航空制造技术,2006(10):28-31.

[3]蔡自兴.机器人学[M].北京:清华大学出版社,2000.

[4]刘宇平.打造航空工业自动钻铆设备先锋[J].航空制造技术,2006(12):50-51.

[5]李康.介入式手术机器人机械结构设计及运动学仿真[M].哈尔滨:哈尔滨工业大学,2006.

篇4:奶牛饲喂机器人的PLC程序设计

关键词:PLC;奶牛饲喂;设计;机器人;通信

中图分类号:TP273 文献标识码:A 文章编号:1674-1161(2016)02-0030-03

奶牛业在我国畜牧业中占有举足轻重的地位。奶牛饲喂分为传统饲喂技术、TMR饲喂技术和饲喂机器人技术3种,与这3种饲喂技术配套的设备都有各自的优点和不足。

1 奶牛饲喂技术发展现状

目前,国内牛场普遍采用传统饲喂技术。传统饲喂技术有两种方式:一是粗精饲料分类喂饲,将青贮、干草、块根、糟渣类和精饲料分别喂给奶牛,每日3次挤奶、3次上槽饲喂。我国绝大部分奶牛场仍采用这种饲喂方式。二是经机械或人工搅拌后混合喂饲。传统饲喂技术易造成奶牛挑食和抢食现象,且饲喂过程繁琐,机械化作业困难,需要大量人工,生产率低。针对这一问题,国外一些发达国家于20世纪60年代开始推广应用一种新的饲喂技术——全混合日粮饲喂方式(TOTAL Mixed Ration,TMR),我国于20世纪80年代引入该技术。TMR饲喂采用先进的控制方式,将奶牛的精饲料和粗饲料加工调制、搅拌混合、送料及喂料连成一体化,能够使不同阶段的牛群饲养实现机械化、自动化、定量化和营养均衡化。研究表明:该技术可以有效增加奶牛对饲料中干物质的需求,提高牛奶中蛋白质和脂肪的含量,简化饲养程序,提高生产效率,提高产奶量约10%;受精/怀孕比从1.63提高至2.27;怀孕时间从395 d缩短到372 d。该饲喂方式也存在一些缺点,如成本过高、无法实现个体奶牛的饲喂等。而利用饲喂机器人(如图1所示)代替人工作业,就可以有效地解决这个难题。通过PLC的精确自动控制,可以提高饲料利用率以及产奶率,降低劳动强度,减少浪费,进一步提高牛场的投入产出比。 2 PLC技术的主要特点及控制原理

2.1 PLC技术的主要特点

可编程序控制器(PLC)因具有功能性强、可靠性高、使用灵活方便、易于编程及适应工业环境下应用等一系列优点而被广泛应用于工业控制。使用其作为系统的核心,不仅可使控制系统体积减小、功能易于扩展、系统工作更加稳定,还可大幅降低成本。PLC的主要特点为:1) 可靠性高,抗干扰能力强;2) 控制程序编程简单,多数采用继电器控制线路的梯形图形式,具有很好的柔性;3) 丰富的I/O接口模块,与外部设备连接方便,功能完善;4) 适应性强,应用灵活;5) 体积小、质量轻,是“机电一体化”特有的产品。

2.2 PLC饲喂控制原理

控制电路以PLC为核心。PLC接收嵌入式计算机的指令(同时向计算机发送相应响应),驱动周边控制器件,以完成机器人的定位、给料、前后行走、转弯等动作。采用PLC控制伺服电机,可使伺服电机控制螺旋杆更加精确地完成给料动作。该种方式的工作流程为:计算机负责将饲喂量数据转换成数据字符串→数据字符串指令发送给PLC→PLC驱动步进电机完成给定的步进量,完成饲喂过程。流程如图2所示。

通过轨道运行的饲喂机器人按奶牛个体体况饲喂相应的饲料。机器人由一个精料料斗和一个青贮料仓组成,悬挂于牛舍上部的工字钢上,使用完全免维护的长效电池驱动,可以实现在工字钢上运行到牛上方进行给料。

3 PLC与嵌入式计算机的通信程序设计

在现代工业控制领域,PLC已得到广泛而深入的应用,然而它也存在一些固有的缺点,如数据的计算处理和管理能力较弱、无法提供人性化的交互界面等。将PLC与计算机结合起来能弥补这些不足,两者结合的桥梁为PLC与计算机之间的通信。现以松下PLC-FP0为例,讨论PLC与计算机通信的规范和程序设计。

3.1 通信原理及规范

计算机与PLC间的通信一般采用RS485或RS232接口,信息交换以“帧”的格式进行。信息帧由ASCII字符串组成,其通信规范采用松下电工公司专用通信协议——MEWTOCOL-COM标准协议。在以计算机作为主站、PLC为从站的通信网络中,通信由主站发起,将命令帧发向从站,从站以响应帧或错误帧作应答。MEWTOCOL-COM协议对命令帧、响应帧及错误帧格式做了严格规定。

在图3所示的命令帧格式中:%OR<为MEWTOCOL-COM的命令帧开始标志,以%开头的信息帧单帧最大长度为118字节,<为扩展头,单帧最大长度可达2048字节;H,L为站地址的高位与低位;#为命令帧标识码;命令代码由两个字节组成,读写IR/SR区时为RR和WR,读写DM区时为RD和WD;BCC为两个字节的块检查码,由从帧开始标志起到文本数据最后一个字节止的各字节相或得到;CR为回车结束符。在发送多帧命令时用字符“&”连接。

值得注意的是,在多帧命令发送的过程中,一帧发送后,只有当PLC发回响应消息后,下一帧才能发送。

图4所示为错误帧格式,其中“!”为错误帧标识码;“Err”为两字节的错误标识码。

计算机运用MEWTOCOL-COM协议提供的命令对PLC的寄存器(X)、寄存器(Y)、数据寄存器(D)、定时器(T)、辅助寄存器(R)、计数器(C)进行读写及监控。不同的命令将通过命令帧中的命令代码来区别,MEWTOCOL-COM指令见表1。

3.2 通信程序的设计

上位机的通信程序基于C++语言编写,将各PLC读写命令以函数的形式封装到一个串行通信类CAccessPLC中。

3.2.1 CAN总线 CAN是Controller Area Network的缩写,是ISO*1国际标准化的串行通信协议,被广泛地应用于工业自动化、船舶、医疗设备、工业设备等领域。饲喂机器人的通信控制程序为:

nlc202309040227

voidCAccessCan::StartAccessCan()

{if(IsRun()) return;

m_CANRecv.m_pAccessCan = this;

StartThread();}

voidCAccessCan::StopAccessCan()

{StopThread();}

DWORD CAccessCan::RunThread()

while(!IsThreadAborted())

{Sleep(50);

m_CANRecv.Start();

WriteStationIDs();}

return 0;}

voidCAccessCan::WriteStationIDs()

{m_CANRecv.Start();

for (size_ti=0; iGetMilkStationDataNum(); i++)

CAN_PACKETPkt;

//设置CAN Packet

memset(&Pkt, sizeof(CAN_PACKET), 0 );

Pkt.dwType = CAN_PACKET_TYPE_STANDARD;

Pkt.dwID = 1;

Pkt.dwPrio = 0;

Pkt.dwDatLen = 8;

m_CANRecv.WriteCAN(&Pkt);

strcpy(command, commandstr);

//定义BCC的高位和低位字符

char BCC_H, BCC_L;

3.2.2 生成BCC函数

charCAccessPLC:: exor(const char*rs, intlen, char*pH, char*pL)

{if (len<=0) return -1;

chareo;

if (len==1) eo =*rs;

elseeo = (*rs)^exor(rs+1,len-1, NULL, NULL);

if(pH &&pL)

{if ( (eo>>4) < 0xA ) *pH = (eo>>4) + 0x30;

Else*pH = (eo>>4) + 0x37;

if ( (eo& 0x0F) < 0xA )

*pL = (eo& 0x0F) + 0x30;

Else*pL = (eo& 0x0F) + 0x37;}

returneo;}

3.2.3 接收响应 由于PLC与计算机的串行通信有一定延迟,所以在发送完一条指令后,应该等待一段时间再进行响应数据接收。

4 结论

机器人控制系统采用上、下机的控制结构,将管理和控制分离开来。机器人的控制作为下位机以嵌入式微处理实现控制任务。上位机为工业PC,主要实施奶牛场的管理。通过在牛舍安装轨道,简化移动式饲喂机器人的自主导航和定位,降低其控制系统的复杂程度和成本,为低价格饲喂机器人的推广和应用奠定基础。饲喂机器人的研究和开发,能够推进畜牧业的自动化和奶牛场的科学管理,提高奶牛的产奶量和身体健康水平,可在奶牛场广泛推广应用。

参考文献

[1] 范冠雄.基于Visual C++的数据库访问技术比较研究[J].计算机与数字工程,2010(1):54-57.

[2] 杨存志,李源源,杨旭,等.FR-200型奶牛智能化精确饲喂机器人的研制[J].农机化研究,2014(2):120-122.

[3] 李源源,王军,闫景凤,等.奶牛精确饲喂机器人的设计[J].农业科技与装备,2013(11):36-37.

篇5:装配机器人的运动学分析

通过对运动学分析我们可以了解到机构的运动性能,及各输入参数与机构位置的关系。运动分析也是工作空间分析的基础,其逆解就是已知机构动平台的中心位置参数,来求解输入参数(转角或位移) 而串联机器人的逆解运动学分析比正解分析难得多。

工作空间是衡量并联机构综合性能的重要指标,其定义为并联机构末端操作器的工作区域,在工作空间求解过程中, 一般采用解析法,几何法和数值法。而几何法相对于某些串联装配机器人,求解工作空间更简单明确。

1位置正解分析

已知机构的尺寸参数和各关节驱动的转角,求得机器人操作器末端参考点的位置和姿态。

1.1机构坐标系的建立

机器人关节坐标系的建立主要是为了描述机器人各杆件和终端之间的相对运动,对建立运动方程和动力学研究是基础性的工作。

为了描述机器人各杆件和终端之间转动或移动关系,Denavit和Hartenberg于1955年提出了一种为运动链中每个杆件建立附体坐标系的矩阵方法(D-H方法),根据D-H法则,建立机构坐标系,这种方法是对机器人连杆和关节进行建模的一种非常简单的方法。根据上述方法, 该机构坐标系建立如下:

(1)将机器人关节分为OABC四个关节,其中O关节为基关节。

(2)将各关节根据D-H法则,建立各关节坐标系。

该机器人相应的连杆参数表达见表1-1,其中BC杆的总长度为l3,AC杆的长度为l4。

1.2机构运动学正解分析

根据上面建立的机构坐标系,结合机器人运动学正解方程。

2机构运动学位置逆解

已知末端操作器中心点的位置,求解出个驱动杆的输入转角,已知P点的位置和姿态,求解,驱动转角θ1和θ2。

根据给定的位姿参数Bx,By和姿态角,我们将其转化到位姿矩阵中。

最终求得的θ1,θ3的解不唯一,不失一般性的情况下,我们只选择其中一组解,作为正解。

3速度分析

对于串联机构进行研究,通常我们将运动副轴线用单位矢量S1表示,平台转动对支链运动副变量的一阶影响系数为[GhФ],而支链由运动副组成,所以细化到每个运动副。

根据公式,若我们已知Ф',则可以求得VH,此为速度正解;若已知VH,可以求得Ф', 此为速度反解。

4工作空间分析

工作空间是表示机构运动性能好坏的指标之一,尽量以最合理的尺寸得到最大的工作空间,是机构设计的精髓所在。

4.1工作空间影响因素

影响机构工作空间的因素很多,不同的机构约束不同,下面给出机构的约束的影响因素。

(1)大臂的杆长约束

大臂是该机构运动的主要臂,其运动性能对机构工作空间的影响最大,当大臂的位置达到极限位置时,其末端操作器沿y轴摆动的距离也就达到了其工作空间边界。

约束表达式 :式中 : L1,L2分别表示大臂,小臂的杆长。

(2)转动副的转角限制

根据机构示意图可以看出,辅臂驱动杆的转动大小,直接影响机械臂上下运动的幅度,约束表达式:φmin≤φ≤φmax。

4.2工作空间分析

根据该串联机器人的机构特点,可知该机构是可以整周转动的,在转动的过程中可以完成机械臂、手腕的抬升,伸缩等工作,借助正解方程,利用Matlab软件对该机构进行分析,可知其工作空间是一个回转空心圆柱体。

首先看一下,大臂和辅助臂单独运动时,机构的运动情况,大臂单独运动,会使机构产生左右方向的运动,辅助臂的单独运动会使机构产生上下方向的运动。

5数值实例

给定数值参数分别验证该机构运动学正解与逆解的有效性和正确性。

5.1位置正解实例

已知机构驱动关节的转角,求解末端操作器的位置和转角。根据本文推导的正解公式和给定的参数,求得,然后用solidworks进行仿真, 得到的末端操作器的位置参数与求得的解接近,正解参数如表5-1所示。

5.2位置逆解实例

已知机械手末端操作器的参数,求解驱动转角。根据本文推导的逆解公式和给定的参数,求得逆解值,然后用solidworks进行仿真, 给定的末端操作器的位置参数与仿真得到的参数接近,逆解参数如表5-2所示。

5.3速度分析实例

在给定初始关节O和O’点的转动速度和转动角度后,图1是机器人A关节处, 关节位置的变化规律和关节处速度的变化规律图。从图中可以看出,关节点的位置变化和速度变化符合实际中的变化状况。图2是机器人B关节处,关节位置的变化规律和关节处速度的变化规律图。

从图3中看出,机构操作器末端y坐标随x坐标的变大而减小,符合机构的实际变化规律,即机构臂在一定情况下继续伸长的过程中,达到一定程度后,其手臂位置开始下降。

6结论

本文根据机器人运动学分析理论,对该该机构进行了运动学正逆解分析和工作空空间分析。

(1)首先求得了正解,正解对于串联机机构比较简单。

(2)通过推倒公式得到逆解表达式, 考考虑到实际工作中的稳定性,只取一组解作作为最终解。

(3)利用Matlab软件得到了该机构的工作空间是一个空心圆柱体。

(4)给出数值算例,确定了正逆解的具体参数值,并在Solidworks软件中进行仿真,验证了其正逆解的有效性,给出了对应的实例位姿图。

上一篇:到达作文250字下一篇:高州论文网职称论文发表网-小组合作学习初中英语课堂教学运用论文选题题目