谈FANUC KAREL与C的几点区别

春招最后去了个制造业的小公司,被派去写发那科机器人的通信程序,要用到karel语言,看了一周多手册和资料,自己总结了以下几点:

Karel与C的区别

  1. 数组索引从1开始而不是从0开始, FOR s TO e的遍历区间是[s,e]而不是[s,e), 注意

  2. 不能操作变量地址,也不能隐式转换,因此在面临一些类型转换的情况很不灵活,虽然Karel本身有一些自带的例程比如CNV_STR_INT,CHR,ORD这些,但是有一些特殊情况,像字节串转换成数字之类的情况, 还是有必要自制函数。

  3. ROUTINE的参数列表,每个参数是以;区分的,而不是,区分的,别被坑了。

    相同类型的参数可以用,写在一起,比如

    ROUTINE func(x1,x2,y1,y2 : INTEGER)

  4. 不存在重载和重写,函数名确定下来了就是唯一的ID,不可重复实现,和C一样

  5. 数据类型对比:STRING - const char*, INTEGER - int, BYTE - char, REAL - float, STRUCTURE - struct, Karel还有一些独有类型比如VECTOR,XYZWPR, POS等

  6. Karel的STRING是只读的,可以拼接扩展(类似C的strcat,推测本质是另开辟更大的内存用于存放新拼接的字符,并重定向到那块内存), 有SUB_STR, STR_LEN等内置函数,没法下标索引取字节, 更没法通过下标赋值,但却是Karel的基本类型之一,可以直接=赋值 / READ / WRITE

  7. 各数据类型的转换总结:

    BYTE,INTEGER和REAL:
    	INTEGER(范围局限在0-255内) 可直接赋值给 BYTE
    	BYTE 可直接赋值给 INTEGER, REAL
    BYTE和STRING:
    	BYTE ---CHR---> STRING
    	STRING --ORD---> BYTE
    STRING和INTEGER:
        STRING单个字符转换成INTEGER可用ORD的方法
        STRING整体转化成INTEGER用CNV_STR_INT,注意实现类似于C++的stoi而不是隐式转换,如果STRING存在非法值如无法打印的字符是无法转换INTEGER的(返回UNINIT),因此幻想用它将HEX串转成数字就算了,必须自行实现
    	INTEGER可通过CHR转换成对应的ASCII字符
    	INTEGER也可通过CNV_INT_STR转换成对应的字符串,类似C++ to_string方法
    	
    
  8. IO对比:都有文件读写(FILE类型对FILE指针)和终端读写(TPDISPLAY和stdout)的形式,Karel的READ 还可以直接括号变量从外界输入取值,起到Python中input的作用

  9. FROM是个有用的东西,利用FROM可以实现头文件和模块化的编程,注意你要程序FROM引用的模块要确保已经编成pc程序放入示教器中了。

  10. Karel没有自己的自动化构建工具,但是也可以用C的makefile实现统一构建打包(把编好的各pc程序放在一个文件夹),配合ftp脚本把构建好的包内pc程序一次性加载到示教器上,再也不用到roboguide上一个个构建了,美滋滋!

    关于怎么搞自动化构建,可参考github的这位大佬:https://github.com/onerobotics/strings

  11. Karel的调试方法包括:

    1. 日志(WRITE TPDISPLAY)
    2. 单步调试(需在示教器上设置: MENU - 试运行 - 单步命令执行方式 设置为 每个命令)
    3. DATA查看变量,只能查看PROGRAM级别的全局变量,ROUTINUE内定义的变量看不了
    4. 伪断点:代码中插入PAUSE
    5. 设置全局STATUS变量,在调用返回status的例程时可用于检测例程是否正常运行(如socket中调用MSG_CONNECT)
    6. 示教器报错的代码可在https://www.shanghai-fanuc.com.cn/trouble/查询原因。
  12. Karel的循环方式:REPEAT-UNTIL, FOR-TO-DO-ENDFOR, WHILE-ENDWHILE,在Karel中没有continue和break这样的语句来实现循环内的条件控制,只能用GOTO这样的方法代劳(很古老吧,不过现代语言的continue和break本质上也是GOTO)

  13. Karel学习最有力的三大工具:手册, github, 交接资料上的相关视频及衍生群组(如飘雨阁i)

  14. Keep Learning!

