NI-Motion运动控制应用中实现缓冲位置断点的C语言示例代码

这段程序是一个用于NI-Motion控制系统的C语言示例,其主要功能是在运动控制应用中实现缓冲位置断点。程序通过National Instruments的运动控制API(FlexMotn.h)来与硬件进行交互,具体来说,它执行以下步骤:

  1. 初始化和配置:程序首先定义了与NI-Motion硬件通信所需的资源变量,包括板卡ID、轴号和缓冲区编号。

  2. 缓冲区配置:程序配置了一个缓冲区,用于存储一系列的断点位置。这些位置是轴在运动过程中需要暂停的特定位置。

  3. 写入断点位置:程序将预定义的断点位置数组写入到配置好的缓冲区中。

  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 示例展示了执行缓冲位置断点在轴资源上的基本算法或步骤。
//



// 包含
#include <stdio.h>
#include <stdlib.h>
#include "FlexMotn.h"
#include "NIMCExample.h"
#include "NIMCExampleData.h"


// 主函数
void main (void)
{
   
	// 资源变量
	u8	boardID = 1;			// 板卡识别号
	u8	axis = NIMC_AXIS1;	// 轴号
	u8 buffer = 1;				// 缓冲区编号

	// 模态错误处理变量
	u16 commandID;				// 函数的 commandID
	u16 resourceID;			// 资源 ID
	i32 errorCode;				// 错误代码
	u16 csr = 0;				// 通信状态

	// 缓冲资源
	i32 breakpointPositions[] = {
   1000, 1100, 1200, 1300, 1400, 1500, 1600};	
	u16 numberOfPoints = 7;	// 断点数量
	f64 actualInterval;		// 函数调用中需要但未使用
	f64 requestedInterval = 10.0;		// 函数调用中需要但未使用	
	u32 backLog;				// 缓冲区中可用空间的数量
	u16 bufferState;			// 缓冲区状态
	u32 pointsDone;			// 完成或消耗的断点数量

	// 为缓冲断点配置缓冲区
	err = flex_configure_buffer(boardID, buffer,	axis, NIMC_BREAKPOINT_DATA,
										 numberOfPoints, numberOfPoints,	NIMC_TRUE,
										 requestedInterval, &actualInterval);			
	CheckError;

	// 将断点位置写入缓冲区
	err = flex_write_buffer(boardID, buffer, numberOfPoints,
									NIMC_REGENERATION_NO_CHANGE, breakpointPositions, 0xFF);
	CheckError;

	// 配置断点为缓冲断点
	err = flex_configure_breakpoint(boardID, axis, NIMC_ABSOLUTE_BREAKPOINT, 
											  NIMC_PULSE_BREAKPOINT
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

openwin_top

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

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

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

打赏作者

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

抵扣说明:

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

余额充值