📄 fdcsdata.cpp
字号:
// FdcsData.cpp : implementation file
//
#include "stdafx.h"
#include "FdcsData.h"
#include "host32.h"
#include "Global.h"
#include "DataType.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; //面向瓦面
#endif
/////////////////////////////////////////////////////////////////////////////
// CFdcsData
short poll[100],localNo=2,NetCard_Num=3;
short Station=2; //1:锅炉;2:汽机;0:工程师站
short sendNum=0;
IMPLEMENT_DYNCREATE(CFdcsData, CWinThread)
CFdcsData::CFdcsData()
{
}
CFdcsData::~CFdcsData()
{
}
BOOL CFdcsData::InitInstance()
{
// TODO: perform and per-thread initialization here
return TRUE;
}
int CFdcsData::ExitInstance()
{
// TODO: perform any per-thread cleanup here
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CFdcsData, CWinThread)
//{{AFX_MSG_MAP(CFdcsData)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFdcsData message handlers
void CFdcsData::Fdcs_Init(void)
{
OpenFdcsPort();
short i,error;
short initadnum=0;
short init_k, h[32];
GetCardSetInfo();
init_k=0x100;
for(i=0;i<100;i++) poll[i]=0;
//if( localNo!=0 )
{
for(i=0;i<31;i++) h[i]=0;
for(i=0;i<NetCard_Num;i++) h[i]=1;
}
for(i=0;i<3;i++){
IdcbInt(localNo,h,&poll[1],init_k,&error);
if(!error) break;
}
if(error)
AfxMessageBox("网络初始化错误!",MB_OK,0);
}
short CFdcsData::Fdcs_Coll(short add)
{
short i,ch_num,ch1=1,stream=0,error;
if(poll[add]==9) ch_num = A120_NUM;
if(poll[add]==42) ch_num = A415_NUM;
for(i=0;i<2;i++){
IdcbNum(add,stream,ch1,ch_num,&anaVal[1],&state[1],&fdcstime[0][0],&error);
if(error==0) break;
}
if(error<0){ /* 置质量坏标志 */
for(i=1;i<=ch_num;i++) state[i]=-1;
}
return( error );
}
short CFdcsData::Fdcs_AnaOut(short add) //
{
short i,ch1=1,error;
short stream=0;
i=6;
IdcbNum(add,stream,ch1,i,&anaVal[1],&state[1],&fdcstime[0][0],&error);
return( error );
}
short CFdcsData::Fdcs_RdSt(short add)
{
short error;
short i,num_n,ch;
if(poll[add]==25) num_n=30;
if(poll[add]==24) num_n=6;
if((poll[add]==23)||(poll[add]==22)) num_n=20;
ch=1;
short stream=3;
for(i=0;i<2;i++){
idcb_es(add,stream,ch,num_n,&swVal[1],&fdcstime[1][0],&error);
if(error==0) break;
}
return( error );
}
short CFdcsData::Fdcs_RdEvent(short add)
{
short error;
short i,num_n,ch;
ch=1;
short stream=0;
num_n=1;
for(i=0;i<2;i++){
IdcbEs(add,stream,ch,num_n,&swVal[1],&fdcstime[1][0],&error);
if(error==0) break;
}
stream=2;
for(i=0;i<2;i++){
IdcbClr(add,stream,num_n,&error);
if(error==0) break;
}
return( error );
}
short CFdcsData::Fdcs_figout(short add,short ch,bool st)
{
short error;
short num_n;
float aa[10];
char cc[20];
num_n=0;
if(st)
sprintf(cc,"ON%02d",ch);
else
sprintf(cc,"OF%02d",ch);
IdcbTx(add,cc,num_n,aa,&error);
return( error );
}
void CFdcsData::Fdcs_Add(short add)
{
IdcbAdd(add);
}
void CFdcsData::Fdcs_NetInit(void)
{
short i,error;
short initadnum=0;
short init_k,init_ad, hh[32];
short init_p[100];
IdcbAdd(0x1a0);
init_k =0x100;
init_ad=2;
for(i=0;i<100;i++) init_p[i]=0;
for(i=0;i<32;i++) hh[i]=0;
hh[0]=1; hh[1]=1;
for(i=0;i<3;i++){
IdcbInt(init_ad,hh,&init_p[1],init_k,&error);
if(!error) break;
}
if(error)
{
AfxMessageBox("通讯网络初始化错误!",MB_OK,0);
}
IdcbAdd(0x1c0);
}
void CFdcsData::NetSend() //
{
}
void CFdcsData::initpoint(void)
{
}
void CFdcsData::Read_Computer(void)
{
// FILE *stream;
// stream = fopen( ".\\table\\cardInfo.txt", "r+" );
// fscanf( stream, "%hd %hd",&localNo,&NetCard_Num);
// fclose(stream);
}
void CFdcsData::Def_Initpoint(short *Loc_DataBlock_Modified)
{
short pi,i,k,nType;
//char cdisp[80];
Anapstruct *pWork,*pWork1,*wk;
Anapstruct *ctrptr[MAX_ADNUM];
char workstr[60],errinf[100];
float intpara[64];
short intparanum,ad_adr,err;
float a,b; //y=ax+b
// a=(工艺信号上量程T2-下量程T1)/((原始信号上量程S2-下量程S1)*转换电阻值R)
// b=(S2*T1-S1*T2)/(S2-S1)
char zerobuf[512];
for(i=0;i<512;i++) zerobuf[i]=0;
pWork1 = new Anapstruct[(MAX_ADNUM+1)*(MAX_CHNUM+1)];
for(i=0;i<=MAX_ADNUM;i++)
ctrptr[i]=pWork1+i*(MAX_CHNUM+1);
pWork = pWork1;
for(i=0;i<(MAX_ADNUM+1)*(MAX_CHNUM+1);i++){
pWork = pWork1+i;
memcpy(pWork,zerobuf,sizeof(Anapstruct));
}
DataBlock attr;
//attr = new DataBlock;
FILE *stream;
stream = fopen( ".\\table\\Analogdoc.txt", "r+" );
while(fscanf( stream, "%hd %hd %s",&attr.WP_TypeIndex,&attr.WP_Number,&attr.WP_Code[0])!=EOF){
fscanf( stream, "%s %hd %hd",&attr.WP_Name[0],&attr.WP_OriginalIndex,&attr.Occupied_FdcsNo);
fscanf( stream, "%hd %hd %f",&attr.Occupied_ChannelNo,&attr.Alert_Switch,&attr.PjtSignal_downLimit);
fscanf( stream, "%f %s %f",&attr.PjtSignal_upLimit,&attr.PjSignal_unit[0],&attr.Alert_downLimit);
fscanf( stream, "%f %f %f",&attr.Alert_upLimit,&attr.OrgnSignal_downLimit,&attr.OrgnSignal_upLimit);
fscanf( stream, "%s %hd %hd",&attr.OrgnSignal_unit[0],&attr.OrgnSignal_TypeIndex,&attr.Compensate_wayIndex);
fscanf( stream, "%hd %hd %hd",&attr.Compensate_Tempchange,&attr.Compensate_FdcsNo,&attr.Compensate_ChannelNo);
fscanf( stream, "%s %s",&attr.Switch_Off[0],&attr.Switch_On[0]);
if((attr.Occupied_FdcsNo<1)||(attr.Occupied_FdcsNo>MAX_ADNUM)){
// sprintf(cdisp,"输入前置机号%d、通道号%d错误",attr.Occupied_FdcsNo,attr.Occupied_ChannelNo);
// AfxMessageBox (cdisp, MB_OK,0);
continue;
}
if((attr.WP_Number>MAX_TOTAL)||(attr.WP_Number<1)) continue;
//前端模式参数库
pWork = ctrptr[attr.Occupied_FdcsNo]+attr.Occupied_ChannelNo;
pWork->psNo = attr.WP_Number;
// strcpy(pWork->psCode, attr.WP_Code);
pWork->iSignType= attr.OrgnSignal_TypeIndex;
pWork->add = attr.Occupied_FdcsNo;
pWork->ch = attr.Occupied_ChannelNo;
pWork->elecTop = attr.OrgnSignal_upLimit;
pWork->elecBot = attr.OrgnSignal_downLimit;
//strcpy(pWork->elecUnit, attr.OrgnSignal_unit);
pWork->sysBot = attr.PjtSignal_downLimit;
pWork->sysTop = attr.PjtSignal_upLimit;
//strcpy(pWork->sysUnit, attr.PjSignal_unit);
if(attr.Alert_downLimit<attr.PjtSignal_downLimit) pWork->alrmLow = attr.PjtSignal_downLimit;
else pWork->alrmLow = attr.Alert_downLimit;
if(attr.Alert_upLimit>attr.PjtSignal_upLimit) pWork->alrmHig = attr.PjtSignal_upLimit;
else pWork->alrmHig = attr.Alert_upLimit;
}
fclose(stream);
short chNum=A415_NUM;
short *Loc_DataBlock_Modified1;
for(pi=1;pi<MAX_ADNUM;pi++){
switch(poll[pi]){
case 9:
case 42:
ad_adr=pi;
if(poll[pi]==9) chNum=A120_NUM;
for(i=1;i<=chNum;i++){
// **********lxl add in 2000-4-30 begin**********
Loc_DataBlock_Modified1=Loc_DataBlock_Modified+pi*(MAX_CHNUM+1)+i;
if (*Loc_DataBlock_Modified1!=1) continue;
//*******lxl add in 2000-4-30 end;
wk=ctrptr[pi]+i;
/* if((strcmp(wk->psCode,"A256")==0)||(strcmp(wk->psCode,"A257")==0)){
wk->sysTop*=wk->sysTop;
aps = aps1+wk->add*(MAX_CHNUM+1)+wk->ch;
aps->sysTop = wk->sysTop;
}
*/
if((wk->add<=0)||(wk->add>MAX_ADNUM)||(wk->psNo==0)||(wk->ch<=0)||(wk->ch>20)){
sprintf(workstr,"CH%02dMO000;CO",i);
intparanum=0;
IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);;
continue;
}
switch(wk->iSignType){
case 0: //电压(0-5000mV)
sprintf(workstr,"CH%02dMO100SIBO;CO",i);
if((wk->elecTop-wk->elecBot)<0.01){
// sprintf(cdisp,"%d#前置机%d# 通道上限%7.2f 下限%7.2f 错误!",ad_adr,i,wk->electop,wk->elecbot);
// AfxMessageBox(cdisp,MB_OK,0);
continue;
}
if(wk->elecTop>5120.00) wk->elecTop = 5000.00;
if(wk->elecBot<-5120.0) wk->elecBot = 0.0;
a=(float)(wk->sysTop-wk->sysBot)/((float)(wk->elecTop-wk->elecBot));
b=wk->sysTop-a*wk->elecTop;
// sprintf(cdisp,"electop:%7.2f bot:%7.2f",wk->electop,wk->elecbot);
// AfxMessageBox(cdisp,MB_OK,0);
intpara[0]=a;
intpara[1]=b;
intpara[2]=wk->alrmLow;
intpara[3]=wk->alrmHig;
intparanum=4;
for(k=0;k<3;k++){
IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
if(err==0) break;
}
if(err){
//sprintf(cdisp,"%d# 前置机 %d# 通道错误!err:%d %s",ad_adr,i,err,workstr);
//AfxMessageBox(cdisp,MB_OK,0);
}
break;
case 1: //电流
sprintf(workstr,"CH%02dMO100SIBO;CO",i);
if((wk->elecTop-wk->elecBot)<0.01){
continue;
}
a=(float)(wk->sysTop-wk->sysBot)/((float)(wk->elecTop-wk->elecBot)*RR);
b=wk->sysTop-a*wk->elecTop*RR;
intpara[0]=a;
intpara[1]=b;
intpara[2]=wk->alrmLow;
intpara[3]=wk->alrmHig;
intparanum=4;
for(k=0;k<3;k++){
IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
if(err==0) break;
}
if(err){
}
break;
case 2: //热电偶
case 3:
if(wk->iSignType == 2 ) nType = 3;
if(wk->iSignType == 3 ) nType = 8;
sprintf(workstr,"CH%02dMO3%1d0BO;CO",i,nType);
intpara[0]=wk->alrmLow;
intpara[1]=wk->alrmHig;
intparanum=2;
IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
if(err){
sprintf(errinf,"%d# 前置机 %d# 通道错误!",ad_adr,i);
// AfxMessageBox(errinf,MB_OK,0);
}
break;
case 4: //热电阻pt100
case 5:
case 6:
case 7:
if(wk->iSignType == 4 ) nType = 1;
if(wk->iSignType == 5 ) nType = 2;
if(wk->iSignType == 6 ) nType = 4;
if(wk->iSignType == 7 ) nType = 7;
sprintf(workstr,"CH%02dMO4%1d02BO;CO",i,nType);
// if(wk->iSignType == 5 )
// sprintf(workstr,"CH%02dMO2002BO;CO",i);
intpara[0]=wk->alrmLow;
intpara[1]=wk->alrmHig;
intparanum=2;
IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
if(err){
sprintf(errinf,"%d_%d# 通道错误! ",ad_adr,i);
// AfxMessageBox(errinf,MB_OK,0);
}
break;
default:
break;
}
}
intparanum=0;
IdcbTx(ad_adr,"SA40;CO",intparanum,&intpara[0],&err);
break;
case 22:
case 23:
ad_adr=pi;
for(i=1;i<=chNum;i++){
//****** lxl add in 2000-4-30 begin**********
Loc_DataBlock_Modified1=Loc_DataBlock_Modified+pi*(MAX_CHNUM+1)+i;
if (*Loc_DataBlock_Modified1!=1) continue;
// ******lxl add in 2000-4-30 end********
wsprintf(workstr,"CH%02dMO732DB2;CO",i);
intparanum=0;
IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
if(err){
//sprintf(errinf,"%d# 前置机 %d# 通道错误!",ad_adr,i);
//AfxMessageBox(errinf,MB_OK,0);
}
}
break;
default:
sprintf(workstr,"CH%02dMO000;CO",i);
intparanum=0;
IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);;
break;
}
}
delete[] pWork1;
}
void CFdcsData::Def_SendReCommand(short adr)
{
float Data[8];
short err;
IdcbTx(0,"RE",0,&Data[0],&err);
}
void CFdcsData::Def_InitNet()
{
short i,error;
short initadnum=0;
short init_k, h[32],Loc_poll[100];
init_k=0x100;
for(i=0;i<MAX_ADNUM;i++) Loc_poll[i]=0;
for(i=0;i<31;i++) h[i]=0;
for(i=0;i<NetCard_Num;i++) h[i]=1;
for(i=0;i<3;i++)
{
IdcbInt(localNo,h,&Loc_poll[1],init_k,&error);
if(!error) break;
}
if (!error) for(i=0;i<MAX_ADNUM;i++) poll[i]=Loc_poll[i];
}
void CFdcsData::Fdcs_ReadTime(short *err, char *p)
{
short error;
char Loc_Time[40];
for(int i=0;i<3;i++)
{
IdcbRt(Loc_Time,&error);
if(!error) break;
}
*err=error;
strcpy(p,Loc_Time);
}
BOOL CFdcsData::RegActivex(LPCTSTR pszDllName,LPSTR nErrorCode)
{
//ActiveX控件的路径及文件名
//装载ActiveX控件
HINSTANCE hLib = LoadLibrary(pszDllName);
if (hLib<(HINSTANCE)HINSTANCE_ERROR)
{
strcpy(nErrorCode,"不能载入Dll文件!");
return FALSE;
}
//获取注册函数DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,_T("DllRegisterServer"));
//调用注册函数DllRegisterServer
if(lpDllEntryPoint!=NULL)
{
if(FAILED((*lpDllEntryPoint)()))
{
strcpy(nErrorCode,"调用DllRegisterServer 失败!");
FreeLibrary(hLib);
return FALSE;
};
strcpy(nErrorCode,"调用DllRegisterServer 成功!");
}
else
{
strcpy(nErrorCode,"调用DllRegisterServer 失败!");
FreeLibrary(hLib);
return FALSE;
}
FreeLibrary(hLib);
return TRUE;
}
BOOL CFdcsData::UnregisterActivex(LPCTSTR pszDllName,LPSTR nErrorCode)
{
//ActiveX控件的路径及文件名
//装载ActiveX控件
HINSTANCE hLib = LoadLibrary(pszDllName);
if (hLib<(HINSTANCE)HINSTANCE_ERROR)
{
strcpy(nErrorCode,"不能载入Dll文件!");
return FALSE;
}
//获取注册函数DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,_T("DllUnregisterServer"));
//调用注册函数DllRegisterServer
if(lpDllEntryPoint!=NULL)
{
if(FAILED((*lpDllEntryPoint)()))
{
strcpy(nErrorCode,"调用DllUnRegisterServer 失败!");
FreeLibrary(hLib);
return FALSE;
};
}
else
{
strcpy(nErrorCode,"调用DllUnRegisterServer 失败!");
return FALSE;
}
FreeLibrary(hLib);
return TRUE;
}
void CFdcsData::GetCardSetInfo()
{
FILE *ftpA;
if ((ftpA=fopen(".\\table\\NetSet.txt","r+"))==NULL)
{
AfxMessageBox("open NetSet file error");
}
else
{
fscanf(ftpA,"%hd %hd",&localNo,&NetCard_Num);
fclose(ftpA);
}
}
void CFdcsData::OpenFdcsPort()
{
BOOL bReturn;
OSVERSIONINFO osv;
DWORD nProcessId;
osv.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
if (GetVersionEx(&osv))
{
switch(osv.dwPlatformId)
{
case VER_PLATFORM_WIN32s: //win32 on windows3.1
nProcessId=0;
break;
case VER_PLATFORM_WIN32_WINDOWS: //win32 on win98
nProcessId=0;
break;
case VER_PLATFORM_WIN32_NT: //win32 on windows nt
CopyDriverFile(&bReturn);
nProcessId=::GetCurrentProcessId();
OpenIoPort(nProcessId,0x100,0x1CF);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -