?? transjs.cpp
字號:
// TransJS.cpp : implementation file
//變壓器監視界面
#include "stdafx.h"
#include "GSMTest.h"
#include "TransJS.h"
#include "QueryDlg.h"
#include "pdu.h"
#include "winsock.h"
#include <mysql.h>
#include "database.h"
#include "data.h"
#include "Excel1.h"
#include "math.h"
#include "IDCHECK.h"
#include "TRansduty.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTransJS dialog
CTransJS::CTransJS(CWnd* pParent /*=NULL*/)
: CDialog(CTransJS::IDD, pParent)
{
//{{AFX_DATA_INIT(CTransJS)
m_sCurTime = _T("");
m_sStatus1 = _T("");
m_sStatus2 = _T("");
//}}AFX_DATA_INIT
}
void CTransJS::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTransJS)
DDX_Control(pDX, IDC_TRANS_LIST, m_ctrTrans);
DDX_Text(pDX, IDC_CUR_TIME, m_sCurTime);
DDX_Text(pDX, IDC_STATUS1, m_sStatus1);
DDX_Text(pDX, IDC_STATUS, m_sStatus2);
DDX_Control(pDX, IDC_GSMCOMM, m_ctrGsm);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTransJS, CDialog)
//{{AFX_MSG_MAP(CTransJS)
ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
ON_BN_CLICKED(IDC_QUERY_BUTTON, OnQuery)
ON_BN_CLICKED(IDC_CHECK, OnCheck)
ON_WM_PAINT()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_CFG_STAND, OnCfgStand)
ON_BN_CLICKED(IDC_PRE_PAGE, OnPrePage)
ON_BN_CLICKED(IDC_NEXT_PAGE, OnNextPage)
ON_BN_CLICKED(IDC_delete, Ondelete)
ON_BN_CLICKED(IDC_TUR_EXCEL, OnTurExcel)
ON_BN_CLICKED(IDC_SIG_TEST, OnSigTest)
ON_BN_CLICKED(IDC_START2, OnStart)
ON_NOTIFY(NM_DBLCLK, IDC_TRANS_LIST, OnDblclkTransList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTransJS message handlers
BOOL CTransJS::OnInitDialog()
{
CDialog::OnInitDialog();
ShowWindow(SW_MAXIMIZE);
//設置控件大小,位置等.
CRect rcClient;
GetWindowRect(&rcClient);
int cx = rcClient.Width();
int cy = rcClient.Height();
GetDlgItem(IDC_TRANS_LIST)->MoveWindow(120,20,cx-150,cy-200,true);
GetDlgItem(IDC_FOOTER)->MoveWindow(0,cy-60,300,20,TRUE);
GetDlgItem(IDC_PRE_PAGE)->MoveWindow(350,cy-60,50,20,TRUE);
GetDlgItem(IDC_NEXT_PAGE)->MoveWindow(450,cy-60,50,20,TRUE);
GetDlgItem(IDC_CUR_TIME)->MoveWindow(650,cy-60,180,20,TRUE);
// TODO: Add extra initialization here
m_nNumofPage=5;
m_nCurPage=1;
GetDlgItem(IDC_PRE_PAGE)->EnableWindow(FALSE);
m_ctrTrans.InsertColumn(0,"狀態號",LVCFMT_CENTER,100,2);
m_ctrTrans.InsertColumn(1,"變壓器TEL",LVCFMT_CENTER,150,2);
m_ctrTrans.InsertColumn(2,"變壓器ID",LVCFMT_LEFT,100,2);
m_ctrTrans.InsertColumn(3,"變壓器位置",LVCFMT_LEFT,200,2);
m_ctrTrans.InsertColumn(4,"工作狀態",LVCFMT_LEFT,100,2);
// m_ctrTrans.InsertColumn(5,"電壓A相",LVCFMT_LEFT,80,3);
// m_ctrTrans.InsertColumn(6,"電壓B相",LVCFMT_LEFT,80,3);
// m_ctrTrans.InsertColumn(7,"電壓C相",LVCFMT_LEFT,80,3);
// m_ctrTrans.InsertColumn(8,"A相功率因數",LVCFMT_LEFT,100,4);
// m_ctrTrans.InsertColumn(9,"B相功率因數",LVCFMT_LEFT,100,5);
// m_ctrTrans.InsertColumn(10,"C相功率因數",LVCFMT_LEFT,100,6);
// m_ctrTrans.InsertColumn(11,"溫度",LVCFMT_LEFT,80,6);
m_ctrTrans.InsertColumn(12,"時間",LVCFMT_CENTER,180,6);
m_ctrTrans.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES);
ShowTrans();
OnStart(); //{AfxMessageBox("監控系統啟動失敗!");CDialog::OnCancel();}
SetTimer(1,1000,NULL);//時間顯示
SetTimer(2,10000,NULL);//定時檢查短信
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CTransJS::ShowTrans()
{
CDatabase1 database;
m_ctrTrans.DeleteAllItems();
try
{
database.ConnectDB();
//AfxMessageBox("連接服務器成功!");
CString charset="set names 'gb2312'";//使之正常顯示中文,或用set character_set_results=gb2312;
database.ExecuteSQL(charset,charset.GetLength());//執行語句.
CString limit;
limit.Format("trans_stat limit %d,%d",(m_nCurPage-1)*m_nNumofPage,m_nCurPage*m_nNumofPage);
Data_Param result;
result.tab_name=limit.GetBuffer(40);
result.select_exp="STAT_ID,TRANS_tel,TRANS_id,place,STATUS,STAT_TIME";
if(database.SelectAll(&result))
{
int count=(int)database.GetRowNum();
if(count<=0)
{
m_nCurPage-=1;
GetDlgItem(IDC_NEXT_PAGE)->EnableWindow(FALSE);
return;
}
else
{
m_ctrTrans.DeleteAllItems();
GetDlgItem(IDC_PRE_PAGE)->EnableWindow(TRUE);
}
CImageList list;
list.Create(IDB_NORMAL,16, 1, RGB(255, 0, 255));
for(int i=0;i<count;i++)
{
database.SeekData(i);
MYSQL_ROW row=database.GetRecord();
m_ctrTrans.InsertItem(i,row[0]);
m_ctrTrans.SetItemText(i,1,row[1]);
m_ctrTrans.SetItemText(i,2,row[2]);
m_ctrTrans.SetItemText(i,3,row[3]);
m_ctrTrans.SetItemText(i,4,row[4]);
m_ctrTrans.SetItemText(i,5,row[5]);
/* m_ctrTrans.SetItemText(i,6,row[6]);
m_ctrTrans.SetItemText(i,7,row[6]);
m_ctrTrans.SetItemText(i,8,row[7]);
m_ctrTrans.SetItemText(i,9,row[8]);
m_ctrTrans.SetItemText(i,10,row[9]);
m_ctrTrans.SetItemText(i,11,row[12]);
m_ctrTrans.SetItemText(i,12,row[10]);*/
}
}
//result.tab_name="trans_stat";
//result.select_exp="Ia,Ib,Ic,Ua,Ub,Uc,F,Temp,Stat_time";
}
catch (...) {
AfxMessageBox("連接服務器失敗!");
}
}
void CTransJS::OnRefresh()
{
// TODO: Add your control notification handler code here
ShowTrans();
}
void CTransJS::OnQuery()
{
// TODO: Add your control notification handler code here
CQueryDlg dlg;
dlg.DoModal();
}
void CTransJS::OnCheck()
{
CData ds;
vector<string> v;
// v=ds.Decoding("");
//檢查變壓器狀態
POSITION pos = m_ctrTrans.GetFirstSelectedItemPosition();
if (pos == NULL)
{
AfxMessageBox("請選擇要檢查的變壓器!");
return;
}
}
void CTransJS::OnPaint()
{
CPaintDC dc(this); // device context for painting
//CFont *pOldFont = dc.SelectObject( GetFont());
CRect rect;
GetClientRect(&rect);
//dc.FillSolidRect(&rect,RGB(150,210,240));/*RGB(255,255,255)*/
LOGFONT lgFont;
memset(&lgFont, 0X00, sizeof(LOGFONT));
lgFont.lfHeight = 14; // 此處是不分正號和負號
lgFont.lfWidth = 0;
lgFont.lfCharSet = GB2312_CHARSET; // 中國國家標準2312語系
lgFont.lfOutPrecision = OUT_STROKE_PRECIS;
lgFont.lfClipPrecision = CLIP_STROKE_PRECIS;
lgFont.lfQuality = DRAFT_QUALITY;
lgFont.lfWeight = FW_NORMAL;
lgFont.lfPitchAndFamily = VARIABLE_PITCH|FF_MODERN;
strcpy(lgFont.lfFaceName,"宋體");
CFont font;
font.CreateFontIndirect(&lgFont);
CFont *pOldFont = dc.SelectObject(&font);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(0,0,0));
GetDlgItem(IDC_FOOTER)->GetWindowRect(rect);
ScreenToClient(&rect);
//dc.FillSolidRect(rect,RGB(150,210,240));
dc.DrawText("重慶大學電工技術研究所,重慶..科技有限公司",&rect,DT_CENTER|DT_BOTTOM);
dc.SelectObject(pOldFont);
// Do not call CDialog::OnPaint() for painting messages
}
#include "alarmdlg.h"
void CTransJS::OnTimer(UINT nIDEvent)
{
if(nIDEvent==1)
{
CTime time=CTime::GetCurrentTime();
m_sCurTime=time.Format("%Y年%m月%d日 %H:%M:%S");
UpdateData(FALSE);
}
if(nIDEvent==2)
{
DecodeData();
ShowTrans();
}
CDialog::OnTimer(nIDEvent);
}
#include "standdlg.h"
void CTransJS::OnCfgStand() //設置標準
{
//檢查變壓器狀態
POSITION pos = m_ctrTrans.GetFirstSelectedItemPosition();
if (pos == NULL)
{
AfxMessageBox("請選擇變壓器!");
return;
}
int nItem =m_ctrTrans.GetNextSelectedItem(pos);
CStandDlg dlg;
dlg.m_sTransID=m_ctrTrans.GetItemText(nItem,1);
dlg.DoModal();
}
void CTransJS::OnPrePage() //向前翻頁
{
if(m_nCurPage==1)
{
GetDlgItem(IDC_PRE_PAGE)->EnableWindow(FALSE);
return;
}
m_nCurPage-=1;
GetDlgItem(IDC_NEXT_PAGE)->EnableWindow(TRUE);
ShowTrans();
}
void CTransJS::OnNextPage() //向后翻頁
{
m_nCurPage+=1;
//GetDlgItem(IDC_PRE_PAGE)->EnableWindow(FALSE);
ShowTrans();
}
BOOL CTransJS::OnStart()
{
try
{
if(!InitCom())
return FALSE;
m_sStatus2="";
m_ctrGsm.SetOutput(COleVariant("AT\r"));
Sleep(1000);
OnOnCommGsmcomm();
m_ctrGsm.SetOutput(COleVariant("AT+CNMI=2,2,0,1,1\r"));
m_ctrGsm.SetOutput(COleVariant("AT+CMGF=0\r"));
//得到SIM卡基本信息
//短信中心
//卡號
m_sStatus2="";
if(m_sStatus1.Find("OK")>=0)
{m_sStatus1="連接成功";UpdateData(FALSE);return TRUE;}
else {m_sStatus1="連接失敗";UpdateData(FALSE);return FALSE;}
}
catch (...)
{
//AfxMessageBox(ex.what());
return FALSE;
}
}
BEGIN_EVENTSINK_MAP(CTransJS, CDialog)
//{{AFX_EVENTSINK_MAP(CTransJS)
ON_EVENT(CTransJS, IDC_GSMCOMM, 1 /* OnComm */, OnOnCommGsmcomm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CTransJS::OnOnCommGsmcomm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;
switch(m_ctrGsm.GetCommEvent())
{
case 1: //comEvSend發送數據
break;
case 2: //comEvReceive讀取數據
variant_inp=m_ctrGsm.GetInput();//讀緩沖區
safearray_inp=variant_inp;//VARIANT型變量轉換為COleSafeArray型變量
len=safearray_inp.GetOneDimSize();//得到有效數據長度
//接收數據
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);//轉換為BYTE型數組
BYTE bt=*(char *)(rxdata+k);//字符型
strtemp.Format("%c",bt);//將字符送入臨時變量strtemp存放
m_sStatus2 += strtemp;
}
if(m_sStatus2.Find("OK")>=0)
m_sStatus1="成功";
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -