zoukankan      html  css  js  c++  java
  • vs2013封装串口库并虚拟串口测试使用

    一、环境:
    vs2013;vspd
    安装下下面这个软件:功能是提供虚拟串口的功能:叫vspd直接网上搜索下载就可以。

    二、创建dll工程

    名字啥的可以自己起。
    创建完之后会自动生成一些东西,我们只需要在我们的项目cpp文件编写我们所需要的代码函数和接口就可以,头文件的.h文件去进行声明即可。
    我实现的是在dll中生成一个串口接口,然后在新建的exe项目中去进行接口调用测试。
    下面是我的主要实现函数:

    /定义数据帧
    int checkStatus(char * buf){
    	string res;
    	char sub[20];
    	substring(buf, 'E', 'X', sub);
    	char *p = sub;
    	res = p;
    	cout << res.c_str() << endl;
    
    	char* senddata;
    	string k1 = res.substr(1, 2);    //第一个继电器状态码
    	//cout << k1.c_str() << endl;
    	string k2 = res.substr(4, 2);           //第二个继电器状态码
    	string k3 = res.substr(7, 2);           //第三个继电器状态码
    	string k4 = res.substr(10, 2);          //第四个继电器状态码
    	string k5 = res.substr(13, 2);          //校验位加和
    	string kk = k1 + k2 + k3 + k4;
    	//senddata = "01";
    	//gCom.write(senddata, strlen(senddata));
    	//判断操作
    	if (strcmp((const char*)k1.c_str(), "01") && strcmp((const char*)k5.c_str(), (const char*)kk.c_str())){//控制继电器1开
    		senddata = "01";
    		gCom.write(senddata, strlen(senddata));
    	}
    	return 1;
    }
    int ControlRelay(int id, char* controldata){
    	//gCom.write(controldata,strlen(controldata));
    	checkStatus(controldata);//判断数据帧
    	return 1;
    }
    
    

    写完之后我们点击生成dll就可以了。

    然后就是再新建一个exe刚才项目来调用测试我们刚才的接口,看看能不能正常使用。

    下面是我的测试接口代码:

    #include<iostream>
    using namespace std;
    //将export改为import即导出变导入即可
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    
    extern "C"_declspec(dllimport) int maopao(int a, int b);
    extern "C"_declspec(dllimport) int ControlRelay(int id, char* controldata);//继电器控制
    extern "C"_declspec(dllimport) int UartInit(int nCom);
    extern "C"_declspec(dllimport) void UartClose(void);
    /*
    前两位:包头
    第三位:板子编号
    第四-七位:继电器状态码。
    00 00 00 01:表示四号继电器开
    00 00 00 00:表示全部继电器关
    第八位:校验位:为继电器状态码加和
    */
    char toSendUartData[] = "FF,FE,01,01,00,00,01,XF"; 
    
    void substring(char *s, char ch1, char ch2, char *substr)
    {
    	while (*s && *s++ != ch1);
    	while (*s && *s != ch2) *substr++ = *s++;
    	*substr = '';
    }
    // 定义一个延时xms毫秒的延时函数
    void delay(unsigned int xms)  // xms代表需要延时的毫秒数
    {
    	unsigned int x, y;
    	for (x = xms; x>0; x--)
    	for (y = 110; y>0; y--);
    }
    int main()
    
    {
    	//maopao(5, 10);
    	string res;
    	char sub[20];
    	UartInit(2);
    	for (int i=0; i < 10; i++)
    	{
    		ControlRelay(1, toSendUartData);
    		delay(1000);
    	}
    	substring(toSendUartData, 'E', 'X', sub);
    	string result;
    	char *p = sub;
    	res = p;
    	cout << res.c_str() << endl;
    	string k1 = res.substr(1,2);    //第一个继电器状态码
    	cout << k1.c_str() << endl;
    	result = k1;
    	string k2 = res.substr(4, 2);           //第二个继电器状态码
    	cout << k2.c_str() << endl;
    	result += k2;
    	string k3 = res.substr(7, 2);           //第三个继电器状态码
    	cout << k3.c_str() << endl;
    	result += k3;
    	string k4 = res.substr(10, 2);          //第四个继电器状态码
    	cout << k4.c_str() << endl;
    	result += k4;
    	string k5 = res.substr(13, 2);          //校验位加和
    	cout << "k5:"<<k5.c_str() << endl;
    	cout <<"检验和:"<< result.c_str() << endl;
    	if (strcmp((const char*)k1.c_str(), "01") && strcmp((const char*)res.c_str(), (const char*)k5.c_str())){
    		cout << "open sucess!" << endl;
    	}
    	else
    	{
    		cout << "open error!" << endl;
    	}
    	system("pause");
    	return 0;
    
    }
    

    配置环境:

    在VS工程中,添加c/c++工程中外部头文件及库的基本步骤:

    1、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。
    
    2、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。
         然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名。
    
    3、添加工程引用的dll动态库:把引用的dll放到工程的可执行文件所在的目录下。
    

    注意:第一步可以不用,直接在工程里加入动态库的头文件,在使用代码处引用这个头文件。

    之后点击运行:
    打开我们的出口调试助手就可以看到发送的数据了。

    资源文件稍后会整理上传。
    错误解决:
    1.VS2013 新建工程 出现错误 “未将对象引用设置到对象的实例”?
    打开vs工具,进入命令模式

    输入:devenv /ResetSettings,在重新打开你的项目就可以解决。
    2.出现无法定位程序xxx与动态链接库上?
    双击项目,在文件资源管理器打开,
    要把你的dll文件生成的lib和dll文件复制到你的exe同一目录下才不会报错。

    一键三连呀!
  • 相关阅读:
    详解Linux 安装 JDK、Tomcat 和 MySQL(图文并茂)
    详解Linux 安装 JDK、Tomcat 和 MySQL(图文并茂)
    常见的面试C#技术题目
    Struts2中的ModelDriven机制及其运用
    Struts2 中的数据传输的几种方式
    Struts2 中的数据传输的几种方式
    form表单中method的get和post区别
    form表单中method的get和post区别
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/jee-cai/p/14095349.html
Copyright © 2011-2022 走看看