logo资料库

linuxcnc关于HAL部分的中文粗略整理.doc

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
14.1.2 HAL concepts
14.1.3 HAL components
14.1.3.2 Internal Components
14.1.4 Timing Issues In HAL
14.2 Basic HAL Reference
14.2.1 HAL 命令
14.2.1.2 addf
14.2.1.3 loadusr
14.2.1.4 net
14.2.1.5 setp
14.2.1.6 sets
14.2.1.7 unlinkp
14.2.1.8 Obsolete Commands
14.2.2 HAL Data
14.2.2.1 Bit
14.2.2.2 Float
14.2.2.3 s32
14.2.2.4 u32
14.2.3 HAL Files
14.2.4 HAL Components
14.2.5 Logic Components
14.2.5.1 and2
14.2.5.2 not
14.2.5.3 or2
14.2.5.4 xor2
14.2.5.5 Logic Examples
14.2.6 Conversion Components
14.3 HAL TWOPASS
14.3.3 Post GUI
14.3.4 Examples
14.4 HAL简易教程
14.4.1 Introduction
14.4.1.1 Notation
14.4.1.2 Tab-completion
14.4.1.3 The RTAPI environment
14.4.2 一个简单的例子
14.4.2.1 Loading a component
14.4.2.2 Examining the HAL
14.4.2.3 Making realtime code run
14.4.2.4 Changing Parameters
14.4.2.5 Saving the HAL configuration
14.4.2.6 Exiting halrun
14.4.2.7 Restoring the HAL configuration
14.4.2.8 Removing HAL from memory
14.4.3 Halmeter
14.4.4 Stepgen例子
14.4.4.1 Installing the components
14.4.4.2 Connecting pins with signals
14.4.4.3 Setting up realtime execution - threads a
14.4.4.4 Setting parameters
14.4.4.4 Setting parameters
14.4.5 Halscope
14.5 General Reference
14.5.1 通用命名传统
14.5.2 硬件命令传统
14.6 Core Components
14.6.1 Motion
14.6.1.1 Options
14.6.1.2 Pins
14.6.1.3 Parameters
14.6.1.4 Functions
14.6.2 Axis and Joint Pins and Parameters
14.6.3 iocontrol
14.6.3.1 Pins
14.6.4 ini settings
14.6.4.1 Pins
14.7 Canonical Device Interfaces
14.7.1 Introduction
14.7.2 Digital Input
14.8 HAL 工具
14.8.1 Halcmd
14.8.2 Halmeter
14.8.3 Halshow
14.8.4 Halscope
14.8.5 Sim Pin
14.8.6 Simulate Probe
14.9 Halshow
14.10 HAL Components
14.10.1 命令和用户组件
14.10.2 Realtime Components List
14.10.2.1 Core LinuxCNC components
14.10.2.2逻辑与按位组件
14.10.2.3 算数和浮点组件
14.10.2.4 类型转换
14.10.2.5 硬件驱动
14.10.2.6 运动学
14.10.2.7 电机控制
14.10.2.8 直流无刷和三相电机控制
14.10.2.9 其他
14.10.3 调用HAL API
14.10.4 调用RTAPI
14.11 HAL Component Descriptions
14.11.1 Stepgen
14.11.2 PWMgen
14.11.3 Encoder
14.11.4 PID
14.11.5 Simulated Encoder
14.11.6 Debounce
14.11.7 Siggen
14.11.8 lut5
14.12 HAL Examples
14.12.1 Connecting Two Outputs
14.12.2 Manual Toolchange
14.12.3 Compute Velocity
14.1.2 HAL concepts 这部分主要是关键的 HAL 条目。 Component: 传统硬件设计指的是各个部分。HAL 等价于一个 component 或者是 HAL component(本文档通常情况下用 component,但是如果和其他的 component 模糊 不清的地方就用 HAL component)。一个 HALcomponent 就是 一个软件,定义好 输入输出以及 behavior,能够被安装以及 interconnected。 Parameter; 许多硬件组件都有预留可扩展接口,即使并没有连接到其他的组件,但是任 然必须留出来。例如伺服放大器经常有 trim pots,允许 tuning adjustments,或者 是 testpoint 允许连接一个 meter(仪表)或者是显示器来观察 tuning 结果。 HALcomponent 也有这样的一些条目,被称作 parameters。这样的 parameters(参 数)有两种类型:输入参数相当于 trim pots-这些值可以被 User 调整,并且已经修 改即 fixed。输出参数不能被 adjusted,相当于 Test point 允许内部信号被监测。 Pin: 硬件组件有他们互联的终端。在 HAL 里面相当于一个引脚 Pin 或者是 HAL pin(在避免混淆的时候用 HAL pin)。所有的 HAL pin 都是有名字的。当他们互 连(interconnect)的时候就是用的是名字。HAL 是软件实体(entities)只存在 于电脑内部。 Physical pin: 很多 IO 都有真实的物理引脚或者是终端以连接外部硬件。例如并口的引脚。 为避免混淆,被称作物理引脚。 Signal: 在物理机器中,real 硬件组件你通过 wires(线)连接的。HAL 中等价的是 一个 signal 或者是 HAL signal。HALsignal 连接 HALpins。HALsignals 能被断开 或者是重连即使机器在运行。 Type: 当你用硬件,你肯定不会将一个 24V 的继电器(relay)输出连接到一个+-10V 的伺服放大的模拟输入。HALpins 也有这样的限制(restrictions),这些都是基于
他们的类型。Pins 和 signals 都是有类型的,也只有相同的类型的可以被连接, 目前是四种类型: • bit - a single TRUE/FALSE or ON/OFF value • float - a 64 bit floating point value, with approximately 53 bits of resolution and over 1000 bits of dynamic range. • u32 - a 32 bit unsigned integer, legal values are 0 to 4,294,967,295 • s32 - a 32 bit signed integer, legal values are -2,147,483,647 to +2,147,483,647 Function: Real 硬件 component 倾向于对输入做出立即的响应。例如伺服放大器对输入 的电压会自动的做出响应。然后软件 component 是不会自动响应的。每一个 component 都有特定的代码无论这个 component 用来干嘛。在有些情况下,这些 代码只是作为 component 的一个部分运行。但是在大多数情况下,特别是在实时 component 下, 代码必须要以特定的顺序和特定的间隔运行。例如,输入应该 在输入数据被计算之前被读出来,输出不能被写知道计算完成。在这些情况下, 代码是以一个或多个函数提供给系统。每个函数都是一个代码块并且表现一个特 定的动作。系统集成可以用线程(threads)去规划一系列函数,以特定的顺序和 特定的间隔运行。 Thread; 一个线程(Thread)就是一系列函数以一个实时任务的特定的间隔运行。当 线程被创建时,有一个特定的间隔,但是没有函数,函数可以被添加到线程,每 次线程被执行时都会以一定的顺序执行。 一个例子:我们有一个 component 命名为:hal_parport。这个组件定义了很多 pins FOR 每个物理引脚。并且每个 pins 都在文档中做出了描述,名字以及相关联的 物理引脚,是否倒置,是否能改变极性等。但是仅靠这一点不能讲数据从 HAL 引脚传输到物理引脚,需要代码来做这个工作,这就是函数的作用。这个 parport 组件需要至少两个函数:一个是读取这个物理引脚的数据并更新 HAL 引脚,另 外一个是从 HAL 引脚拿数据并传输到物理引脚。
14.1.3 HAL components 每个 HAL 组件都是定义好输入输出以及 behavior 的,并且能互连的软件。这个 部分列举了一些组件以及一个简单的说明。详细的说明在文档后面会有的。 14.1.3.1 External Programs with HAL hooks motion iocontrol classicladder halui 14.1.3.2 Internal Components stepgen encoder pid siggen supply 14.1.3.3 Hardware Drivers 14.1.3.4 Tools and Utilities 14.1.4 Timing Issues In HAL 14.2 Basic HAL Reference 14.2.1 HAL 命令 更多详细的信息可以在 halcmd 手册上找到:在一个终端窗口上运行:man halcmd 用 HALconfiguration 窗口(onthemachinemenuinAXIS)可以查看 HALconfiguration 以及检查引脚以及参数的状态。 14.2.1.1 loadrt 命令 loadrt 加载一个实时的 HAL 组件。实时组件函数(functions)。实时组件需 要被加载到线程上以线程的速度进行更新。不能将用户层组件加载到实时空间。 语法实例:
loadrt mux4 count=1 14.2.1.2 addf 将函数 functname 添加到线程 threadname。默认的是按照在文件中的顺序进行添 加。如果指定了位置,将函数添加到线程的那个 spot 即可。负位置表示线程尾 部的位置。例如 1 是线程的开始,-1 是线程的结束,-3 是第三从尾部开始算起。 一些函数有必要按照一个特定的顺序如 parport 读写函数,加载。函数名字通常 是组件的名字加上一个数字。下面的例子,组件 or2 备件在,show function 显示 了 or2 的名字 $ halrun halcmd: loadrt or2 halcmd: show function Exported Functions: Owner CodeAddr Arg 00004 FP Users Name or2.0 f8bc5000 f8f950c8 NO 0 通常情况下有两种线程:有些组件用浮点,需要被添加到一个线程(支持浮点运 算的)。FP 表明此线程是否支持浮点。 base-thread(高速线程):这个线程处理需要高速响应的条目。比如产生步进脉冲, 或者是读写并口。不支持浮点 servo-thread ( 低 速 线 程 ): 可 以 处 理 一 些 稍 慢 的 响 应 条 目 , 比 如 运 控 器 , Classicladder 以及运动命令处理并且支持浮点 语法实例: addf mux4.0 servo-thread 14.2.1.3 loadusr 命令 loadusr 加载一个用户层的 HAL 组件。用户层的程序是他们自己分开的进 程,有选择性的跟你其他 HAL 组件通过引脚和参数进行通信。 不能将实时组件 加载到用户层。 标志如下; -W 等待组件准备,组件假设和命令的第一个参数名字一样 -Wn 等待组件,给定名字 -w 等待程序退出
-i 忽略程序并返回 value -n 命名一个组件 语法实例: loadusr halui loadusr -Wn spindle gs2_vfd -n spindle 14.2.1.4 net 命令 net 创建一个连接 signal-------一个或多个 pins。如果 signal 不存在,net 创 建一个新的 signal。可选的箭头方向:<= => 和 <=>,很容易掌握这种逻辑当读 取一个 net 命令行。方向箭头与引脚名必须要用空格分开。 语法实例: net signal-name net home-x pin-name joint.0.home-sw-in 对上述实例的解释: <= parport.0.pin-11-in home-x 是一个信号名(signal name),joint.().home-ew-in 是一个 Drection IN 引 脚,<=是箭头, parport.().pin-11-in 是 Drection OUT 引脚。也许有点迷惑,但是 并口的 in 和 out 标签表示引脚的工作的物理方式,而不是它在 HAL 中如何被处 理。 一个引脚可以被连接到一个信号:  一个 IN 引脚总是可以连接到信号  一个 IO 引脚在信号(signal)有一个 OUT 引脚的情况下才可以被连接  一个 OUT 引脚只有当这个信号上没有其他 OUT 或者是 IO 引脚时,才可以 被连接 source destination destination signal-name 可以复用 # signal net xStep stepgen.0.out => parport.0.pin-02-out parport.0.pin-08-out 以上的例子表示,信号 xStep 有两个 readers 因为信号 xStep 有了 source(stepgen.0.out),所以可以将值传送给其他的 readers: net xStep => parport.0.pin-02-out
14.2.1.5 setp 命令 setp 设置一个引脚或者参数的值。 有效值依赖于引脚或者参数的类型。如 果数据类型没有匹配则会出现错误。 实例; setp setp 14.2.1.6 sets 命令 sets 设置 signal 的值。 parport.0.pin-08-out TRUE 实例: and2.0.in0 pyvcp.my-led sets mysignal net sets mysignal 出现错误的情况:1、信号名字为匹配,2、信号被写 3、值的类型不对 14.2.1.7 unlinkp 将一个 pin 与 signal 断开 14.2.1.8 Obsolete Commands 1 分解,可能在以后的版本中就没有了 14.2.2 HAL Data 14.2.2.1 Bit 一个位表示 on 或者 off 14.2.2.2 Float 14.2.2.3 s32 14.2.2.4 u32 14.2.3 HAL Files 如果您使用步进器配置向导生成配置,则配置目录中最多有三个 HAL 文件。 my-mill.hal 首先加载并且不能改变 custom.hal 在 GUI 加载之前加载
custom_postgui.hal 在 GUI 加载之后加载 14.2.4 HAL Components 当 HALcomponent 被创造时,两个参数会被自动添加。这些参数允许你检测一个 组件的执行时间。 两个参数:time tmax Time 是 CPU 循环的数目 使用去执行函数 Tmax 是最大的 CPU 循环数目 使用去执行函数 14.2.5 Logic Components HAL 包含几个实时逻辑组件,遵循 Truth Table,声明 output 对于任意给定的 input 14.2.5.1 and2 14.2.5.2 not 14.2.5.3 or2 14.2.5.4 xor2 14.2.5.5 Logic Examples 14.2.6 Conversion Components 14.3 HAL TWOPASS 14.3.3 Post GUI 有些 GUI 支持 halfiles,proccessed 在 GUI 启动之后,为了连接 GUI 创建的引脚。 当用 TWOPASSproccessing 使用了 postgui halfile,它是一个独立的文件并且包含 所有的 loadrt 条目,被 postguihalfile 添加,在 GUI 之前就被处理 实例: HALFILE=file.hal 14.3.4 Examples configs/sim/axis/twopass/ configs/sim/axis/simtcl/
14.4 HAL 简易教程 14.4.1 Introduction 配置从理论到设备---HAL 设备。对那些只有一点编程经验的人,这部分就是 HAL 的 Hello world。Halrun 可以被用来创建一个工作系统。这是一个命令行或者是文 本文件工具用来配置和 tuning。下面的例子解释了它的 setup 和操作。 14.4.1.1 Notation 除非您正在运行 HAL,否则将显示终端命令而不显示系统提示符。 终端命令实例: me@computer:~linuxcnc$ halrun (will be shown like the following line) halrun (the halcmd: prompt will be shown when running HAL) halcmd: loadrt debounce halcmd: show pin 14.4.1.2 Tab-completion 你的 halcmd 的版本可能包含 tab-completion。它包含命令(with HAL identifier), 而不是完整的文件作为脚本。 halcmd: loa halcmd: load halcmd: loadrt halcmd: loadrt deb halcmd: loadrt debounce 14.4.1.3 The RTAPI environment 所有的 HAL 组件你都在共享内存中存数据,这样实时组件就可以获取数据。 每 种 RTOS 都会有点不一样。 为了解决这些差异,CNCteam 想到了 RTAPI,这为程序与 RTOS 通信提供了一 致的方法,如果你是一个程序员,想要研究 CNC 的内部,你可能需要研究 rtapi.h 来理解 API。但是如果你是一个普通人,你需要知道的关于 RTAPI 的一点是它(和 RTOS)需要在你用 HAL 做任何事情之前加载到你的计算机的内存中。
分享到:
收藏