Egteks mPower1203 二次开发 C++ 例程
C++例程调用mPower1203.dll控制mPower1203设备。
先将mPower1203.dll库引用到工程中。
mPower1203.h 完整参考代码如下:
#pragma once
#ifndef __MPOWER_1203_H__
#define __MPOWER_1203_H__
typedef enum {
MPOWER_POWER,
MPOWER_AMPERE
}MPOWER_TYPE;
typedef enum {
MPOWER_POWER_AUTO,
MPOWER_POWER_NORMAL,
MPOWER_POWER_PERCISION,
MPOWER_POWER_ULTRA
}MPOWER_POWER_MODE;
typedef enum {
MPOWER_AMPERE_AUTO,
MPOWER_AMPERE_NORMAL,
MPOWER_AMPERE_PERCISION
}MPOWER_AMPERE_MODE;
typedef enum {
MPOWER_V0_6,
MPOWER_V0_7,
MPOWER_V0_8,
MPOWER_V0_9,
MPOWER_V1_0,
MPOWER_V1_1,
MPOWER_V1_2,
MPOWER_V1_3,
MPOWER_V1_4,
MPOWER_V1_5,
MPOWER_V1_6,
MPOWER_V1_7,
MPOWER_V1_8,
MPOWER_V1_9,
MPOWER_V2_0,
MPOWER_V2_1,
MPOWER_V2_2,
MPOWER_V2_3,
MPOWER_V2_4,
MPOWER_V2_5,
MPOWER_V2_6,
MPOWER_V2_7,
MPOWER_V2_8,
MPOWER_V2_9,
MPOWER_V3_0,
MPOWER_V3_1,
MPOWER_V3_2,
MPOWER_V3_3,
MPOWER_V3_4,
MPOWER_V3_5,
MPOWER_V3_6,
MPOWER_V3_7,
MPOWER_V3_8,
MPOWER_V3_9,
MPOWER_V4_0,
MPOWER_V4_1,
MPOWER_V4_2,
MPOWER_V4_3,
MPOWER_V4_4,
MPOWER_V4_5,
MPOWER_V4_6,
MPOWER_V4_7,
MPOWER_V4_8,
MPOWER_V4_9,
MPOWER_V5_0,
MPOWER_V6_0,
MPOWER_V7_0,
MPOWER_V8_0,
MPOWER_V9_0,
MPOWER_V10,
MPOWER_V11,
MPOWER_V12,
MPOWER_V13
}MPOWER_VOLTAGE;
typedef enum {
MPOWER_POWER_OFF,
MPOWER_POWER_ON
}MPOWER_POWER_SUPPLY;
/**********************************************************************************
** 函数名: Init
** 函数描述: 初始化mPower1203动态库
** 参数: 无
**
** 返回: [out]结果码: 0-成功 其他-失败
***********************************************************************************/
int Init();
/**********************************************************************************
** 函数名: OpenPort
** 函数描述: 打开一路mPower1203设备
** 参数: [in]port:mPower1203设备端口号(设备使用USB连接PC后可以在PC的设备管理
器中查看对应设备的端口号)
**
** 返回: [out]设备id:通常是从1开始,依次累加,如果ID小于0表示打开失败
***********************************************************************************/
int OpenPort(char *port);
/**********************************************************************************
** 函数名: ClosePort
** 函数描述: 关闭一路mPower1203设备
** 参数: [in]设备id
**
** 返回: [out]结果码: 0-成功 其他-失败
************************************************************************************/
int ClosePort(int id);
/***********************************************************************************
** 函数名: SetType
** 函数描述: 配置为电流表/电源类型
** 参数: [in]设备id
** 参数: [in]type取值参考示例程序中的MPOWER_TYPE_E
**
** 返回: [out]结果码: 0-成功 其他-失败
************************************************************************************/
int SetType(int id, int type);
/************************************************************************************
** 函数名: SetMode
** 函数描述: 配置设备工作模式
** 参数: [in]设备id
** 参数: [in]mode在电压表模式下取值参考示例程序中的MPOWER_POWER_MODE_E,电流表模式下取值参考
MPOWER_AMPERE_MODE_E
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int SetMode(int id, int mode);
/************************************************************************************
** 函数名: SetVoltage
** 函数描述: 电源模式下配置设备输出电压
** 参数: [in]设备id
** 参数: [in]voltage取值参考示例程序中的MPOWER_VOLTAGE_E,支持0.6V-13V电压可调
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int SetVoltage(int id, int voltage);
/************************************************************************************
** 函数名: SetPower
** 函数描述: 电源模式下打开/关闭设备电源
** 参数: [in]设备id
** 参数: [in]on取值参考示例程序中的MPOWER_POWER_E
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int SetPower(int id, int on);
/************************************************************************************
** 函数名: StartSample
** 函数描述: 启动数据采集
** 参数: [in]设备id
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int StartSample(int id);
/************************************************************************************
** 函数名: StopSample
** 函数描述: 停止数据采集
** 参数: [in]设备id
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int StopSample(int id);
/************************************************************************************
** 函数名: GetCurrent
** 函数描述: 获取电流连续采样数据,注意:因为数据采集速率非常快,建议单独线程采集数据,且
尽量不要有耗时操作比如延时函数或者log输出等等,如果获取到相同时间戳的数
据只保留一个即可
** 参数: [in]设备id
**
** 返回: [out]电流数据数组,长度不固定,一定是偶数,数据输出格式如下:
[0]:时间戳(us) [1]:电流(uA) [2]:时间戳 [3]:电流(uA) ... 依次类推
*************************************************************************************/
double* GetCurrent(int id);
/************************************************************************************
** 函数名: GetCurrentLast
** 函数描述: 获取单次实时电流
** 参数: [in]设备id
**
** 返回: [out]实时电流值,单位uA
*************************************************************************************/
double GetCurrentLast(int id);
/************************************************************************************
** 函数名: GetFwVersion
** 函数描述: 获取mPower1203设备固件版本号
** 参数: [in]设备id
**
** 返回: [out]版本号,[0]主版本号 [1]次版本号 [2]修订号
*************************************************************************************/
char* GetFwVersion(int id);
/************************************************************************************
** 函数名: GetDllVersion
** 函数描述: 获取mPower1203.dll版本号
** 参数: 无
**
** 返回: [out]版本号,[0]主版本号 [1]次版本号 [2]修订号 [3]构建号
*************************************************************************************/
char* GetDllVersion();
#endif
--------------------------------------------------------------------------------------------------
mPowerReadCurrent.cpp 完整参考代码如下:
/*
本例程使用C++语言控制Egteks公司的mPower1203设备,同时支持多路设备配置和电流数据采集
本例程演示同时采集2路mPower1203设备实时电流
本例程基于Visual Studio 2015 和.NET Framework 4.5.2
库文件mPower1203.dll提供的API接口说明参考History文件
注意:
C++工程属性需要添加运行时支持,右击工程属性->常规->公共语言运行时支持,选择"公共语言运行时支持(/clr)"
*************************************************************************************
* Author :tommy.zhang @egteks.com
* Date :2022.05.23
* Website:www.egteks.com
*
*====================================================================================
*HISTORY
*------------------------------------------------------------------------------------
* V1.0 初版
*************************************************************************************
*/
#include "stdafx.h"
#include "mPower1203.h"
#include "atlstr.h"
#include <windows.h>
using namespace mPower1203;
#define CHANNEL_NUM 2
int main()
{
mPower1203::ClassmPower^ mPower = gcnew mPower1203::ClassmPower();
int Ch[CHANNEL_NUM];
double Cur[CHANNEL_NUM];
cli::array<double>^ Data;
int i;
mPower->Init();
cli::array<unsigned char>^ ver = mPower->GetDllVersion();
printf("Dll Version:%d,%d,%d,%d\n",ver[0],ver[1],ver[2],ver[3]);
//配置COM口,COM口需要根据实际端口号调整
Ch[0] = mPower->OpenPort("COM12");
Ch[1] = mPower->OpenPort("COM5");
for (i = 0; i< CHANNEL_NUM; i++)
{
//配置为电源模式
mPower->SetType(Ch, MPOWER_POWER);
//设置输出电压为12v
mPower->SetVoltage(Ch[i], MPOWER_V12);
//打开电源输出开关
mPower->SetPower(Ch[i], MPOWER_POWER_ON);
//启动数据采样
mPower->StartSample(Ch[i]);
Sleep(100);
}
/*
说明:
1.这里为了演示采集数据所以使用log输出函数, 正式使用场景下数据采集线程请勿输出log, 避免丢数据
2.因为PC采集API调用速度可能会比实际设备采集数据速度快,所以可能会出现接收数据中存在多个时间
戳完全一样的数据, 后续数据处理时丢弃掉重复的数据只保留一个即可
*/
while (true)
{
for (i = 0; i < CHANNEL_NUM; i++)
{
Data = mPower->GetCurrent(Ch[i]);
//输出每次接收的数据长度,第一个数据的时间戳(us)和电流(uA)
printf("ch:%d len:%d time:%f cur:%f\n",i,Data->Length ,Data[0],Data[1]);
}
}
return 0;
}[/i][/i][/i][/i]
扫码关注微信公众号:
先将mPower1203.dll库引用到工程中。
mPower1203.h 完整参考代码如下:
#pragma once
#ifndef __MPOWER_1203_H__
#define __MPOWER_1203_H__
typedef enum {
MPOWER_POWER,
MPOWER_AMPERE
}MPOWER_TYPE;
typedef enum {
MPOWER_POWER_AUTO,
MPOWER_POWER_NORMAL,
MPOWER_POWER_PERCISION,
MPOWER_POWER_ULTRA
}MPOWER_POWER_MODE;
typedef enum {
MPOWER_AMPERE_AUTO,
MPOWER_AMPERE_NORMAL,
MPOWER_AMPERE_PERCISION
}MPOWER_AMPERE_MODE;
typedef enum {
MPOWER_V0_6,
MPOWER_V0_7,
MPOWER_V0_8,
MPOWER_V0_9,
MPOWER_V1_0,
MPOWER_V1_1,
MPOWER_V1_2,
MPOWER_V1_3,
MPOWER_V1_4,
MPOWER_V1_5,
MPOWER_V1_6,
MPOWER_V1_7,
MPOWER_V1_8,
MPOWER_V1_9,
MPOWER_V2_0,
MPOWER_V2_1,
MPOWER_V2_2,
MPOWER_V2_3,
MPOWER_V2_4,
MPOWER_V2_5,
MPOWER_V2_6,
MPOWER_V2_7,
MPOWER_V2_8,
MPOWER_V2_9,
MPOWER_V3_0,
MPOWER_V3_1,
MPOWER_V3_2,
MPOWER_V3_3,
MPOWER_V3_4,
MPOWER_V3_5,
MPOWER_V3_6,
MPOWER_V3_7,
MPOWER_V3_8,
MPOWER_V3_9,
MPOWER_V4_0,
MPOWER_V4_1,
MPOWER_V4_2,
MPOWER_V4_3,
MPOWER_V4_4,
MPOWER_V4_5,
MPOWER_V4_6,
MPOWER_V4_7,
MPOWER_V4_8,
MPOWER_V4_9,
MPOWER_V5_0,
MPOWER_V6_0,
MPOWER_V7_0,
MPOWER_V8_0,
MPOWER_V9_0,
MPOWER_V10,
MPOWER_V11,
MPOWER_V12,
MPOWER_V13
}MPOWER_VOLTAGE;
typedef enum {
MPOWER_POWER_OFF,
MPOWER_POWER_ON
}MPOWER_POWER_SUPPLY;
/**********************************************************************************
** 函数名: Init
** 函数描述: 初始化mPower1203动态库
** 参数: 无
**
** 返回: [out]结果码: 0-成功 其他-失败
***********************************************************************************/
int Init();
/**********************************************************************************
** 函数名: OpenPort
** 函数描述: 打开一路mPower1203设备
** 参数: [in]port:mPower1203设备端口号(设备使用USB连接PC后可以在PC的设备管理
器中查看对应设备的端口号)
**
** 返回: [out]设备id:通常是从1开始,依次累加,如果ID小于0表示打开失败
***********************************************************************************/
int OpenPort(char *port);
/**********************************************************************************
** 函数名: ClosePort
** 函数描述: 关闭一路mPower1203设备
** 参数: [in]设备id
**
** 返回: [out]结果码: 0-成功 其他-失败
************************************************************************************/
int ClosePort(int id);
/***********************************************************************************
** 函数名: SetType
** 函数描述: 配置为电流表/电源类型
** 参数: [in]设备id
** 参数: [in]type取值参考示例程序中的MPOWER_TYPE_E
**
** 返回: [out]结果码: 0-成功 其他-失败
************************************************************************************/
int SetType(int id, int type);
/************************************************************************************
** 函数名: SetMode
** 函数描述: 配置设备工作模式
** 参数: [in]设备id
** 参数: [in]mode在电压表模式下取值参考示例程序中的MPOWER_POWER_MODE_E,电流表模式下取值参考
MPOWER_AMPERE_MODE_E
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int SetMode(int id, int mode);
/************************************************************************************
** 函数名: SetVoltage
** 函数描述: 电源模式下配置设备输出电压
** 参数: [in]设备id
** 参数: [in]voltage取值参考示例程序中的MPOWER_VOLTAGE_E,支持0.6V-13V电压可调
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int SetVoltage(int id, int voltage);
/************************************************************************************
** 函数名: SetPower
** 函数描述: 电源模式下打开/关闭设备电源
** 参数: [in]设备id
** 参数: [in]on取值参考示例程序中的MPOWER_POWER_E
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int SetPower(int id, int on);
/************************************************************************************
** 函数名: StartSample
** 函数描述: 启动数据采集
** 参数: [in]设备id
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int StartSample(int id);
/************************************************************************************
** 函数名: StopSample
** 函数描述: 停止数据采集
** 参数: [in]设备id
**
** 返回: [out]结果码: 0-成功 其他-失败
*************************************************************************************/
int StopSample(int id);
/************************************************************************************
** 函数名: GetCurrent
** 函数描述: 获取电流连续采样数据,注意:因为数据采集速率非常快,建议单独线程采集数据,且
尽量不要有耗时操作比如延时函数或者log输出等等,如果获取到相同时间戳的数
据只保留一个即可
** 参数: [in]设备id
**
** 返回: [out]电流数据数组,长度不固定,一定是偶数,数据输出格式如下:
[0]:时间戳(us) [1]:电流(uA) [2]:时间戳 [3]:电流(uA) ... 依次类推
*************************************************************************************/
double* GetCurrent(int id);
/************************************************************************************
** 函数名: GetCurrentLast
** 函数描述: 获取单次实时电流
** 参数: [in]设备id
**
** 返回: [out]实时电流值,单位uA
*************************************************************************************/
double GetCurrentLast(int id);
/************************************************************************************
** 函数名: GetFwVersion
** 函数描述: 获取mPower1203设备固件版本号
** 参数: [in]设备id
**
** 返回: [out]版本号,[0]主版本号 [1]次版本号 [2]修订号
*************************************************************************************/
char* GetFwVersion(int id);
/************************************************************************************
** 函数名: GetDllVersion
** 函数描述: 获取mPower1203.dll版本号
** 参数: 无
**
** 返回: [out]版本号,[0]主版本号 [1]次版本号 [2]修订号 [3]构建号
*************************************************************************************/
char* GetDllVersion();
#endif
--------------------------------------------------------------------------------------------------
mPowerReadCurrent.cpp 完整参考代码如下:
/*
本例程使用C++语言控制Egteks公司的mPower1203设备,同时支持多路设备配置和电流数据采集
本例程演示同时采集2路mPower1203设备实时电流
本例程基于Visual Studio 2015 和.NET Framework 4.5.2
库文件mPower1203.dll提供的API接口说明参考History文件
注意:
C++工程属性需要添加运行时支持,右击工程属性->常规->公共语言运行时支持,选择"公共语言运行时支持(/clr)"
*************************************************************************************
* Author :tommy.zhang @egteks.com
* Date :2022.05.23
* Website:www.egteks.com
*
*====================================================================================
*HISTORY
*------------------------------------------------------------------------------------
* V1.0 初版
*************************************************************************************
*/
#include "stdafx.h"
#include "mPower1203.h"
#include "atlstr.h"
#include <windows.h>
using namespace mPower1203;
#define CHANNEL_NUM 2
int main()
{
mPower1203::ClassmPower^ mPower = gcnew mPower1203::ClassmPower();
int Ch[CHANNEL_NUM];
double Cur[CHANNEL_NUM];
cli::array<double>^ Data;
int i;
mPower->Init();
cli::array<unsigned char>^ ver = mPower->GetDllVersion();
printf("Dll Version:%d,%d,%d,%d\n",ver[0],ver[1],ver[2],ver[3]);
//配置COM口,COM口需要根据实际端口号调整
Ch[0] = mPower->OpenPort("COM12");
Ch[1] = mPower->OpenPort("COM5");
for (i = 0; i< CHANNEL_NUM; i++)
{
//配置为电源模式
mPower->SetType(Ch, MPOWER_POWER);
//设置输出电压为12v
mPower->SetVoltage(Ch[i], MPOWER_V12);
//打开电源输出开关
mPower->SetPower(Ch[i], MPOWER_POWER_ON);
//启动数据采样
mPower->StartSample(Ch[i]);
Sleep(100);
}
/*
说明:
1.这里为了演示采集数据所以使用log输出函数, 正式使用场景下数据采集线程请勿输出log, 避免丢数据
2.因为PC采集API调用速度可能会比实际设备采集数据速度快,所以可能会出现接收数据中存在多个时间
戳完全一样的数据, 后续数据处理时丢弃掉重复的数据只保留一个即可
*/
while (true)
{
for (i = 0; i < CHANNEL_NUM; i++)
{
Data = mPower->GetCurrent(Ch[i]);
//输出每次接收的数据长度,第一个数据的时间戳(us)和电流(uA)
printf("ch:%d len:%d time:%f cur:%f\n",i,Data->Length ,Data[0],Data[1]);
}
}
return 0;
}[/i][/i][/i][/i]
扫码关注微信公众号: