📄 _dll_test_vc.cpp.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 + -