爱普生(EPSON)机器人程序框架

PLC与爱普生机器人通信程序

1.FINS_TCP

①通信初始化(Function FINS_TCP_Init):

a)设定最终握手指令

b)设定FINS/TCP头代码

c)FINS读、写指令

d)FINSSET RST 指令

e)软元件区域

    ''' <summary>''' 通信初始化''' </summary>''' <param name='KV_IP$'PLC IP地址/param>''' <param name='KV_PORT'PLC 端口号/param>Function FINS_TCP_Init(nIP$ As String, nPORT As Integer) String nLastIP$(0) Integer LastIP ' 握手指令 HANDS_HEAD$ = '46494E530000000C0000000000000000' '固定握手格式 HANDS_ADDR$ = '0000000F' '源(当前pc)网络节点 HANDS_CMD$ = HANDS_HEAD$ + HANDS_ADDR$ ' HANDS_HEAD + HANDS_ADDR '最终握手指令
    'FINS/TCP头代码 FINS_TCP_HEADER$ = '46494E53' 'HEADER FINS_TCP_CMD$ = '00000002' '命令 FINS_TCP_ERROR$ = '00000000'
    'FINS Frame FINS_ICF$ = '80' '发送数据时ICF=80 FINS_RSV$ = '00' 'RSV固定为00 FINS_GCT$ = '02' 'GCT固定为02 FINS_DNA$ = '00' '为目标网络号(PLC网络号)
    ' FINS_DA1$ = '0A' 'DA1为目标节点号 FINS_DA2$ = '00' 'DA2为目标单元号 FINS_SNA$ = '00' 'SNA为源网络号 FINS_SA1$ = Right$(HANDS_ADDR$, 2) 'SA1为源节点号 FINS_SA2$ = '00' 'SA2为源单元号 FINS_SID$ = '00' 'SID设置00
    'FINS读指令 FINS_Read$ = '0101' 'FINS写指令 FINS_write$ = '0102' 'FINS SET RST 指令 FINS_SET_RST$ = '2301'
    '软元件区域 FINS_REG_D$ = '82' FINS_READ_IO$ = '30' FINS_WRITE_IO$ = 'B0' FINS_WR$ = '31'
    Print nIP$ + ':', nPORT, '开始连接TCP服务端' SetNet #202, nIP$, nPORT, CR, NONE, 0 CloseNet #202 '重连 Wait 0.1 OpenNet #202 As Client WaitNet #202 Print nIP$ + ':', nPORT, 'FINS/TCP建立连接成功' FINS_ClientOK = True
    ParseStr nIP$, nLastIP$(), '.' LastIP = Val(nLastIP$(3)) FINS_DA1$ = Hex$(LastIP) If Len(FINS_DA1$) = 1 Then FINS_DA1$ = '0' + FINS_DA1$ EndIf
    Fend

    ①通信初始化(Function FINS_TCP_Init):

    a)先打印“开始连接TCP服务端”窗口

    b)然后设置通讯地址格式,如图(c)所示

    c)然后关掉端口,0.1s后再打开端口

    d)当连接成功后,打印'FINS/TCP建立连接成功'窗口

    功能:FINS/TCP建立通信连接,并通过打印窗口,验证是否连接成功

    提示:相关常用的通讯指令如图(b)所示


    ②PLC与Robot的通信线程 (FINS_Task):

    a)先是调用FINS_TCP_Init函数,让其通信初始化

    b)0.1s后,机器人发送数据

    c)再0.1s后,机器人接收PLC数据

    d)数据传输完毕后,最后循环执行中间一大段程序内容

    功能:数据传送,数据交流

      ''' <summary>''' PLC与Robot的通信线程''' </summary>Function FINS_Task  Integer x, Redata(0)  Call FINS_TCP_Init(FINS_IP$, FINS_PORT)  Wait 0.1  FINS_Send(HANDS_CMD$)  Wait 0.1  Call FINS_ReceivePLCData  WriteDFlag = False  ReadWFlag = True  Do    If FINS_HANDSOK = True Then      If ReadDFlag = True Then        Call FINS_ReadDM        '读取PLC的DM数据(读取D200-D399  100个32位数据)        Call Hand_WriteHere        '发送机器人当前坐标          Select True          Case WR(8)            Call Hand_WritePoint  '将选择点读出至HMI          Case WR(10)            Call Hand_RecordPoint  '将指定坐标写入PLC和点数据          Case WR(11)            Call Hand_RecordHere  '将当前坐标写入PLC和点数据        Send        ElseIf ReadWFlag = True Then          Call FINS_ReadWR        '读取PLC的WR数据(读取W10.0-W19.15  160个状态)        EndIf      If WriteWFlag = True Then      '判断是否需要写W地址        Call FINS_WriteBatchCoils('WR', FINSWR_FIRST + FINS_WRStart, FINS_WRNum, FINS_WState)        Do          'Wait 0.02          If ChkNet(202) > 0 Then            x = ChkNet(202)            Redim Redata(x - 1)              ReadBin #202, Redata(), x            FINS_Write_OK = True            MemOn 0            WriteWFlag = False            Exit Do          Else            FINS_Write_OK = False          EndIf        Loop      EndIf      If WriteDFlag = True Then      '判断是否需要写D地址        If Oport(DO_ROBOT_ALARM) = True Then          Call FINS_SendErr      '发送错误代码        EndIf      EndIf      If WR(200) = True Then        Call FINS_SendDM      EndIf    EndIfLoopFend

      ③将数据写读到PLC的D、W中(FINS_Task):

      a)如果写D寄存器标志位为True时,调用写数据寄存器函数FunctionFINS_WriteBatchWords(),将机器人当前坐标和HMI指定点坐标写到PLC 的D40-D47的中

      b)如果写W标志位为True时,调用传递写PLCW命令函Function FINS_Write_PLCW()函数,将W状态写入PLC中

      c)当握手成功且没有写D、W的标志位时,根据需求进行D、W地址的读取

      功能:主要判断条件,将数据写或读到PLC的D、W中

        ''' <summary>''' PLC与Robot的通信线程''' </summary>Function FINS_Task Integer x, Redata(0) Call FINS_TCP_Init(FINS_IP$, FINS_PORT) Wait 0.1 FINS_Send(HANDS_CMD$) Wait 0.1 Call FINS_ReceivePLCData WriteDFlag = False ReadWFlag = True
        Do
        If FINS_HANDSOK = True Then
        If ReadDFlag = True Then Call FINS_ReadDM '读取PLC的DM数据(读取D200-D399 100个32位数据)
        Call Hand_WriteHere '发送机器人当前坐标
        Select True Case WR(8) Call Hand_WritePoint '将选择点读出至HMI Case WR(10) Call Hand_RecordPoint '将指定坐标写入PLC和点数据 Case WR(11) Call Hand_RecordHere '将当前坐标写入PLC和点数据 Send
        ElseIf ReadWFlag = True Then Call FINS_ReadWR '读取PLC的WR数据(读取W10.0-W19.15 160个状态)
        EndIf
        If WriteWFlag = True Then '判断是否需要写W地址 Call FINS_WriteBatchCoils('WR', FINSWR_FIRST + FINS_WRStart, FINS_WRNum, FINS_WState) Do 'Wait 0.02 If ChkNet(202) > 0 Then x = ChkNet(202) Redim Redata(x - 1) ReadBin #202, Redata(), x FINS_Write_OK = True MemOn 0 WriteWFlag = False
        Exit Do Else FINS_Write_OK = False EndIf Loop EndIf
        If WriteDFlag = True Then '判断是否需要写D地址 If Oport(DO_ROBOT_ALARM) = True Then Call FINS_SendErr '发送错误代码 EndIf EndIf
        If WR(200) = True Then Call FINS_SendDM EndIf EndIf
        Loop

        Fend

        ④写数据寄存器(Function FINS_WriteBatchWords):

          ''' <summary>''' 描述:    写数据寄存器''' </summary>''' <param name='regName'>寄存器名称</param>''' <param name='startNo'>首地址</param>''' <param name='total'>个数</param>'''<param name='nWriteData'>要发送的数据</param>Function FINS_WriteBatchWords(regName$ As String, startNo As Integer, total As Integer, ByRef nWriteData() As Int32)        String ss$        String sValue$        Integer ii        String name$        Int32 v    MemOff 1        ' check reg name        If (regName$ = 'D') Then            name$ = FINS_REG_D$        EndIf        For ii = 0 To total - 1            v = nWriteData(ii)            ss$ = Hex$(v)            ss$ = Trim$(ss$)            FINS_CompZero(ss$, 8)            ss$ = ZeroReStr$            ss$ = Right$(ss$, 8)            sValue$ = sValue$ + Mid$(ss$, 5, 4) + Mid$(ss$, 1, 4)        Next ii        total = total * 2        ' Set values        FINS_BatchValues(False, FINS_write$, name$, startNo, total, sValue$)        'WriteDFlag = FalseFend

          ⑤写PLC W命令(FINS_Write_PLCW()):

          ⑥判断是否写入成功(FINS_Task):

          a)如果ChkNet(202)> 0,即字符数大于0,即通信成功

          b)然后把接受到的字符数赋值到x中,方便建立一维数组

          c)变量Redata[x-1]

          d)接着从#202端口将数组Redata[x-1]中x个元素全部读取到机器人中

          e)最后,把写入标志位置为True,并退出循环f)如果通信不成功,就不退出死循环,直到通信成功为止

          功能:当把机器数据写入PLC后,通过读取PLC数据,判断是否写入成功,如果读取到,即写入成功,如果没有,即写入失败

            If WriteWFlag = True Then '判断是否需要写W地址 Call FINS_WriteBatchCoils('WR', FINSWR_FIRST + FINS_WRStart, FINS_WRNum, FINS_WState) Do 'Wait 0.02 If ChkNet(202) > 0 Then x = ChkNet(202) Redim Redata(x - 1) ReadBin #202, Redata(), x FINS_Write_OK = True MemOn 0 WriteWFlag = False
            Exit Do Else FINS_Write_OK = False EndIf Loop      EndIf

            ⑦读取D、W数据(FINS_Task):

            a)如果写D,W标志位都为False,并且通信握手标志位位True时,读取数据

            b)如果读D寄存器标志位为True时,把D寄存器数据读到机器人中,如果读W为True时,把W数据读到机器人中

            c)然后判断读取数据是否成功,如果读取数据成功标志位为False,然后执行机器人接受数据函数指令,继续通信。如果读取数据成功标志位为True,就退出循环。

            功能:主要读取PLC的D寄存器数据,W状态

            2.机器人与CCD通信CCD_TCP_IP

            ①触发拍照(CCD_Task):

            a)调用函数,建立与CCD通信

            b)将触发相机拍照的字符串设定为“TR”

            (可更改为其他,需与相机协商好)

            c)调用函数,接受相机的数据

            d)如果CCDTrigger = True,即接收到触发信号时,将CCD_infor$(“TR”)字符串传入端口201,关掉触发信号,打印”触发拍照’窗口

            e)循环(c)、(d)过程

            功能:接收数据,执行触发拍照

              '------------------------------------------------------------------------------------' 定义变量类型Global Real aX, aY, aU          '相机传送的X,Y,U数据Global String CCD_Infor$        '触发相机拍照的字符串Global Boolean Sys_EOrM          '空跑标志Global Boolean CCDTrigger        '触发相机拍照Global Boolean CCD_ClientOK_FLAG    '相机连接成功标志Global Boolean CCD_DONE_FLAG, CCD_PASS_FLAG  '相机拍照完成标志,相机拍照合格标志Global String CCD_IP$Global Integer CCD_PORT'------------------------------------------------------------------------------------''' <summary>''' CCD通讯主循环,可在此处修改连接的服务器的IP地址''' 向服务器发送字符串''' 获取纠偏数据''' </summary>Function CCD_Task  Call CCD_TCP_Init(CCD_IP$, CCD_PORT)    'PC端/智能相机IP地址  Do    Call CCD_TCP_ReceiveData        '接收数据    If CCDTrigger = True Then        '如果接收到触发拍照的信号,执行触发拍照      Print #201, CCD_Infor$      CCDTrigger = False      Print '触发拍照'    EndIf  LoopFend

              ②机器人与CCD通信链接(CCD_TCP_Init)

              3.关闭CCD与机器人的通信链

              功能:机器人与CCD通信

                ''' <summary>''' 建立CCD通信链接''' </summary>Function CCD_TCP_Init(nIP$ As String, nPORT As Integer) Print nIP$ + ':', nPORT, '开始连接TCP服务端' SetNet #201, nIP$, nPORT, CRLF, NONE, 0 CloseNet #201 '重连 Wait 0.1 OpenNet #201 As Client '作为客户端建立连接 WaitNet #201 Print nIP$ + ':', nPORT, 'TCP/IP建立连接成功' CCD_ClientOK_FLAG = TrueFend
                ''' <summary>''' 关闭CCD与机器人的通信链接''' </summary>Function CCD_TCP_Disconnect CloseNet #201Fend

                ③机器人接收CCD的数据(CCD_TCP_ReceiveData):

                a)先判断端口状态,如果如果缓冲字符数量大于0,则机器人从201端口读入一行数据。如果小于0,打印出“通讯端口异常'字样

                b)分离数据到数组mReceiveArr$()中

                c)赋于ReCount为mReceiveArr$下标的最大值

                d)如果满足电芯OK条件,则把接收到数据赋到点PBELT(以便后续跑点使用)

                e)如果满足电芯NG条件,则打印“拍照NG”字样,合格标志CCD_PASS_FLAG置为FALSE

                  ''' <summary> ''' CCD---> ROBOT返回数据''' </summary>Function CCD_TCP_ReceiveData  String Receivestr$, mReceiveArr$(0)  Integer i, j, k, ReCount  If ChkNet(201) > 0 Then    '检查接收缓存区的数据,如果大于0就证明收到数据                     Line Input #201, Receivestr$    ParseStr Receivestr$, mReceiveArr$(), ','         '分离数据,以','为分格符将数据拆到数组里    ReCount = UBound(mReceiveArr$)            '取mReceiveArr数组下标最大值    '假设相机传过来的数据格式为“Cell,OK,x,y,u”    If ReCount = 4 And mReceiveArr$(0) = 'Cell' And mReceiveArr$(1) = 'OK' Then        aX = Val(mReceiveArr$(2))        aY = Val(mReceiveArr$(3))        aU = Val(mReceiveArr$(4))        CX(PCCDSend) = aX; CY(PCCDSend) = aY; CU(PCCDSend) = aU  '将接收到的数据赋给点位        Print '收到的数据:', Receivestr$        CCD_DONE_FLAG = True    'CCD拍照完成标志        CCD_PASS_FLAG = True    'CCD拍照合格标志'        Off DO_BELTCCD_AW      '拉带拍照允许'        On DO_BELTCCD_DONE      '拉带拍照完成      ElseIf ReCount = 4 And mReceiveArr$(0) = 'Cell' And mReceiveArr$(1) = 'NG' Then        CCD_DONE_FLAG = True    'CCD拍照完成标志        CCD_PASS_FLAG = False    'CCD拍照不合格标志'        Off DO_BELTCCD_AW      '拉带拍照允许'        On DO_BELTCCD_OK      '拉带拍照完成        Print '拍照NG'    EndIf  ElseIf ChkNet(201) < 0 Then    Print '通讯端口异常'  EndIfFend

                  ④定位相机CCD XY标定(CCD_XY_calibration):

                  a)设置x,y方向偏移的距离nX,xYb)通过九点标定法进行XY标定用

                    ''' <summary>''' 定位相机CCD XY标定''' </summary>Function CCD_XY_calibration Int32 nX, nY, xyCali_Count String nRobot$, mes$ nX = 2 nY = 2
                    Print '开始进行XY标定'
                    For xyCali_Count = 0 To 8
                    Select xyCali_Count
                    Case 0 Jump PXYCali_Start LimZ ROBOT_LIMZ
                    Case 1 PXYCali = PXYCali_Start +X(nX * 1) Go PXYCali
                    Case 2 PXYCali = PXYCali_Start +X(nX * 2) Go PXYCali
                    Case 3 PXYCali = PXYCali_Start +X(nX * 2) +Y(nY * 1) Go PXYCali
                    Case 4 PXYCali = PXYCali_Start +X(nX * 1) +Y(nY * 1) Go PXYCali
                    Case 5 PXYCali = PXYCali_Start +Y(nY * 1) Go PXYCali
                    Case 6 PXYCali = PXYCali_Start +Y(nY * 2) Go PXYCali
                    Case 7 PXYCali = PXYCali_Start +X(nX * 1) +Y(nY * 2) Go PXYCali
                    Case 8 PXYCali = PXYCali_Start +X(nX * 2) +Y(nY * 2) Go PXYCali Send
                    Print xyCali_Count + 1, ':', CX(Here), CY(Here), CU(Here) '打印当前坐标,格式:X,Y,U Pause '暂停,等待相机拍照,按继续可恢复运行
                    Next Print '标定结束'' FINS_Write_PLC_WCmd('1.00', False)' Wait 0.5
                    Fend

                    ⑤定位相机CCD U标定(CCD_U_calibration):

                    a)设置每次标定的旋转角度nUb)更改For循环的最大值可设定标定次数

                    功能:进行相机的标定

                      ''' <summary>''' 定位相机CCD U标定''' </summary>Function CCD_U_calibration  Int32 nU, uCali_Count  String nRobot$, mes$  nU = 8  Print '开始进行U标定'  For uCali_Count = 0 To 4        If uCali_Count = 0 Then          Jump PUCali_Start LimZ ROBOT_LIMZ      '到标定起始点        Else          PUCali = PUCali_Start +U(nU * uCali_Count)          Go PUCali        EndIf      Print uCali_Count + 1, ':', CX(Here), CY(Here), CU(Here)    '打印当前坐标,格式:X,Y,U    Pause                                '暂停,等待相机拍照,按继续可恢复运行  Next  Print '标定结束''  FINS_Write_PLC_WCmd('1.00', False)'  Wait 0.5Fend

                      3.机器人初始化

                      ①机器人初始化(Sys_InitRobot):

                      a)设置初始化动作速度,如图(a)

                      b)添加项目需要的IO及标志位,如图(b)

                      c)添加初始点位及初始变量,如图(c)

                      功能:初始化一系列设置,对机器人添加相关的初始量

                        ''' <summary>''' Robot初始化''' 机器人初始化包含对机器人速度、IO状态以及标志位的初始化。''' 注:当机器人未与触摸屏通讯时,会缺失很多点位及变量,需在初始化中给其赋值。''' </summary>

                        Function Sys_InitRobot
                        Reset If Motor = Off Then '如果伺服没有ON则打开伺服 Motor On '打开伺服 EndIf
                        SLock 1, 2, 3, 4
                        '设定初始化动作的速度 Power High '设定运动功率为高功率 Speed 20 '定义Jump、go等PTP运动速度,单位为百分比,最大为100 Accel 15, 15 '定义Jump、go等PTP运动的加速度和减速度,单位为百分比,最大为100 SpeedS 500 '定义Move、Arc、Arc3等CP运动速度,单位为mm/s2,最大为2000 AccelS 500, 500 '定义Move、Arc、Arc3等CP运动的加速度和减速度,单位为MM/S2,最大为25000

                        '此处添加需要初始化的IO代码及标志位----------
                          StartFlag = False        '系统启动标志 系统在执行整机复位时机器人执行一次初始化'--------------------------------------------
                        '此处添加需要赋值的点位及变量----------------
                          ROBOT_LIMZ = -0

                        ②加载HMI配方参数(Sys_InitRobot):

                        a)调用函数,加载HMI配方参数(离线调试时,需要把此函数注释掉)

                        b)建立矩阵c)如果手臂为左手就左手运动,如果手臂为右手就右手运动,避免撞机d)Move  PSAFE初始化时到避让位

                        功能:加载HMI参数

                          '  Call Sys_SetSystemParameter    '加载HMI配方参数(离线调试时请注释掉此句)'  Move PSafeHome     '初始化时到避让位,请走直线 因为GO/JUMP指令轨迹不可控  On DO_INIT_OK  Wait 0.2  Off DO_INIT_OK  SavePoints 'robot1.pts'        '调试时为了方便本地设置点位注释掉改段程序(正常生产时需要去掉注释,在触摸屏重新输入点位)Fend''' <summary>''' 系统参数设置''' </summary>Function Sys_SetSystemParameter  Integer P_Num  Wait 0.5  Robot_Speed = DM(15) /100  '机器人自动速度百分比  Robot_Accel = DM(16) /100  '机器人自动加减速百分比  Tray_Hang = DM(22)     '矩阵行数  Tray_Lie = DM(23)     '矩阵列数'通过HMI给各点位赋值----------------------------------------------------------  For P_Num = 0 To 13    CX(P(P_Num)) = DM(30 + P_Num * 5 + 0) / 1000    CY(P(P_Num)) = DM(30 + P_Num * 5 + 1) / 1000    CZ(P(P_Num)) = DM(30 + P_Num * 5 + 2) / 1000    CU(P(P_Num)) = DM(30 + P_Num * 5 + 3) / 1000    If DM(30 + P_Num * 5 + 4) = 2 Then      Hand P(P_Num), Lefty    Else      Hand P(P_Num), Righty    EndIf  Next  Pallet 0, PTray1, PTray2, PTray3, Tray_Hang, Tray_Lie    '建立Tray盘'------------------------------------------------------------------------------Fend

                          ③手动控制(Sys_HandModelTask):

                          a)与PLC地址统一后,可做到在触摸屏完成机器人的示教,包括向XYZU四个方向的正负向移动,以及手臂姿势的切换

                          b)可在触摸屏上选择需要实现的功能,如示教点位、手动移动,相机标定等

                          功能:在触摸屏手动控制x,y,z,u方向的位移

                            ''' <summary>''' Robot手动控制''' </summary>Function Sys_HandModelTask Integer HandSpeed Integer gToHMI_Hand If Motor = Off Then '如果伺服没有ON则打开伺服 Motor On '打开伺服 EndIf
                            If WR(14) = False Then HandSpeed = 3 Else HandSpeed = 20 EndIf
                            Power High '设定运动功率为高功率 Speed HandSpeed '定义Jump、go等PTP运动速度,单位为百分比,最大为100 Accel 50, 50 '定义Jump、go等PTP运动的加速度和减速度,单位为百分比,最大为100 SpeedS 500 '定义Move、Arc、Arc3等CP运动速度,单位为mm/s2,最大为2000 AccelS 500, 500 '定义Move、Arc、Arc3等CP运动的加速度和减速度,单位为MM/S2,最大为25000
                            Int32 i, j
                            '''--------------------------------------------------------------------------------
                            ''' 以下为手动功能选择-------------------------------------------------------------
                            '运动到HMI指定的配方点位(点位执行) If WR(9) = True Then
                            gToHMIX_Robot = DM(30 + DM(4) * 5 + 0) /1000 '获取HMI上设置的P点X方向坐标 gToHMIY_Robot = DM(30 + DM(4) * 5 + 1) /1000 '获取HMI上设置的P点Y方向坐标 gToHMIZ_Robot = DM(30 + DM(4) * 5 + 2) /1000 '获取HMI上设置的P点Z方向坐标 gToHMIU_Robot = DM(30 + DM(4) * 5 + 3) /1000 '获取HMI上设置的P点U方向坐标 gToHMI_Hand = DM(30 + DM(4) * 5 + 4) If gToHMI_Hand = 2 Then Jump XY(gToHMIX_Robot, gToHMIY_Robot, gToHMIZ_Robot, gToHMIU_Robot) /L LimZ ROBOT_LIMZ ElseIf gToHMI_Hand = 1 Then Jump XY(gToHMIX_Robot, gToHMIY_Robot, gToHMIZ_Robot, gToHMIU_Robot) /R LimZ ROBOT_LIMZ EndIf
                            EndIf
                            Function Hand_Move_Inc If WR(0) = True Then 'X方向上的点位运动 If WR(15) = False Then Go Here +X(DM(0) * 0.001) /L CP Else Go Here +X(DM(0) * 0.001) /R CP EndIf EndIf
                            If WR(1) = True Then If WR(15) = False Then Go Here -X(DM(0) * 0.001) /L CP Else Go Here -X(DM(0) * 0.001) /R CP EndIf EndIf
                            If WR(2) = True Then 'Y方向上的点位运动 If WR(15) = False Then Go Here +Y(DM(1) * 0.001) /L CP Else Go Here +Y(DM(1) * 0.001) /R CP EndIf EndIf
                            If WR(3) = True Then If WR(15) = False Then Go Here -Y(DM(1) * 0.001) /L CP Else Go Here -Y(DM(1) * 0.001) /R CP EndIf EndIf
                            If WR(4) = True Then 'Z方向上的点位运动 If WR(15) = False Then Go Here +Z(DM(2) * 0.001) /L CP Else Go Here +Z(DM(2) * 0.001) /R CP EndIf EndIf
                            If WR(5) = True Then If WR(15) = False Then Go Here -Z(DM(2) * 0.001) /L CP Else Go Here -Z(DM(2) * 0.001) /R CP EndIf EndIf
                            If WR(6) = True Then 'U方向上的点位运动 If WR(15) = False Then Go Here +U(DM(3) * 0.001) /L CP Else Go Here +U(DM(3) * 0.001) /R CP EndIf EndIf
                            If WR(7) = True Then If WR(15) = False Then Go Here -U(DM(3) * 0.001) /L CP Else Go Here -U(DM(3) * 0.001) /R CP EndIf EndIfFend

                            4.主函数

                            ①(main):

                            a)打开plc通信线程与CCD通信线程

                            b)0.5s后,调用程序,使机器人初始化

                            c)如果通信链接建立成功标志为True时,获取系统运行状态

                            d)如果工作模式为False时,调用手动系统程序。如果工作模式为Trued)时,调用自动系统程序

                            e)配置CCD连接参数

                            注意:若调试状态,根据需要,可注释掉通讯等功能

                            功能:获取手动系统程序或自动系统程序

                              Function main'''配置PLC连接参数-----------------------------------------------------  FINS_IP$ = '192.168.1.10'        'PLC的IP地址  FINS_PORT = 9600            'PLC端口号  FINSDR_FIRST = 200            'D读写首地址  FINSWR_FIRST = 10            'W读写首地址  Xqt FINS_Task, NoPause          '开启PLC通信线程'''--------------------------------------------------------------------'''配置CCD连接参数-----------------------------------------------------    CCD_IP$ = '192.168.1.11'        'CCD的IP地址  CCD_PORT = 9600              'CCD端口号  CCD_Infor$ = 'TR'            '设定触发拍照的字符串'  Xqt CCD_Task, NoPause          '开启CCD通信线程'''--------------------------------------------------------------------'''机器人初始化--------------------------------------------------------    Wait 0.5  If FINS_ClientOK = True Then    Call Sys_InitRobot          '请自定义初始化内容  EndIf'''--------------------------------------------------------------------'''根据运行状态选择手动/自动-------------------------------------------  Do        If FINS_ClientOK = True Then      gSysRunMode = WR(200)      '获取系统运行状态      If gSysRunMode = False Then    '系统手动        Call Sys_HandModelTask      ElseIf gSysRunMode = True Then  '系统自动        Call Sys_AutoModelTask      EndIf    EndIf  Loop'''--------------------------------------------------------------------  Fend

                              ②自动逻辑控制(Sys_AutoModelTask):

                              a)当和PLC完成通讯且触摸屏地址设置完成后,自动运行的速度可在触摸屏上更改。否则,需自行给Robot_Speed和Robot_Accel赋值。

                              b)在空白处,根据项目需求,添加自动运行时的逻辑

                              功能:进行自动控制的设置

                                '''<summary> Robot自动逻辑控制'''注:'''------------------------------------------------------------------------------------------''| 1.自动运行逻辑不用写死循环(一个动作完成后回到上层继续判断手/自动)''|------------------------------------------------------------------------------------------''| 2.机器人发送W状态给PLC时使用的格式为:''| FINS_Write_PLC_WCmd([字地址],[位地址],[状态]) 例:FINS_Write_PLC_WCmd(3, 0, True) ''| Wait MemSw(0) = On Wait MemSw(0) = On''| 注意不能多线程同时发送;重要信号(影响逻辑)需用IO传递,用通讯传递可能会出现未知问题''|------------------------------------------------------------------------------------------''| 3.若要减少过安全点的停顿及缩短动作用时,参考 EG_Move 函数中的CP指令和JUMP指令优化参数''|------------------------------------------------------------------------------------------''| 4.若要实现在搬运料过程中物品掉落(破真空)时报警的功能,参考 EG_Till 函数''|------------------------------------------------------------------------------------------''| 5.发送错误代码的写法:''| WriteDFlag = True''| WriteErr(0) = 自定义的错误代码''| On DO_ROBOT_ALARM; Wait 0.1 '输出报警IO'''------------------------------------------------------------------------------------------''' </summary>Function Sys_AutoModelTaskInteger ia If StartFlag = False Then '设定自动运行的速度(只设置一次) Power High '设定运动功率为高功率' Speed 100 * Robot_Speed '定义Jump、go等PTP运动速度,单位为百分比,最大为100' Accel 100 * Robot_Accel, 100 * Robot_Accel '定义Junp、go等PTP运动加速度,单位为百分比,最大为120 StartFlag = True EndIf
                                '以下为机器人自动运行时的逻辑-----------------------------------DoWriteDM(0) = 1 + iaWriteDM(1) = 100 + iaia = ia + 1Wait 0.5LoopGo Here :Z(CZ(P(1)))'---------------------------------------------------------------Fend

                                5.基本指令的集合

                                a)线程调用和普通的调用(eg_Call_Xqt)

                                b)点位指定及偏移(Functioneg_Point)

                                c)运动指令用法(Function eg_Move)

                                d)矩阵用法(Functioneg_Juzhen)

                                e)IO的判断和使用(Functioneg_IO)

                                f)条件判断If_Else和分支选择Select_Case的用法(条件判断If_Else和分支选择Select_Case的用法)

                                g)DO...LOOP循环和For...Next循环地区别(Function eg_Xunhuan)

                                h)其余常用指令示例(Function eg_Other):

                                1.计时器        2.等待命令        3.打印           4.定义自由曲线

                                作用:方便考使用

                                (0)

                                相关推荐

                                • 欧姆龙CP系列PLC与CHNet-CP以太网连接编程软件监控配置案例

                                  欧姆龙CP系列PLC与CHNet-CP以太网连接编程软件监控配置案例 产品简介 CHNet-CP是一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用 ...

                                • 三菱FX-5U PLC PC上位机控制

                                  项目上使用的,MES控制PLC启停报警: 工业协议:RS485 自由协议 /* 停线接Y0,红灯Y1,绿灯Y2.9021停线.9022开线.9013绿灯亮 停线一直停,直到收到开线信号后复位.绿灯每次 ...

                                • 欧姆龙CJ系列PLC与CHNet-CJ以太网连接编程软件监控配置案例

                                  欧姆龙CJ系列PLC与CHNet-CJ以太网连接编程软件监控配置案例 产品简介 CHNet-CJ是兴达易控自主研发的一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生 ...

                                • 是单片机高手还是菜鸟?看看你的程序框架就知道了

                                  初学单片机时,往往都会纠结于其各个模块功能的应用,如串口(232,485)对各种功能IC的控制,电机控制PWM,中断应用,定时器应用,人机界面应用,CAN总线等. 这是一个学习过程中必需的阶段,是基本 ...

                                • 你的单片机裸机程序框架是怎样的?

                                  前言 前不久,我有位做测试的朋友转去做开发的工作,面试遇到了一个问题,他没明白,打电话问了我.题目大概就是: 在单片机裸机开发时,单片机要处理多个任务,此时你的程序框架是怎样的呢? 这其实是个经典面试 ...

                                • 原来可以这样编写Fanuc机器人程序!

                                  爱上PLC 公众号 去学PLC技术 Robot 为自动化设备,但在自动化运转之前,必须先告诉Robot 要自动完成哪些动作,透过「撰写Robot 程序」可达到此目的. Robot 程序主要由「动作指令 ...

                                • 库卡机器人程序结构和组成的讲解

                                  程序流程控制 除了纯运动指令和通讯指令(切换和等待功能)之外,在机器人程序中还有大量用于控制程序流程的程序.其中包括: 循环 | 循环是控制结构.它不断重复执行指令块指令,直*出现终止条件. 无限循环 ...

                                • 如何编写Fanuc机器人程序!

                                  Robot 为自动化设备,但在自动化运转之前,必须先告诉Robot 要自动完成哪些动作,透过「撰写Robot 程序」可达到此目的. Robot 程序主要由「动作指令」构成,只要熟悉手动操作Robot ...

                                • 干货 | FANUC机器人程序自动启动介绍

                                  ▼工业机器人教学,关注有惊喜 ▼ 小编微信☜ 公众号二维码☞ 内容来源:上海发那科机器人

                                • 如何编写Fanuc机器人程序

                                  Robot 为自动化设备,但在自动化运转之前,必须先告诉Robot 要自动完成哪些动作,透过「撰写Robot 程序」可达到此目的. Robot 程序主要由「动作指令」构成,只要熟悉手动操作Robot ...

                                • 干货 | FANUC机器人程序偏移功能

                                  干货 | FANUC机器人程序偏移功能

                                • FANUC机器人操作入门:如何编写机器人程序(5)

                                  Robot 为自动化设备,但在自动化运转之前,必须先告诉Robot 要自动完成哪些动作,透过「撰写Robot 程序」可达到此目的. Robot 程序主要由「动作指令」构成,只要熟悉手动操作Robot ...