• 记录一个ABB机器人RobotStudio软件智能组件的神奇地方(走进科学来了都得拍三天)


    “走进科学”来了都得拍三天

    背景:

    • 做项目的时候生产线产品规格比较多、位置有偏差,robotstudio仿真中为了设备能用于所有规格的产品需要对所有规格的产品进行测试,修改完产品规格和位置进行测试,测试完再改规格、位置再测试过于麻烦,所以萌生出用智能组件自动生成不同规格产品进行测试,以节省后续测试时间;
    • 项目中是根据图像定位产品位置的,所以需要利用三个“线性传感器”(智能组件,功能是能记录与之接触物体接触点的坐标);
    • 总的逻辑就是:
      * ①产生一个产品
      * ②触发线性传感器读取位置
      * ③进行测试
      * ④测试完,产生下一规格的产品
      * ⑤触发线性传感器读取位置
      * ⑥进行测试
      * 循环反复……

    开始

    • 正常的实现逻辑如下
    			//产生产品
    			Set sdoSimulateShow; 
                WaitTime 0.5;
                Reset sdoSimulateShow;
    
    			//触发数据读取,读取到posSimuLeft、posSimuMiddle、posSimuRight中
                Set sdoSimulateGetData;
                //显示出读取到的值
                ErrWrite\I, "posSimuLeft",NumToStr(posSimuLeft.x,0)\RL2:=NumToStr(posSimuLeft.y,0)\RL3:=NumToStr(posSimuLeft.z,0);
                ErrWrite\I, "posSimuMiddle",NumToStr(posSimuMiddle.x,0)\RL2:=NumToStr(posSimuMiddle.y,0)\RL3:=NumToStr(posSimuMiddle.z,0);
                ErrWrite\I, "posSimuRight",NumToStr(posSimuRight.x,0)\RL2:=NumToStr(posSimuRight.y,0)\RL3:=NumToStr(posSimuRight.z,0);
    
    			//读取到的值赋值到另一个变量
                MData.DData.posDWheelLeft := posSimuLeft;
                MData.DData.posDWheelMiddle := posSimuMiddle;
                MData.DData.posDWheelRight := posSimuRight;
                
                //显示出被赋值的变量的值
                ErrWrite\I, "MData.DData.posDWheelLeft",NumToStr(MData.DData.posDWheelLeft.x,0)\RL2:=NumToStr(MData.DData.posDWheelLeft.y,0)\RL3:=NumToStr(MData.DData.posDWheelLeft.z,0);
                ErrWrite\I, "MData.DData.posDWheelMiddle",NumToStr(MData.DData.posDWheelMiddle.x,0)\RL2:=NumToStr(MData.DData.posDWheelMiddle.y,0)\RL3:=NumToStr(MData.DData.posDWheelMiddle.z,0);
                ErrWrite\I, "MData.DData.posDWheelRight",NumToStr(MData.DData.posDWheelRight.x,0)\RL2:=NumToStr(MData.DData.posDWheelRight.y,0)\RL3:=NumToStr(MData.DData.posDWheelRight.z,0);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 神奇的事情出现了,就是线性传感器读取的数据是正确的,而赋值后,被赋值的变量却还是上一次读取的数据
      在这里插入图片描述
    • 测试了很久,发现要运行正常,处理方式是:赋值后,延迟0.5秒后,再赋值一次
    			//产生产品
    			Set sdoSimulateShow; 
                WaitTime 0.5;
                Reset sdoSimulateShow;
    
    			//触发数据读取,读取到posSimuLeft、posSimuMiddle、posSimuRight中
                Set sdoSimulateGetData;
                //显示出读取到的值
                ErrWrite\I, "posSimuLeft",NumToStr(posSimuLeft.x,0)\RL2:=NumToStr(posSimuLeft.y,0)\RL3:=NumToStr(posSimuLeft.z,0);
                ErrWrite\I, "posSimuMiddle",NumToStr(posSimuMiddle.x,0)\RL2:=NumToStr(posSimuMiddle.y,0)\RL3:=NumToStr(posSimuMiddle.z,0);
                ErrWrite\I, "posSimuRight",NumToStr(posSimuRight.x,0)\RL2:=NumToStr(posSimuRight.y,0)\RL3:=NumToStr(posSimuRight.z,0);
    
    			//读取到的值赋值到另一个变量
                MData.DData.posDWheelLeft := posSimuLeft;
                MData.DData.posDWheelMiddle := posSimuMiddle;
                MData.DData.posDWheelRight := posSimuRight;
    
    			//延迟0.5秒后,再赋值一次
    			WaitTime 0.5;
    			MData.DData.posDWheelLeft := posSimuLeft;
                MData.DData.posDWheelMiddle := posSimuMiddle;
                MData.DData.posDWheelRight := posSimuRight;
                
                //显示出被赋值的变量的值
                ErrWrite\I, "MData.DData.posDWheelLeft",NumToStr(MData.DData.posDWheelLeft.x,0)\RL2:=NumToStr(MData.DData.posDWheelLeft.y,0)\RL3:=NumToStr(MData.DData.posDWheelLeft.z,0);
                ErrWrite\I, "MData.DData.posDWheelMiddle",NumToStr(MData.DData.posDWheelMiddle.x,0)\RL2:=NumToStr(MData.DData.posDWheelMiddle.y,0)\RL3:=NumToStr(MData.DData.posDWheelMiddle.z,0);
                ErrWrite\I, "MData.DData.posDWheelRight",NumToStr(MData.DData.posDWheelRight.x,0)\RL2:=NumToStr(MData.DData.posDWheelRight.y,0)\RL3:=NumToStr(MData.DData.posDWheelRight.z,0);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    结束

  • 相关阅读:
    培训考试系统如何满足个性化学习需求?
    图数据库基准测试 LDBC SNB 系列讲解:Schema 和数据生成的机制
    C#中的浅拷贝(Shallow Copy)和深拷贝(Deep Copy),深拷贝的集中实现方式,浅拷贝深拷贝的案例
    从零学习 InfiniBand-network架构(六)—IB协议链路层QoS如何实现
    SVGRenderer 是 three.js 中的一个渲染器,用于将 3D 场景渲染到 SVG(可缩放矢量图形)元素中。
    跨越速运如何构建实时统一的运单分析
    【Python】click模块开发命令行应用
    JDK8、11、17的新特性
    LQ0026 修剪灌木【数学】
    关联规则之 Apriori 算法实现
  • 原文地址:https://blog.csdn.net/weixin_45799452/article/details/133103210