使用正运动控制器读取松下 A6 编码器的例程 点击:916 | 回复:2



正运动技术

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:267帖 | 328回
  • 年度积分:50
  • 历史总积分:918
  • 注册:2020年9月10日
发表于:2023-07-25 11:54:47
楼主

本文将使用正运动技术运动控制器实现与松下A编码器进行数据读取操作。


'************************绝对值编码器部分******************************

SETCOM(38400,8,1,0,1,0) '设置 485 口 PORT1 为自定义协议

GLOBAL DIM tempchar '接收的一个字节

GLOBAL DIM neqbuff(2) '发送识别码 485 为 81H,05H

neqbuff(0) = $81

neqbuff(1) = $05

GLOBAL DIM eotbuff(2) '接收识别码 485 为 80H,04H

eotbuff(0) = $80

eotbuff(1) = $04

GLOBAL DIM ackbuff '接收应答 06H

ackbuff = $06

GLOBAL DIM cmdbuff(20) '发送命令数组

GLOBAL DIM getbuff(20) '接收的字符串

GLOBAL DIM getnum '接收的字节数

getnum = 0

GLOBAL DIM highdata '编码器多圈数据

GLOBAL DIM lowdata '单圈数据

runtask 4,get_char '启动接收字符串任务

MODBUS_REG(0)=0

WHILE 1

  IF MODBUS_REG(0)=1 THEN '判断是否接收到了数据

     MODBUS_REG(0)=0

     getmpos(1,45) '读取站号 1 的多圈与单圈值。

  ENDIF

WEND 

END 


'读坐标

GLOBAL SUB getmpos(sifunum,rcr) '读伺服编号为 1 的电机的绝对值位置

   cmdbuff(0) = $00

   cmdbuff(1) = sifunum

   cmdbuff(2) = $d2

   cmdbuff(3) = rcr

   neqbuff(0) = $80 + sifunum 

   neqbuff(1) = $05

   eotbuff(0) = $80 

   eotbuff(1) = $04

   getnum = 0

   putchar #1,neqbuff

   TICKS = 2000 '延时

   WAIT UNTIL (getnum = 2) OR TICKS < 0

   IF getnum = 2 THEN '如果接到了 2 个字符

      IF(getbuff(0)=$80+sifunum) AND (getbuff(1)=$04) THEN'收到应答发送命令

         getnum = 0

         PUTCHAR #1,cmdbuff '发送读取编码器命令

         TICKS = 2000

         WAIT UNTIL (getnum = 3) OR TICKS < 0

         IF(getbuff(0) = $06) AND (getbuff(1) = $80) AND (getbuff(2) = $05) THEN'收到发送请求,给应答

             getnum = 0

             PUTCHAR #1,eotbuff '发送应答,等待接收数据

             TICKS = 2000

             WAIT UNTIL (getnum = 15) OR TICKS < 0

             IF getnum = 15 THEN '读到数据 11-10 为多圈数据 9-7 为单圈数据

                PUTCHAR #1,ackbuff

                highdata = getbuff(11) * $100 + getbuff(10)

                lowdata = getbuff(9) * $10000 + getbuff(8) * $100 +getbuff(7)

                PRINT getbuff(11),getbuff(10),getbuff(9),getbuff(8),getbuff(7),getnum

             ELSE 

                PRINT getnum,getbuff(0) ,getbuff(1),"超时重新读取 1"

             ENDIF

           ELSE

            PRINT getbuff(0) ,getbuff(1),"超时重新读取 2"

          ENDIF

        ELSE

          PRINT getbuff(0) ,getbuff(1),"驱动器无应答"

        ENDIF

      ELSE

        PRINT "驱动器无应答"

      ENDIF

END SUB


'串口接收

GLOBAL SUB get_char()

   WHILE 1

      GET #1,tempchar

      getbuff(getnum) = tempchar

      getnum = getnum + 1

   WEND

END SUB




楼主最近还看过



正运动技术

  • 精华:0帖
  • 求助:1帖
  • 帖子:267帖 | 328回
  • 年度积分:50
  • 历史总积分:918
  • 注册:2020年9月10日
发表于:2023-07-25 11:55:10
1楼

点击正运动技术官网:www.zmotion.com.cn 或拨打  400-089-8936 获取更多学习资料和产品资料

——更多精彩内容请关注“正运动小助手”公众号

——更多精彩产品视频介绍请关注“正运动技术”抖音号


正运动技术

  • 精华:0帖
  • 求助:1帖
  • 帖子:267帖 | 328回
  • 年度积分:50
  • 历史总积分:918
  • 注册:2020年9月10日
发表于:2023-07-25 11:55:17
2楼

正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。


热门招聘
相关主题

官方公众号

智造工程师