ADD:
Karel socket编程,机器人作为server或者client通信用的都是port, 机器人做服务器用的是server port, 反之是client port, 前者MSG_CONNECT起到监听兼连接的作用。

### 回答1: KarelFANUC机器人的编程语言之一,用于编写焊接程序。以下是一个简单的Karel焊接程序示例: ``` &ACCESS RVP &REL 1 &PARAM TEMPLATE = C:\KAREL\TEMPLATE\GENERIC\T_ROB2 &PARAM EDITMASK = * &PARAM TEMPLATE = C:\KAREL\TEMPLATE\GENERIC\T_ROB2 DEF MY_WELD() WELD 100, 100, 1, 0, 0, 0, 10, 1000 END PULSE MY_WELD() ``` 这个程序定义了一个名为MY_WELD的子例程,其中使用WELD命令执行焊接操作。最后,使用PULSE命令调用子例程。您可以根据需要修改参数和坐标值以适应您的特定应用程序。 ### 回答2: FANUC机器人Karel焊接程序是指使用FANUC机器人的Karel编程语言编写的焊接程序。Karel编程语言是FANUC机器人控制器上的一种高级编程语言,它可以帮助程序员控制机器人完成各种任务。 Karel焊接程序主要用于控制FANUC机器人进行焊接任务。它包含了机器人的运动轨迹、焊枪的位置和角度、焊接速度、焊接参数等信息。通过编写Karel焊接程序,可以实现高效、准确和稳定的焊接操作。 编写Karel焊接程序需要一定的技术和经验。首先,程序员需要了解焊接工艺和焊接参数的设定,包括焊接电流、电压、焊接时间等。然后,根据具体的焊接需求,设计机器人的运动轨迹和焊接路径。接下来,基于FANUC机器人的Karel编程语言,编写焊接程序,包括机器人的移动指令、焊接参数设定、信号检测等。 使用FANUC机器人Karel焊接程序可以带来许多好处。首先,机器人可以自动完成焊接任务,提高生产效率和质量。其次,程序可以实现焊接路径的灵活调整,适应不同尺寸和形状的工件。此外,使用Karel编程语言,程序员可以自定义更加复杂的焊接算法,以满足特定的焊接需求。 总之,FANUC机器人Karel焊接程序是一种高效、准确和灵活的焊接解决方案。它在各种焊接应用中具有广泛的适用性,并且可以通过不断优化和改进来满足不断变化的焊接需求。 ### 回答3: FANUC机器人Karel焊接程序是一种专门用于FANUC机器人进行焊接操作的编程语言和指令集合。Karel焊接程序可以通过灵活的语法和丰富的指令来控制机器人的动作和参数设置,使其能够完成各种类型的焊接任务。 Karel焊接程序通常包括几个主要的部分:初始化设置、位置定义、运动指令和焊接指令。在初始化设置中,我们可以定义机器人的参数和工具坐标系,以及设置焊接相关的参数,如速度、力量等。位置定义部分则包括定义待焊接工件的坐标位置和姿态,通过定义多个位置,可以实现焊接多个点的操作。运动指令部分则是控制机器人的运动,包括机器人的起点和终点位置、路径规划、速度设置等。最后,焊接指令部分包括具体的焊接操作,如点焊、拖焊、设定焊接参数等。 Karel焊接程序具有编程简单、逻辑清晰、易于调试等特点。通过编写Karel焊接程序,机器人能够根据指定的参数和位置,实现高精度的焊接操作。同时,Karel焊接程序还可以其他外部设备进行通信,实现更高级别的自动化控制。 总之,FANUC机器人Karel焊接程序是一种功能强大的编程语言,适用于各种类型的焊接任务。通过编写Karel焊接程序,可以有效提高焊接操作的效率和质量,并实现机器人的智能化控制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值