NI-Motion如何控制一个或多个运动控制板卡上的轴参考点的C语言示例代码

此C语言程序展示了如何在Windows 32位控制台环境中使用NI-Motion库来控制运动控制板卡上的轴寻找参考点。用户输入板卡ID和轴号,程序检查板卡状态,加载运动参数并启动寻参考操作。在操作过程中,程序监控轴位置和错误,一旦完成或出现错误,将输出相关信息。
摘要由CSDN通过智能技术生成

这个C语言程序是一个用于Windows 32位控制台的应用程序,它的主要功能是控制一个或多个运动控制板卡上的轴参考点的寻找操作。在这个示例中,程序专注于一个轴参考点的寻找操作,即找到并设置设备的参考位置(通常是设备的“原点”或“零点”)。程序使用National Instruments的NI-Motion软件库来与运动控制硬件进行通信。

执行逻辑:

  1. 用户输入板卡ID和轴号,程序将这些值存储在相应的变量中。
  2. 程序检查板卡是否处于上电重置状态,如果是,则提示用户初始化板卡。
  3. 程序读取当前的通信状态寄存器(CSR),以检查是否有任何模态错误。
  4. 如果没有错误,程序将继续加载指定轴的加速度和速度参数。
  5. 程序启动寻参考操作,通常是寻找“原点”参考。
  6. 程序进入一个循环,不断检查寻参考操作是否完成,同时监控轴的当前位置,并检查是否有模态错误发生。
  7. 如果寻参考操作完成,程序将输出轴的最终位置,并结束寻参考过程。
  8. 如果在寻参考过程中发生错误,程序将停止运动,并从错误堆栈中读取错误信息,然后显示这些错误信息。
///
// 要求:NI-Motion软件版本6.0或更高版本。
//
//		使用导入库:
//			<NI-Motion安装位置>\FlexMotion\lib\Microsoft\FlexMS32.lib
//			for MS编译器,和
//			<NI-Motion安装位置>\FlexMotion\lib\Borland\FlexBC32.lib
//			for 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
//			for 32位Windows
//			<驱动器>\Program Files (x86)\National Instruments\NI-Motion
//			for 64位Windows
//
// 描述:
//		这个C语言示例展示了如何在监控位置的同时进行单轴寻参考操作。
//    寻到的参考点是原点,但你可以根据flex_find_reference()函数下面的说明轻松更改这一点。
//
///

// 包含文件/
#include "flexmotn.h"
#include "NIMCExample.h"
#include <stdio.h>

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

	u8	boardID;					// 板卡识别号
	u8	axis;						// 轴号
	f64	acceleration	=100;	// 加速度值,单位为每秒钟转数(RPS/S)
	f64	velocity		=200;	// 速度值,单位为每分钟转数(RPM)
	u16	found, finding;		// 检查参考状态
	u16	axisStatus;			// 轴状态
	u16	csr=0;					// 通信状态寄存器
	i32	position;				// 轴的当前位置
	i32	scanVar;				// 扫描变量,用于读取scanf函数不支持的值

	// 模态错误处理的变量
	u16	commandID;				// 函数的commandID
	u16	resourceID;			// 资源ID
	i32	errorCode;				// 错误代码

	// 获取板卡ID
	printf("输入板卡ID: ");
	scanf("%d", &scanVar);
	boardID=(u8)scanVar;

	// 检查板卡是否处于上电重置状态
	err = flex_read_csr_rtn(boardID, &csr);
	CheckError;

	if (csr & NIMC_POWER_UP_RESET ){
   
		printf("\nFlexMotion板卡处于重置状态。请在运行此示例之前初始化板卡。\n");
		printf("使用\"flex_initialize_controller\"函数可以通过Measurement and Automation Explorer选择的设置来初始化板卡\n");
		return;
	}

	// 获取轴号
	printf("输入轴号: ");
	scanf("%d",&scanVar);
	axis=(u8)scanVar;

	// 清空标准输入
	fflush(stdin);

	// 将加速度和减速度加载到选定的轴
	err = flex_load_rpsps(boardID, axis, NIMC_BOTH, acceleration, 0xFF);
	CheckError;

	// 将速度加载到选定的轴
	err = flex_load_rpm(boardID, axis, velocity, 0xFF);
	CheckError;

	// 开始寻参考移动
	err = flex_find_reference(boardID, axis, 0<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

openwin_top

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

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

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

打赏作者

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

抵扣说明:

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

余额充值