函数进行数字量通道的读写"/>
c++调用NI DAQ API函数进行数字量通道的读写
文章目录
- 一. DAQ数字量输出程序流程
- 二. DAQ函数说明
- 1. DAQmxCreateTask
- 2. DAQmxCreateDOChan
- 3. DAQmxStartTask
- 4. DAQmxWriteDigitalLines
- 5. DAQmxStopTask
- 6. DAQmxClearTask
- 三. 示例
一. DAQ数字量输出程序流程
步骤:
- 1:调用
DAQmxCreateTask
函数创建任务。 - 2:调用
DAQmxCreateDOChan
函数创建数字输出通道。 - 3:调用
DAQmxStartTask
函数来启动任务。 - 4:调用
DAQmxWriteDigitalLines
函数对数字端口进行数据写入。 - 5:调用
DAQmxStopTask
函数来停止任务。 - 6:调用
DAQmxClearTask
函数来清除任务。
二. DAQ函数说明
1. DAQmxCreateTask
int32 DAQmxCreateTask (const char taskName[], TaskHandle *taskHandle);
说明:
创建任务。如果使用此函数创建任务,则必须使用DAQmxClearTask
来销毁它。如果在循环中使用此函数,NI DAQmx会在循环的每次迭代中创建一个新任务。完成任务后,请在循环中使用DAQmxClearTask
函数,以避免分配不必要的内存。
参数:
- taskName[]: 任务名称
- taskHandle: 对此函数中创建的任务的引用
示例:
//创建任务task
TaskHandle taskHandle=0;
DAQmxCreateTask("", &taskHandle);
2. DAQmxCreateDOChan
int32 DAQmxCreateDOChan (TaskHandle taskHandle, const char lines[], const char nameToAssignToLines[], int32 lineGrouping);
说明:
创建通道以生成数字信号,并将通道添加到使用taskHandle指定的任务中。您可以将数字线路分组为一个数字通道,也可以将它们分离为多个数字通道。如果使用端口物理通道名称在行中指定一个或多个完整端口,则无法将端口分隔为多个通道。要将端口分成多个通道,请多次使用此功能,每次使用不同的端口。
参数:
- TaskHandle:对此函数中创建的任务的引用
- lines[]:用于创建虚拟通道的数字线路的名称。可以指定行的列表或范围。指定一个端口而不指定行相当于按顺序指定该端口
的所有行。因此,如果指定Dev1/port0,并且端口0有八行,则会扩展为Dev1/port0/line0:7。 - nameToAssignToLines[]:创建的虚拟通道的名称。如果使用一个对此函数的调用创建多个虚拟通道,则可以指定一个用逗号分隔的名称列表。如果未指定名称,NI DAQmx将使用物理通道名称作为虚拟通道名称。如果为
nameToAssignToLines
指定自己的名称,则在其他NI DAQmx函数中引用这些通道时必须使用这些名称。 - lineGrouping:指定是否将数字线路分组为一个或多个虚拟通道。如果在行中指定一个或多个完整端口,则必须将
lineGrouping
设置为DAQmx_Val_ChanForAllLines
示例:
DAQmxCreateDOChan(taskHandle, "Dev1/line0:71","",DAQmx_Val_ChanForAllLines);
3. DAQmxStartTask
int32 DAQmxStartTask (TaskHandle taskHandle);
说明:
将任务从提交状态转换为运行状态,从而开始测量或生成。使用此功能对于某些应用程序是必需的,对于其他应用程序则是可选的。如果不使用此功能,读取操作开始时,测量任务将自动启动。NI DAQmx Write
函数的autoStart
参数确定在使用NI DAQmx-Write
函数时生成任务是否自动启动。如果在多次调用NI DAQmx Read
函数或NI DAQmx Write
函数时(例如在循环中)未调用DAQmxStartTask
和DAQmxStopTask
,则任务会重复启动和停止。重复启动和停止任务会降低应用程序的性能。
参数:
- taskHandle: 对此函数中创建的任务的引用
示例:
DAQmxStartTask(taskHandle);
4. DAQmxWriteDigitalLines
int32 DAQmxWriteDigitalLines (TaskHandle taskHandle, int32 numSampsPerChan, bool32 autoStart, float64 timeout, bool32 dataLayout, uInt8 writeArray[], int32 *sampsPerChanWritten, bool32 *reserved);
说明:
将多个样本写入任务中的每个数字行
参数:
- taskHandle: 对此函数中创建的任务的引用
- numSampsPerChan:每个通道要写入的样本数。必须传入一个0或更大的值才能写入样本
- autoStart:指定如果不启动任务,此函数是否自动启动该任务
- timeout:等待此函数写入所有样本的时间(以秒为单位)
- dataLayout :指定采样的排列方式,交错排列或非交错排列。
DAQmx_Val_GroupByChannel
:按通道分组(未插入),DAQmx_Val_GroupByScanNumber
:按样本分组(交错) - writeArray :要写入的数据
- reserved:保留以备将来使用。将NULL传递给此参数。
示例:
uInt8 data[71]={0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0 };
DAQmxWriteDigitalLines(taskHandle,1,1,10.0,DAQmx_Val_GroupByChannel,data,NULL,NULL);
5. DAQmxStopTask
int32 DAQmxStopTask (TaskHandle taskHandle);
说明:
关闭任务
参数:
- taskHandle: 对此函数中创建的任务的引用
示例:
DAQmxStopTask(taskHandle);
6. DAQmxClearTask
int32 DAQmxClearTask (TaskHandle taskHandle);
说明:
清除任务
参数:
- taskHandle: 对此函数中创建的任务的引用
示例:
DAQmxClearTask(taskHandle);
三. 示例
TaskHandle taskHandle=0;
uInt8 data[71]={0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0 };DAQmxCreateTask("", &taskHandle);
DAQmxCreateDOChan(taskHandle, "Dev1/line0:71","",DAQmx_Val_ChanForAllLines);
DAQmxStartTask(taskHandle);
DAQmxWriteDigitalLines(taskHandle,1,1,10.0,DAQmx_Val_GroupByChannel,data,NULL,NULL);
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
更多推荐
c++调用NI DAQ API函数进行数字量通道的读写
发布评论