NI-Motion如何在一个运动控制器上创建并运行一个简单的板载程序的C语言示例代码

这个C语言程序是一个用于存储和执行板载程序的示例,它使用了National Instruments的FlexMotion软件库。程序的主要功能是在一个运动控制器上创建并运行一个简单的板载程序,该程序使得一个轴(电机)顺时针移动特定的步数。下面是对程序功能和执行逻辑的详细解读:

  1. 初始化和配置:程序首先定义了一些变量,包括板卡ID、轴号和通信状态寄存器。同时,设置了错误处理的变量,如命令ID、资源ID和错误码。

  2. 设置板卡和轴:程序通过boardIDaxis变量指定了要控制的板卡和轴。

  3. 开始存储板载程序:使用flex_begin_store函数开始在控制器上存储板载程序,程序编号为1。

  4. 配置运动参数:程序设置了运动模式为相对位置模式,然后加载了目标位置(顺时针移动5000步),以及运动的速度(每分钟100转),加速度和减速度(每秒50弧度/秒)。

  5. 启动运动:通过flex_start函数启动轴的运动。

  6. 等待运动完成:程序使用flex_wait_on_condition函数等待轴的运动完成。这个函数会阻塞程序直到轴的运动完成或者超时(这里设置的超时时间为1000毫秒)。

  7. 结束存储板载程序:运动完成后,使用flex_end_store函数结束板载程序的存储。

  8. 错误处理:如果在执行过程中出现任何错误,程序会进入错误处理部分。对于模态错误,程序会从错误堆栈中获取错误信息并显示,然后继续检查其他错误。对于非模态错误,程序会直接显示错误信息。

///
// 板载程序.c : 一个 Win32 控制台应用程序                                                             
//                                                                            
// 需求:FlexMotion 软件版本 5 或更高版本.                      //
//
//		使用导入库:
//			<NI-Motion 安装位置>\FlexMotion\lib\Microsoft\FlexMS32.lib
//			对于 MS 编译器,以及
//			<NI-Motion 安装位置>\FlexMotion\lib\Borland\FlexBC32.lib
//			对于 BC 编译器
//
//		在您的项目包含目录中添加包含路径:
//			<NI-Motion 安装位置>\FlexMotion\Include
//			<NI-Motion 安装位置>\FlexMotion\Examples\C\Includes
//
//		将常见源代码添加到您的项目中:
//			<NI-Motion 安装位置>\FlexMotion\Examples\C\Includes\NIMCExample.c
//
//		其中 <NI-Motion 安装位置> 默认是
//			<驱动器>\Program Files\National Instruments\NI-Motion
//			对于 32 位 Windows
//			<驱动器>\Program Files (x86)\National Instruments\NI-Motion
//			对于 64 位 Windows
//
// 描述: 
//		这个 C 语言示例展示了在运动控制器上存储一个板载程序的方法
//
///

// 包含申明/
#include "flexmotn.h" // 包含 FlexMotion 相关的头文件
#include "NIMCExample.h" // 包含 NIMC 示例相关的头文件
#include <stdio.h> // 标准输入输出头文件
#include <stdlib.h> // 标准库头文件

//
// 主函数
void main(void)
{
   

	u8	boardID;					// 板卡标识号
	u8	axis;						// 轴号
	u16 csr	= 0;				// 通信状态寄存器

	// 用于模态错误处理的变量
	u16 commandID;				// 函数的 commandID
	u16 resourceID;			// 资源 ID
	i32 errorCode;				// 错误码
	
		
	///
	// 设置板卡 ID
	boardID = 1;
	// 设置轴号
	axis = 1;
	

	//--------------------------------------------------------
	// 板载程序 1. 这个板载程序将轴一顺时针移动 5000 计数(步数)。要执行这个板载程序
	// 调用 Run Program 函数
	//--------------------------------------------------------
	
	// 开始板载程序存储 - 程序编号 1
	err = flex_begin_store(boardID, 1);
	CheckError;

	// 设置操作模式为相对
	err = flex_set_op_mode(boardID, axis, NIMC_RELATIVE_POSITION);
	CheckError;

	// 加载目标位置以顺时针移动 5000 计数(步数)
	err = flex_load_target_pos(boardID, axis, 5000, 0xFF);
	CheckError;

	// 加载 RPM(每分钟转数)
	err = flex_load_rpm(boardID, axis, 100.00, 0xFF);
	CheckError;

	// 加载加速度和减速度,单位为 RPS/sec(每秒弧度/秒)
	err = flex_load_rpsps(boardID, axis, NIMC_BOTH, 50.00, 0xFF);
	CheckError;

	// 开始移动
	err =  flex_start(boardID, axis, 0);
	CheckError;

	// 等待移动完成
	err =  flex_wait_on_condition(boardID,</
  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

openwin_top

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值