目的
通过修改 JOpenShowVar 示例代码,创建一个可以命令行使用的工具,以便灵活查看和修改 KUKA KRC4 变量,比如可以集成在 Windows Shell 中。
介绍
KUKA机器人的 KRC4 控制器没有直接开放 TCP/IP 通讯的接口,而是另外提供了一系列收费的软件包,如 KRL XML、RSI、OPC ,这些软件包都需要另外购买安装。值得让人兴奋高兴的是, 一些技术爱好者利用 KUKA 本身的技术,自己来编写程序与系统交互,比如 Massimiliano Fago [linkedin] 开发了 OpenShowVar ( 客户端,基于Qt ) 和 KUKAVARPROXY ( 服务器端,运行于 KRC4 控制器 Windows系统中。IMTS官方 2018-01-08 宣布开源了 https://www.imts.eu/open-sourcing-kukavarproxy/,并在 2019-01-20 正式开放源代码 https://github.com/ImtsSrl/KUKAVARPROXY ) ,Aalesund University College 的 Lars Ivar Hatledal [blog] 又在此基础上开发了 KUKAVARPROXY 的 JAVA 版本客户端类库 JOpenShowVar(JRE 7 / 8),这两位的创作,使得 KUKA 机器人的 KRC4 控制器具有了第三方的免费而且开源的可以与 PC 通讯的组件,为爱好者以及调试人员打开了一扇方便之门。
JOpenShowVar 的 README.md 中有一段示例代码作为演示其用法,可以稍作修改,成为命令行版本,让地址、变量、变量值这些通过 main 的形参传入,这样,即便不懂编程,也可以用命令行方式的批处理程序来实现变量修改功能。那么就把它起个名字叫 JOpenShowVarCMD 吧。
原示例代码 v0.1 如下:
public class Example { private static String robotIP = "192.168.2.2"; //The static IP of the robot private static int port = 7000; public static void main(String[] args) throws IOException { CrosscomClient client = new CrossComClient(robotIP, port); //establish connection //Reads the current value of $OV_JOG and print the callback containing the value Callback readRequest = client.sendRequest(new Request(0, "$OV_JOG")); //read request System.out.println(readRequest); //Set $OV_JOG to 100% and print the callback Callback writeRequest = client.sendRequest(new Request(1, "$OV_JOG", "100")); //write request System.out.println(writeRequest); //note that the first int argument can be any number between 0 and 99. It is simply an id given to the request so that it can be tracked. } }
修改如下:
import java.io.IOException; import javax.swing.JOptionPane; import no.hials.crosscom.networking.Callback; import no.hials.crosscom.networking.CrossComClient; import no.hials.crosscom.networking.Request; public class Example { public static void main(String[] args) throws IOException { if(args.length<2 || args.length >3 ){ System.out.println("usage: java -jar JOpenShowVarCMD.jar IP_address Var [SetVarValue]"); JOptionPane.showMessageDialog(null, "java -jar JOpenShowVarCMD.jar IP_address Var [SetVarValue]", "usage:", JOptionPane.PLAIN_MESSAGE); } if (args.length > 1){ CrossComClient client = new CrossComClient(args[0], 7000); switch (args.length){ case 2: Callback readRequest = client.sendRequest(new Request(0, args[1])); //read request System.out.println(readRequest); break; case 3: Callback writeRequest = client.sendRequest(new Request(1, args[1], args[2])); //write request System.out.println(writeRequest); break; default: } } } }
感谢 NetBeans IDE 8.0 的友好,能让我立刻上手编译出来 jar 文件。
用法 0:
构建生成 jar 文件后,命令行传递参数的用法如下:
java -jar JOpenShowVarCMD.jar IP_address Var [SetVarValue]
如果在 Windows 系统,还可以使用 shell 来简化命令:
用法 1:
创建一个 Windows Shell 程序,利用传递参数 %1 %2 %3 传递地址、变量和数值。编写 KukaVar.bat 内容如下:
@echo off java -jar "JOpenShowVarCMD.jar" %1 %2 %3
编辑保存 KukaVar.bat 后,可将 KukaVar.bat 所在位置加入到系统路径中,就可以打开命令行 cmd 这样执行:
kukavar IP_address Var [SetVarValue]
比如读和写 $OV_PRO 变量 :
kukavar 10.1.10.128 $OV_PRO
kukavar 10.1.10.128 $OV_PRO 90
也可以直接把 IP 地址写入KukaVar.bat 中,这样就不必每次输入IP地址,更加省事:
@echo off java -jar "JOpenShowVarCMD.jar" 10.1.10.128 %1 %2
效果如图:
JOpenShowVarCMD的优点
JOpenShowVar 作者Github上也提供了swing 的应用,会有对话框出现,不过目前的版本还有些bug,有些变量内容界面上解析不出来。另外作者自己的console版本,连上服务器后,就不断开而是出于一直等待输入的状态,这种方式不能利用返回的结果。彼的不足就是此的优势了。
JOpenShowVar 类库的用处
KUKA的 SmartPad 或者 OfficeLite 中查看和修改变量还是有些许不便,在调试程序和验证算法时,能在PC上修改变量内容,可以提高效率和舒适度。同样适用于 OpenShowVar,不过OpenShowVar是用 Qt4 编译的,我尝试自己编译却没有成功,而编译JOpenShowVar却很顺利编译成功,所以JOpenShowVar对于想学习JAVA来说,简直是完美的入门素材。
注意事项
使用这些直接操纵控制器接口的软件 (其他比如 KUKA.OPC ) 都要考虑一个非常重要的概念:SPOC ,即 Single Point Of Control。单点控制。使机器人运动只能由一个控制源启动且不能被另一控制源撤销的操作机器人的能力。不然程序考虑不周,会造成安全问题。
下载:
- JOpenShowVarCMD v0.1 本地下载:JOpenShowVarCMD.v.0.1.zip
- JOpenShowVarCMD Github 下载:https://github.com/davidrobot/JOpenShowVarCMD.git
更新:
2014-08-26 作者 Lars Ivar Hatledal 自己也添加了控制台程序代码,参见作者的blog: http://laht.info/jopenshowvar-v0-2/ 。
Git的记录:
Author: laht <laht@hials.no> 2014-08-26 18:28:57 Committer: laht <laht@hials.no> 2014-08-26 18:28:57 Parent: e796de7837d2805ea93c7eb1c15626cbff79e2c1 (Merge branch 'experimental' of https://github.com/aauc-mechlab/JOpenShowvar into experimental) Child: 9a6823691f92b99bc825859d1dbcb2afa9fd17a6 (Fixed an error with the torque reading) Branches: master, remotes/origin/master Follows: Precedes: Update to core. Added console application and get methods for joint angles and torques
扩展阅读:
- new kuka openshowvar
http://www.robot-forum.com/robotforum/kuka-robot-forum/new-kuka-openshowvar-7961/
- JOpenShowVar: a Java open-source cross-platform communication interface
http://www.robot-forum.com/robotforum/kuka-robot-forum/jopenshowvar-is-a-java-open-source-cross-platform-communication-interface/
关键字:KRC4, KUKAVARPROXY, OpenShowVar, JOpenShowVar, CROSS