RoboDK论坛
机器人驱动程序-限制program_id??-打印版本

+- RoboDK论坛(//www.w5838.com/forum
+——论坛:RoboDK (EN) (//www.w5838.com/forum/Forum-RoboDK-EN
+——论坛:RoboDK API (//www.w5838.com/forum/Forum-RoboDK-API
+——线程:机器人驱动程序-限制program_id??(/ Thread-Robot-driver-Limit-for-program-id



机器人驱动程序-限制program_id??-DavidG-06-01-2019

你好,
我正在使用机器人驱动程序的可定制部分:
代码:
例13
-----运行程序COM_VALUE1 ---------
;(从RoboDK触发:使用机器人。RunCodeCustom("程序id", INSTRUCTION_CALL_PROGRAM)
program_id = COM_VALUE1
正如Albert建议我的那样,我正在使用程序id将数据传输给机器人控制器(相关的线程),再次感谢你的提示。不幸的是,程序id似乎有一个限制。下面是我的代码片段:


代码:
如果len (sys.argv) > 1:
ExtValue = float(sys.argv[1])

如果ExtValue != 0:
ExtInt = int(ExtValue*1000+20000000)
ExtProgID = str(ExtInt)
机器人。RunInstruction (ExtProgID INSTRUCTION_CALL_PROGRAM)
[url = //www.w5838.com/forum/Thread-Python-Specific-post-processor-and-run-mode-for-machining-project] [/ url]

基本上,如果我用
机器人。运行指令('程序20',INSTRUCTION_CALL_PROGRAM)
一切都很好。但如果我试图传递一个更大的值,比如
机器人。运行指令('程序2000000',指令调用程序)或者(在我的实际应用程序中)
机器人。运行指令('Program 20000000', INSTRUCTION_CALL_PROGRAM)
机器人控制器接收到0或一些无用的东西,响应是奇数。我检查了机器人方面的数据类型,看看它是否可以处理这个值,但是KUKA整数可以处理2^31-1。
你对此有何解释?RoboDK在这里有限制吗?


机器人驱动程序-限制program_id??-DavidG-06-04-2019

下面是我的问题的一个最小工作示例。附件是RDK项目,机器人驱动程序的相关部分是这样的:

代码:
例13
-----运行程序COM_VALUE1 ---------
;(从RoboDK触发:使用机器人。RunCodeCustom("程序id", INSTRUCTION_CALL_PROGRAM)
program_id = COM_VALUE1
开关program_id
案例1
$ anout [20] = 0.01

例12
$ anout [20] = 0.02

例123
$ anout [20] = 0.03

例1234
$ anout [20] = 0.04

例12345
$ anout [20] = 0.05

例123456
$ anout [20] = 0.06

例999999
$ anout [20] = 0.07

例1000000
$ anout [20] = 0.08

例1000001
$ anout [20] = 0.09

要调用的程序id必须在python脚本中手动编辑。该例程在程序id为1000000(包括)时可以正常工作。
如果我打电话

代码:
机器人。运行指令('程序1000001')
机器人控制器没有回应。


机器人驱动程序-限制program_id??-艾伯特-06-07-2019

可以看到COM_VALUE1被定义为一个REAL (KUKA KRC类型的变量)。这意味着它是一个浮点变量(32位)。这种类型的变量最多可以容纳6位有效数字:
https://en.wikipedia.org/wiki/Single-precision_floating-point_format

但是,您可以利用十进制值并在需要时传递附加信息(不需要将值相乘)。

RoboDK的值四舍五入到最接近的整数,但我们已经更新了RoboDK,以允许为函数调用传递十进制值(需要最新版本)。我建议你更新RoboDK,使用浮点值。即使RoboDK会记住64位双精度,KUKA控制器也会接收一个32位浮点值。


机器人驱动程序-限制program_id??-DavidG-06-11-2019

嗨,阿尔伯特,
非常感谢你解决了这个难题。我真的没有看到我在处理浮点数。

我之所以用这个方法

代码:
(价值* 1000)+ 20000000
是因为价值格式为'x,xxx.xxx'。将其与1000相乘得到一个<10,000,000的整数值。我在机器人驱动器中创建了两个不同的程序。要决定应该执行哪个程序,我要么将10,000,000或20,000,000添加到我的整数值中,然后将其作为程序id。所以,如果我的程序id在1E7和2E7之间,程序1将被执行。对于2E7到3E7之间的程序id,执行程序2。这是一种糟糕的风格,但我没有看到另一种方法来传递一个值和一个标识符的程序只有一个参数。
如果你能把程序调用的结构改成这样,也许这将是一个很好的、功能强大的特性:

代码:
机器人。运行指令('程序id','可选参数',INSTRUCTION_CALL_PROGRAM)
不要误解我的意思,我认为我手头的解决方案很好,所以我不想贪心。请将此作为反馈或未来更新的建议。
谢谢你的大力支持。