⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _dll_test_vc.cpp.bak

📁 读MODBUS的动态链接库读 MODBUS的动态链接库读 MODBUS的动态链接库读MODBUS的动态链接库
💻 BAK
字号:
// _DLL_TEST_VC.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"

extern "C" __declspec(dllimport) void __stdcall OpenCom(unsigned char ComNo);
extern "C" __declspec(dllimport) bool __stdcall ReadDev(unsigned char DevAddr,unsigned int *RecBuf);
extern "C" __declspec(dllimport) void __stdcall CloseCom(unsigned char ComNo);

double Temper[4][8];	//四个设备共32个通道对应的温度
const double K_VolVal[26] =	{	1e-6,	2.02,	4.10,	6.14,	8.14,	10.15,	12.21,	14.29,	16.40,	18.51,
								20.64,	22.77,	24.90,	27.02,	29.13,	31.21,	33.28,	35.31,	37.33,	39.31,
								41.27,	43.20,	45.11,	46.99,	48.83,	50.63
							};	//K型热偶分度表,0度对应1e-6毫伏,50度对应2.02毫伏,以此类推1250度对应50.63毫伏

unsigned int SmpVal[4][8] = {	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	
								10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	10,	
							};	//四个设备共32个通道采样值初始化,避免初始为0,防止向温度转换时会出错

double GetTemper_K(unsigned int code)	//由采样值计算温度
{	int i;
	double Temper,mv;

	mv = (double)code / 4095.0 * 50.0;	//设备信号输入范围为0-50毫伏,输出采样值为0-4095
	for(i=0;i<26;i++)
		if(K_VolVal[i] >= mv)
			break;
		
	Temper = (i - 1) * 50.0 + (mv - K_VolVal[i-1]) / (K_VolVal[i] - K_VolVal[i-1]) * 50.0;
		
	return Temper;
}

int main(int argc, char* argv[])
{	unsigned int i,j;
	double bc;	//补偿值
	double SmpVal_Tc;	//冷端温度采样值
	
	CloseCom(1);	//关闭串口1
	OpenCom(1);		//打开串口1
	for(;;)
	{	for(i=0;i<4;i++)		
			ReadDev(i+1,SmpVal[i]);	//读取四个设备共32个通道的采样值
		
		//冷端补偿
		Temper[3][7] = (float)SmpVal[3][7] / 4095.0 * 500.0 - 273.0;	//冷端温度
		bc = T2EMF(Temper[3][7]) / 50 * 4095;	//冷端温度对应电动势转成补偿值
		SmpVal_Tc = SmpVal[3][7];	//冷端温度通道本身不需补偿,其采样值暂存
		
		for(i=0;i<4;i++)
			for(j=0;j<8;j++)
				SmpVal[i][j] += bc;	//所有通道采样值加上补偿值
		SmpVal[3][7] = SmpVal_Tc;	//冷端温度通道不需补偿,恢复其原值
				
		for(i=0;i<4;i++)
			for(j=0;j<8;j++)
				Temper[i][j] =  GetTemper_K(SmpVal[i][j]);	//将加入补偿后的采样值转换成对应的温度值
		
		//该通道是AD590测室温作冷端补偿,作特殊处理.	
		Temper[3][7] = (float)SmpVal[3][7] / 4095.0 * 500.0 - 273.0;	
		for(i=0;i<8;i++)	//打印温度值
			printf("%f\t%f\t%f\t%f\n",Temper[0][i],Temper[1][i],Temper[2][i],Temper[3][i]);	
	}
	CloseCom(1);	//关闭串口1
	return 0;
}

/*热电偶测量的冷端补偿选用AD590温度测量器件,测量出当前冷端温度,
  将温度值转换成电势,这样,每一通道的热电偶电势加上冷端电势后再
  转换成对应的温度值。*/
double T2EMF(double T) //温度转电动势
{
	int i;
	double EMF;	//电动势
	
	for(i=0;i<26;i++)
		if((i * 50.0)>T)
			break;
			
	EMF = K_VolVal[i-1] + (K_VolVal[i] - K_VolVal[i-1]) * (T - (i - 1) * 50.0) / 50.0;
	
	return EMF;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -