?? channelinfo.cpp
字號:
#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);
//報警模式 啟用/關(guān)閉
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;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -