channelinfo.cpp
来自「数据库开发」· C++ 代码 · 共 318 行
CPP
318 行
#include "stdafx.h"
#include "channelInfo.h"
CChannelInfo::CChannelInfo()
{
Init();
}
CChannelInfo::~CChannelInfo()
{
}
int CChannelInfo::StringToInt(CString s)
{
int nReturn = 0;
char cc[10];
wsprintf(cc, "%s", s);
nReturn = atoi(cc);
return nReturn;
}
float CChannelInfo::StringToFloat(CString s)
{
float fReturn = 0;
char cc[10];
wsprintf(cc, "%s", s);
fReturn = atof(cc);
return fReturn;
}
int CChannelInfo::Init()
{
m_nCount = 0;
for(int i = 0; i < TOTAL_CHANNEL_NUM; i++)
{
m_sName[i].Format("模拟量%d", i);
m_sUnit[i].Format("单位%d", i);
m_nIndex[i] = i;
m_bCheat[i] = TRUE;
m_fMaxsj[i] = 20;
m_fMinsj[i] = 4;
m_fMaxll[i] = 100;
m_fMinll[i] = 0;
m_fSlope[i] = 1; //斜率校正
m_fOffset[i]= 0; //偏移量
m_fBjsx[i] = 95; //报警上限
m_fBjxx[i] = 5; //报警下限
m_fXssx[i] = 85; //显示上限
m_fXsxx[i] = 15; //显示下限
}
return 0;
}
BOOL CChannelInfo::LoadFromIniFile(CString sPath)
{
CString sInfoFile;
sInfoFile = sPath;// + "\\channel.ini";
TCHAR buffer[1024];
CStdioFile File;
CFileException ex;
CString ss, sz;
long l = 0;
int nCount;
if (!File.Open(sInfoFile, CFile::modeRead | CFile::typeText))
{
ex.ReportError();
return FALSE;
}
// Read Header off file
File.ReadString(buffer, 1024);
ss.Format("%s", buffer);
ss.TrimLeft();
ss.TrimRight();
if(ss.CompareNoCase("[Channel]"))
{
File.Close();
return FALSE;
}
nCount = 0;
while (File.ReadString(buffer, 1024)&&(nCount < TOTAL_CHANNEL_NUM))
{
ss.Format("%s", buffer);
ss.TrimLeft();
ss.TrimRight();
//通道配置序号
l = ss.Find(",", 0);
sz = ss.Left(l);
m_nIndex[nCount] = StringToInt(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//路通道名称
l = ss.Find(",", 0);
sz = ss.Left(l);
m_sName[nCount] = sz;
ss = ss.Right(ss.GetLength() - l - 1);
//路工程单位
l = ss.Find(",", 0);
sz = ss.Left(l);
m_sUnit[nCount] = sz;
ss = ss.Right(ss.GetLength() - l - 1);
//报警上限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fBjsx[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//报警下限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fBjxx[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//理论上限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fMaxll[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//理论下限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fMinll[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//实际上限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fMaxll[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//实际下限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fMinll[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//斜率
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fSlope[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//偏移
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fOffset[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//显示上限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fXssx[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//显示下限
l = ss.Find(",", 0);
sz = ss.Left(l);
m_fXsxx[nCount] = StringToFloat(sz);
ss = ss.Right(ss.GetLength() - l - 1);
//作弊模式
l = ss.Find(",", 0);
sz = ss.Left(l);
if(StringToInt(sz) == 0)
m_bCheat[nCount] = FALSE;
else
m_bCheat[nCount] = TRUE;
ss = ss.Right(ss.GetLength() - l - 1);
//报警模式 启用/关闭
l = ss.Find(",", 0);
sz = ss.Left(l);
if(StringToInt(sz) == 0)
m_bBjOn[nCount] = FALSE;
else
m_bBjOn[nCount] = TRUE;
nCount++;
}
m_nCount = nCount;
File.Close();
return TRUE;
}
BOOL CChannelInfo::SaveToIniFile(CString sPath)
{
CString sInfoFile;
sInfoFile = sPath;// + _T("\\channel.ini");
CStdioFile File;
CFileException ex;
CString ss;
if (!File.Open(sInfoFile, CFile::modeWrite | CFile::modeCreate| CFile::typeText, &ex))
{
ex.ReportError();
return FALSE;
}
// Write Header off file
ss = _T("[Channel]");
File.WriteString(ss);
File.WriteString("\n");
for(int i = 0; i < TOTAL_CHANNEL_NUM; i++)
{
//通道配置序号
ss.Format("%d,%s,%s,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,", m_nIndex[i], m_sName[i], m_sUnit[i], m_fBjsx, m_fBjxx, m_fMaxll, m_fMinll, m_fMaxsj, m_fMinsj, m_fSlope[i], m_fOffset[i], m_fXssx[i], m_fXsxx[i]);
File.WriteString(ss);
if(m_bCheat[i])
ss.Format("%d,", 1);
else
ss.Format("%d,", 0);
File.WriteString(ss);
if(m_bBjOn[i])
ss.Format("%d,", 1);
else
ss.Format("%d,", 0);
File.WriteString(ss);
File.WriteString("\n");
}
File.Close();
return TRUE;
}
/*
void CChannelInfo::Clone(CChannelInfo *pData)
{
for(int i = 0; i < TOTAL_CHANNEL_NUM; i++)
{
m_fX[i] = pData->m_fX[i];
m_fY[i] = pData->m_fY[i];
m_fZ[i] = pData->m_fZ[i];
m_fGain[i] = pData->m_fGain[i];
m_sName[i] = pData->m_sName[i];
m_nIndex[i] = pData->m_nIndex[i];
m_fSlope[i] = pData->m_fSlope[i];
m_fMaxmVol[i] = pData->m_fMaxmVol[i];
m_fOrgmVol[i] = pData->m_fOrgmVol[i];
}
}
*/
BOOL CChannelInfo::SjToLl(int nChan, float f_sj, float& f_ll)
{
float fRet;
int nIndex = nChan - 1;
if(nChan <= MAX_CHANNEL1_NUM)
{
if(f_sj >= m_fMaxsj[nIndex])
fRet = m_fMaxsj[nIndex];
if(f_sj <= m_fMinsj[nIndex])
fRet = m_fMinsj[nIndex];
if(m_fMaxsj[nIndex] <= m_fMinsj[nIndex])
{
f_ll = m_fMinll[nIndex];
return TRUE;
}
if(m_fMaxll[nIndex] <= m_fMinll[nIndex])
{
f_ll = m_fMinll[nIndex];
return TRUE;
}
float f = (f_sj - m_fMinsj[nIndex])/(m_fMaxsj[nIndex] - m_fMinsj[nIndex]);
if(m_bCheat[nIndex])
f_ll = m_fXsxx[nIndex] + f * (m_fXssx[nIndex] - m_fXsxx[nIndex]);
else
f_ll = m_fMinll[nIndex] + f * (m_fMaxll[nIndex] - m_fMinll[nIndex]);
f_ll = f_ll * m_fSlope[nIndex] + m_fOffset[nIndex];
if((f_ll > m_fBjsx[nIndex]) || (f_ll < m_fBjxx[nIndex]))
return TRUE;
else
return FALSE;
}else{
f_ll = 0;
return TRUE;
}
}
void CChannelInfo::SjToLlEx(float* f_sj, float* f_ll, BOOL* bWarn)
{
for(int i = 0; i < MAX_CHANNEL2_NUM; i++)
{
f_ll[i] = m_fMaxll[MAX_CHANNEL1_NUM + i] * f_sj[i] * f_sj[i] * f_sj[i];
f_ll[i] = f_ll[i] + m_fMinll[MAX_CHANNEL1_NUM + i] * f_sj[i] * f_sj[i];
f_ll[i] = f_ll[i] + m_fMaxsj[MAX_CHANNEL1_NUM + i] * f_sj[i];
f_ll[i] = f_ll[i] + m_fMinsj[MAX_CHANNEL1_NUM + i];
f_ll[i] = f_ll[i] * m_fSlope[MAX_CHANNEL1_NUM + i] + m_fOffset[MAX_CHANNEL1_NUM + i];
if(m_bCheat[MAX_CHANNEL1_NUM + i])
{
srand( (unsigned)time( NULL ) );
float f = (float)rand();
f = f/RAND_MAX;
f_ll[i] = m_fXsxx[MAX_CHANNEL1_NUM + i] + f * (m_fXssx[MAX_CHANNEL1_NUM + i] - m_fXsxx[MAX_CHANNEL1_NUM + i]);
}
if((f_ll[i] > m_fBjsx[MAX_CHANNEL1_NUM + i]) || (f_ll[i] < m_fBjxx[MAX_CHANNEL1_NUM + i]))
bWarn[i] = TRUE;
else
bWarn[i] = FALSE;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?