一、用实例感受一下reltool的功能
先来看看典型的目录结构
/home/arksea
|--client
|--ebin
|--include
|--nbproject
|--priv
|--src
|--test
用reltool生成目标系统的过程为
1、写配置文件client.config
2、启动erl,如果提示需要以smp方式启动要加上参数erl -smp
3、生成目标系统
Eshell V5.7.3 (abort with ^G)
1> {ok,Server}=reltool:start_server([{config,"client.config"}]).
{ok,<0.32.0>}
2> reltool:create_target(Server, "target").
ok
3>
就这么简单,我们看看生成的目标系统的目录结构
target
|--bin
|--erts-5.7.3
|--release
| |--0.1
| | |--client.boot
| | |--client.rel
| | |--client.script
| |--start_erl.data
|--lib
|--client-0.1
| |--priv
|--client-0.1.ez
|--erts-5.7.3.ez
|--kernel-2.13.3.ez
....
对,没错,所有的lib下的beam文件都被打包到一个.ez压缩包中了,这对于嵌入到客户端的系统来说是个好特性,啥时候再支持一下包认证就更棒了。
二、部署描述文件实例
看完了reltool的效果,现在来看看重点,也就是部署描述文件client.config的结构
下面是这个例子的部署描述文件,因为是嵌入到客户端程序中所以要尽量小,剔除了比较多的东西,服务端系统通常无需使用如此复杂的包含规则。最终的target目录里只剩12M的东东,还算可以接受,当然如果你愿意应该还是有不少东西是可以剔除的。
{sys,[{lib_dirs,["/home/arksea"]},
{boot_rel,"client"},
{rel,"client","0.1",[kernel,stdlib,sasl,client]},
{debug_info, keep},
{incl_sys_filters,["^bin/","^erts-.*?/","^release"]},
{excl_sys_filters,["/doc","/usr","/man","/src","/include","/lib",
"/dialyzer.exe$","/escript.exe$","/werl.exe$",
"/beam.debug.dll$","/beam.debug.smp.dll$",
"\.pdb$"]},
{incl_app_filters,["^ebin/"]},
{excl_archive_filters,[]},
{app,kernel,[{incl_cond,include}]},
{app,stdlib,[{incl_cond,include}]},
{app,sasl,[{incl_cond,include}]},
{app,client,[{incl_cond,include},
{incl_app_filters,["^ebin/","^priv/"]},
{excl_archive_filters,["^priv$"]}]}
]
}.
erlang的文档中有关于reltool部署描述的详细解释,说得很清楚了。需要说明的是别看reltool文档中列出了一坨的参数,不要害怕,基本上只要使用默认值就行了,比如以上的部署描述文件只要这样写就能正常工作了:
{sys,[{lib_dirs,["/home/arksea"]},
{boot_rel,"client"},
{rel,"client","0.1",[kernel,stdlib,sasl,client]},
{debug_info, keep},
{app,kernel,[{incl_cond,include}]},
{app,stdlib,[{incl_cond,include}]},
{app,sasl,[{incl_cond,include}]},
{app,client,[{incl_cond,include}]}
]
}.
是不是简单了许多?只是打出来的包要大不少。
三、部署描述文件的编写
下面对一些常用的参数进行解释
1、首先是 lib_dirs,文档中说是系统依赖库的位置,实际上你也应该把项目路径的
父目录填在这里,这点
很重要,否则就搜索不到你的系统咯。比如这里,项目client所在的父目录是/home/arksea,
可以填写相对路径比如../server
2、文件包含规则有一系列的参数,这些参数都支持正则表达式
incl_sys_filters
excl_sys_filters
incl_app_filters
excl_app_filters
incl_archive_filters
excl_archive_filters
这里说说所谓“sys”、“app”、“archive”的概念
- sys是指erlang安装目录下的文件(除了lib目录),如果你配置了root_dir则为你指定的目录;
- app是指lib_dirs参数指定目录下的文件,以及root_dir/lib下的文件
- archive则指出了app中哪些文件将被打包到.ez中
强调一点,这里的文件名都是相对路径哟,写正则表达式的时候要注意
- sys的起始位置是root_dir
- app的起始位置是root_dir/lib/appname和lib_dirs/appname
举个例子
root_dir/lib/mnesia-4.4.11/doc将被表示为
doc
root_dir/lib/mnesia-4.4.11/examples/bench将被表示为
examples/bench
所以要剔除这些文件应该这样写正则表达式:
{excl_app_filters, ["^doc","^examples/bench"]}
3、rel参数用于生成rel、script、boot文件,请参考systool文档。rel参数非常的简单,只要为系统起一个名字与版本号,然后列出本系统所直接依赖的app,连版本号都不要写,reltool会自动根据root_dir与lib_dirs中的erlang与各app版本生成rel文件
4、每个app可以有自己的filter参数,如果你写了它将覆盖sys层的filter参数。
需要注意的一点是,app的名字必须与其文件夹的名字相同,比如这里的app名是client,则其文件夹应为lib_dirs/client
.
分享到:
相关推荐
本文档阐述了工业机器人reLTOOL坐标方向以及TCF标定的六点法原理,这对于理解机器人运动控制至关重要。 一、标定基本步骤 1. 首先,选取一个精确的固定点作为参考点,通常位于机器人工作范围内的稳定位置。 2. 在...
本文将深入探讨ABB机器人中reLTOOL函数的使用,以及姿态表示和乘法运算的差异。 reLTOOL函数在ABB机器人编程中用于描述工具相对于基座或者工作对象(WObj)的相对位置和姿态。在这个例子中,我们看到`reltool(phome...
换键选择所用函数 Offs() 或 RelTool() 。 •Offs(p1,100,50,0) 代表一个距离 p1 点 X 轴偏差量为 100mm,Y 轴偏差量为 50mm,Z 轴偏差量为 0 的点。 •函数 Offs() 座标方向与机器人 World 座 标系一致。
7. Reltool与Reltool2015.4.25 这可能是某个特定的工具或者功能模块的名称,可能用于指定相对位置或者是某个特定功能,但由于信息不完整,无法确切判断其具体作用。 8. OCR技术在文档处理中的局限性 文中提到由于...
在实际操作中,为了优化滚边效果,经常会使用`Reltool`指令来微调滚头的位置和角度。例如: - `MoveL Reltool(P10, 0, 0, 0), V300, Z5, Tool\Wobj;` 该指令用于调整滚头的压力。 - `MoveL Reltool(P10, 0, 0, 0\Rx:...
这通常涉及到`reltool`或`rebar3`工具的使用,它们可以帮助生成新的应用版本并执行无缝升级。 通过以上步骤,我们可以创建一个基本的Erlang Application,如"bank1",并实现特定的业务逻辑。记住,Erlang强调的是...
文档使用机器人写字作为案例,讨论了如何通过RelTool功能实现机器人编程模式,以通过教导编程来写出更标准的字。实践证明,该方法能够有效避免由于教导点不准确而导致的工具碰撞问题。 ### 工业机器人路径规划相关...
在带参数的例行程序中,使用`movel`运动指令结合`RelTool`参考点,如`pqu1`,以及从数组中提取的坐标值(如`pick{n,1}`, `pick{n,2}`, `pick{n,3}`, `pick{n,4}`)来控制机器人的运动。这允许机器人根据数组中的...
重点介绍了Move指令、Offs指令、Reltool指令、Clock计时指令、TPWrite显示指令等基本指令,这些都是构建机器人动作序列的核心元素。 5. **信号设定**:教学内容包括如何设置和查询输入输出信号,这对于理解机器人...
程序编辑和调试是训练的重点,涵盖了一系列基本指令,如Move、Offs、Reltool、Clock、TPWrite等。通过实例和练习,学员可以掌握如何编写和调试程序,理解如何使用工具和工件坐标,并实现特定任务,如计算取料盘。 ...
- **第一次横向移动**: 使用`MoveL`指令,基于工具坐标系(`RelTool`)将工具(toGripper)以速度v2500精确地移动到相对于`pExtract`点沿Y轴方向偏移200mm的位置。 - **第二次横向移动**: 继续使用`MoveL`指令,将工具以...
- 使用Offs()和RelTool()函数创建简单的路径,如绘制长方形。 5. **转轴运动指令**: - **MoveAbsJ**:绝对关节运动指令,让机器人直接设定所有关节的角度位置jpos1,同样包含速度和TCP信息。 6. **输入输出信号...
**说明**:RelTool()函数同样用于创建一个新的位置,但这个新位置相对于原位置p1不仅有线性偏移(100mm, 50mm, 0mm),还有旋转偏移(30度, -60度, 45度)。新位置与原位置之间的坐标关系基于机器人的工具坐标系...
offs用于偏移机器人的当前位置,而RelTool则允许调整工具坐标系,这样可以灵活适应不同的工作任务。 总的来说,ABB机器人的这些常用指令构建了完整的程序控制框架,涵盖了运动控制、流程控制、信号交互和程序结构...
在实际应用部署中,开发者通常会结合Erlang的释放(release)管理工具,如`systools`和`reltool`。这些工具可以帮助打包应用程序,创建包含所有必要组件(如beam文件、资源文件、配置文件等)的版本释放,并生成升级...
13. RelTool 对工具的位置和姿态进行偏移,正确。 接下来是选择题,主要考察特定指令的功能和应用场景: 1. SearchL 指令使得TCP以线性运动方式搜索目标位置,因此选项B正确。 2. StartMove 指令用于启动机器人...
- `RelTool`:处理工具的地址和姿态偏移。 - `CalcRobTCPos`, `CRobTCJointT`, `TReadMotorC`, `CToolC`, `WObjMirPos`, `CalcJointTDistance`:进行不同类型的坐标转换和距离计算。 - `PFRestart`:检查路径中断...