VISA串口通信函数-自己测试用

本文介绍了如何使用VISA库进行串口通信,包括初始化通信参数、查找和连接USB设备、执行命令如IDN查询、SN设置以及端口操作,如查询和设置端口状态。

底层会用到visa定义的一些函数和库,visa.h;visatype.h;…;visa32.lib
这里用射频开关做了一个测试

VISA串口通信函数

test.h

#include "visa.h"
#include <stdio.h>
#include <string.h>
#include <string>
#include <stdlib.h>
#include <vector>
#include <unordered_map>
#include <iostream>

#include <utility>
#define MAX_CNT 200
#define MAX_SCPI_LENGTH                 255                         // 最大的SCPI命令 
#define DEFAULT_TIMEOUT                 5000                    // 超时:5000ms   
using namespace std;

typedef struct {
   
   
	char in_port[4];
	std::string out_port[16];  //这里对应16个输出口的    PORT input out_port\n
	std::unordered_map <char, std::string> port_connect;
	std::string dis_out_port; //这里只保存1个未被占用的端口    PORT input out_port\n
}PortInfo;



static ViStatus status = 0;    //ViStatus接口返回值类型, VI_SUCCESS表示执行成功              
static ViSession defaultRM = 0,vi;  //句柄,其中vi为操作设备的句柄。
static ViUInt32 retCnt = 0;
static char bytesWrite[VI_FIND_BUFLEN] = {
   
   '\0'}; //vi写缓冲区
static char bytesRead[VI_FIND_BUFLEN] = {
   
   '\0'};  //vi读缓冲区



///////初始化,设置波特率等
static void SessInit(ViSession &defaultRM);


///////查找枚举USB设备,将找到的端口号和端口号对应的资源描述符组成map,方便后面操作
static void FindPort(ViSession &defaultRM, unordered_map<ViUInt16,string> &portmap); 

////////根据用户选择的COM口userinputport来连接相应设备,连接上的设备操作句柄为vi
static void ConnectPort(ViSession &defaultRM, unordered_map<ViUInt16,string> &portmap, ViUInt16 userinputport,PortInfo &pinfo);

////////向设备发送IDN查询命令
static void FindIDN();

///////////// 向设备发送SN查询命令
static void FindSN();

////// 写入SN
static void SetSN(const char* sn);

////////查询开关切换次数switch?\n
static void FindSwitchNum();




/***************************PORT操作相关*****************************/

///////// PORT?\n  查询当前四路端口的输出口。
static void FindAllPort();

//第一次连接成功后初始化端口--->使端口默认连接上01 02 03 04 号口,并点亮对应图标。
 static void InitPortInfo(PortInfo &pinfo);


 //PORT input out_port\n

 //比如现在要执行PORT A 01\n 需要先判断BCD端口没有连接01端口,
 //假设B端口连了01端口则需给B重连一个未分配的端口
 //typedef struct {
   
   
	// char in_port[4];
	// std::string out_port[16];  //这里对应16个输出口的    PORT input out_port\n
	// std::unordered_map <char, std::string> port_connect;
	// std::string dis_out_port; //这里只保存1个未被占用的端口    PORT input out_port\n
 //}PortInfo;

 //这个函数用于按键触发执行  类似接通单个串口的命令,执行前增加判断逻辑
 //根据不同按键触构造不同指令 eg: PORT B 01\n 
static void DoPortin2out(PortInfo &pinfo);
static void DoPortin2out(PortInfo &pinfo){
   
    
// 假设初始化后(A,01)(B,02)(C,03)(d,04);现在执行 PORT B 01\n , 但是01被A占用
	char do_inport('B');
	string do_outport("16");

	char cmd[32]={
   
   0};
	
	//先判01 是否被占用,遍历 unordered_map
	auto e = pinfo.port_connect.begin();
	for(;e!=pinfo.port_connect.end();e++
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值