viSetAttribute
时间: 2024-06-12 07:11:11 浏览: 112
viSetAttribute是一个Vim编辑器中的函数,用于设置编辑器中的某些属性。该函数的语法如下:
```
int viSetAttribute(int attr);
```
其中,attr是一个整数,表示要设置的属性。该函数返回一个整数,表示设置是否成功。
常见的attr属性值及其含义如下:
- 0:关闭所有属性
- 1:设置粗体
- 4:设置下划线
- 5:设置闪烁
- 7:反显显示
- 22:关闭粗体
- 24:关闭下划线
- 25:关闭闪烁
- 27:关闭反显
相关问题
使用C++编写运行在QT上的程序,搜索N9030B PXA 信号分析仪,并控的开关及数据读取和保存
要使用C++编写运行在QT上的程序,可以使用VISA库和IVI驱动程序来控制N9030B PXA信号分析仪。以下是一些步骤:
1. 安装VISA库和IVI驱动程序,这些可以从NI官网下载。
2. 在QT中创建一个新的项目,并将VISA库和IVI驱动程序添加到项目中。
3. 使用VISA库连接到信号分析仪。以下是一个示例代码:
```cpp
#include <visa.h>
ViSession vi;
ViStatus status;
char buffer[256];
status = viOpenDefaultRM(&vi);
if(status < VI_SUCCESS) {
viClose(vi);
return;
}
status = viOpen(vi, "TCPIP0::192.168.1.1::inst0::INSTR", VI_NULL, VI_NULL, &vi);
if(status < VI_SUCCESS) {
viClose(vi);
return;
}
status = viSetAttribute(vi, VI_ATTR_TERMCHAR_EN, VI_TRUE);
status = viSetAttribute(vi, VI_ATTR_SEND_END_EN, VI_TRUE);
status = viSetAttribute(vi, VI_ATTR_TERMCHAR, 0xA);
status = viSetBuf(vi, VI_READ_BUF|VI_WRITE_BUF, 1024);
status = viWrite(vi, "*IDN?\n", 6, &retCnt);
status = viRead(vi, buffer, 256, &retCnt);
qDebug() << buffer;
viClose(vi);
```
4. 使用IVI驱动程序控制信号分析仪的开关。以下是一个示例代码:
```cpp
#include "niFgen.h"
#include "niFgenData.h"
NiFgenSession session;
NiFgen_InitWithOptions("PXI1Slot2", VI_TRUE, VI_TRUE, "", &session);
NiFgen_ConfigureOutputEnabled(session, VI_TRUE);
NiFgen_ConfigureOutputMode(session, NIFGEN_VAL_OUTPUT_FUNC);
NiFgen_ConfigureStandardWaveform(session, NIFGEN_VAL_WFM_SINE, 10.0);
NiFgen_ConfigureFrequency(session, 1e6);
NiFgen_ConfigureAmplitude(session, 1.0);
NiFgen_InitiateGeneration(session);
```
5. 使用VISA库读取数据并保存数据。以下是一个示例代码:
```cpp
status = viWrite(vi, "INIT:IMM\n", 10, &retCnt);
status = viWrite(vi, "TRAC:DATA? TRACE1\n", 18, &retCnt);
char* data = new char[1024];
status = viRead(vi, data, 1024, &retCnt);
qDebug() << data;
delete[] data;
QFile file("data.txt");
if(file.open(QIODevice::WriteOnly)) {
QTextStream stream(&file);
stream << data;
file.close();
}
```
这些示例代码只是一个简单的示例,实际应用需要根据需要进行修改。同时,还需要了解信号分析仪的SCPI命令和IVI驱动程序的API函数来进行更复杂的控制和数据处理。
CANoe 通过USBTMC控制程控电源代码
下面是一个使用CANoe通过USBTMC控制程控电源的示例代码:
```
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <tchar.h>
#include <visa.h>
ViSession defaultRM;
ViSession instr;
void main()
{
ViStatus status;
ViUInt32 retCnt;
char instrDescriptor[VI_FIND_BUFLEN];
ViFindList findList;
ViUInt32 numInstrs;
ViChar instrModel[128];
ViChar instrSerial[128];
ViChar instrFirmware[128];
ViChar instrOptions[128];
ViBoolean idQuery;
ViBoolean resetInstr;
ViUInt32 timeout = 2000;
char cmd[256];
char resp[256];
// Initialize VISA
status = viOpenDefaultRM(&defaultRM);
if (status < VI_SUCCESS) {
printf("Could not open a session to the VISA Resource Manager!\n");
return;
}
// Find the instrument
status = viFindRsrc(defaultRM, "USB[0-9]*::0xXXXX::0xXXXX::XXXXXXXX::INSTR", &findList, &numInstrs, instrDescriptor);
if (status < VI_SUCCESS) {
printf("Could not find the instrument!\n");
viClose(defaultRM);
return;
}
// Open the instrument session
status = viOpen(defaultRM, instrDescriptor, VI_NULL, VI_NULL, &instr);
if (status < VI_SUCCESS) {
printf("Could not open a session to the instrument!\n");
viClose(defaultRM);
return;
}
// Initialize the instrument
idQuery = VI_TRUE;
resetInstr = VI_TRUE;
status = viSetAttribute(instr, VI_ATTR_TMO_VALUE, timeout);
if (status < VI_SUCCESS) {
printf("Could not set timeout attribute!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viSetAttribute(instr, VI_ATTR_TERMCHAR_EN, VI_FALSE);
if (status < VI_SUCCESS) {
printf("Could not set termchar attribute!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viSetAttribute(instr, VI_ATTR_SEND_END_EN, VI_TRUE);
if (status < VI_SUCCESS) {
printf("Could not set send end attribute!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viSetAttribute(instr, VI_ATTR_TERMCHAR, '\n');
if (status < VI_SUCCESS) {
printf("Could not set termchar attribute!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viSetAttribute(instr, VI_ATTR_TERMCHAR_EN, VI_TRUE);
if (status < VI_SUCCESS) {
printf("Could not set termchar attribute!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viSetAttribute(instr, VI_ATTR_TMO_VALUE, timeout);
if (status < VI_SUCCESS) {
printf("Could not set timeout attribute!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viGetAttribute(instr, VI_ATTR_MODEL_NAME, instrModel);
if (status < VI_SUCCESS) {
printf("Could not get instrument model name!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viGetAttribute(instr, VI_ATTR_SERIAL_NUM, instrSerial);
if (status < VI_SUCCESS) {
printf("Could not get instrument serial number!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viGetAttribute(instr, VI_ATTR_SW_VERSION, instrFirmware);
if (status < VI_SUCCESS) {
printf("Could not get instrument firmware version!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viGetAttribute(instr, VI_ATTR_OPTIONS, instrOptions);
if (status < VI_SUCCESS) {
printf("Could not get instrument options!\n");
viClose(instr);
viClose(defaultRM);
return;
}
printf("Instrument found:\n");
printf("Model: %s\n", instrModel);
printf("Serial: %s\n", instrSerial);
printf("Firmware: %s\n", instrFirmware);
printf("Options: %s\n", instrOptions);
// Send commands to the instrument
sprintf(cmd, "OUTPut ON");
status = viWrite(instr, (ViBuf)cmd, (ViUInt32)strlen(cmd), &retCnt);
if (status < VI_SUCCESS) {
printf("Could not send command to the instrument!\n");
viClose(instr);
viClose(defaultRM);
return;
}
sprintf(cmd, "VOLTage 5.0");
status = viWrite(instr, (ViBuf)cmd, (ViUInt32)strlen(cmd), &retCnt);
if (status < VI_SUCCESS) {
printf("Could not send command to the instrument!\n");
viClose(instr);
viClose(defaultRM);
return;
}
sprintf(cmd, "CURRent 1.0");
status = viWrite(instr, (ViBuf)cmd, (ViUInt32)strlen(cmd), &retCnt);
if (status < VI_SUCCESS) {
printf("Could not send command to the instrument!\n");
viClose(instr);
viClose(defaultRM);
return;
}
// Query the instrument
sprintf(cmd, "MEASure:VOLTage?");
status = viWrite(instr, (ViBuf)cmd, (ViUInt32)strlen(cmd), &retCnt);
if (status < VI_SUCCESS) {
printf("Could not send command to the instrument!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viRead(instr, (ViBuf)resp, 256, &retCnt);
if (status < VI_SUCCESS) {
printf("Could not read response from the instrument!\n");
viClose(instr);
viClose(defaultRM);
return;
}
printf("Voltage: %s\n", resp);
sprintf(cmd, "MEASure:CURRent?");
status = viWrite(instr, (ViBuf)cmd, (ViUInt32)strlen(cmd), &retCnt);
if (status < VI_SUCCESS) {
printf("Could not send command to the instrument!\n");
viClose(instr);
viClose(defaultRM);
return;
}
status = viRead(instr, (ViBuf)resp, 256, &retCnt);
if (status < VI_SUCCESS) {
printf("Could not read response from the instrument!\n");
viClose(instr);
viClose(defaultRM);
return;
}
printf("Current: %s\n", resp);
// Close the instrument session
viClose(instr);
// Close the default resource manager session
viClose(defaultRM);
}
```
在代码中,我们使用了VISA库(Virtual Instrument Software Architecture),通过USB连接程控电源,控制电源的输出电压和电流,并查询电源的输出电压和电流。你需要将代码中的"USB[0-9]*::0xXXXX::0xXXXX::XXXXXXXX::INSTR"替换成你的程控电源的VISA资源描述符。