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同一目录下才不会报错。

    一键三连呀!
  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/jee-cai/p/14095349.html
Copyright © 2011-2022 走看看