⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dk20dieselizedynamotordlg.cpp

📁 485通讯接口模块的编程应用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// DK20DieselizeDynamotorDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DK20DieselizeDynamotor.h"
#include "DK20DieselizeDynamotorDlg.h"
#include "math.h"
#include "RecordWarning.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define SPEED 300 ;


void Send7045Command_1(int iPort , BOOL bopen) ; 
void Send7045Command_2(int iPort , BOOL bopen) ; 
void Send7045Command_3(int iPort , BOOL bopen) ;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

extern CDK20DieselizeDynamotorDlg * mainDlg;
extern byte bPortStatus1[16];
extern byte bPortStatus2[16];
extern byte bPortStatus3[16];

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

#define  WAITDELAY 130
/////////////////////////////////////////////////////////////////////////////
// CDK20DieselizeDynamotorDlg dialog

CDK20DieselizeDynamotorDlg::CDK20DieselizeDynamotorDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDK20DieselizeDynamotorDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDK20DieselizeDynamotorDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDK20DieselizeDynamotorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDK20DieselizeDynamotorDlg)
	DDX_Control(pDX, IDC_TAB1, m_TCShow);
	DDX_Control(pDX, IDC_BUTTON_EXIT, m_btnExit);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDK20DieselizeDynamotorDlg, CDialog)
	//{{AFX_MSG_MAP(CDK20DieselizeDynamotorDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void Send7045Command1(BYTE bytestatus[16])
{
	ZeroMemory(byteArray1,20)   ; 
	byteArray1[0] ='@'  ; 
	byteArray1[1] ='0'  ; 
	byteArray1[2] ='6'  ;  
	byteArray1[7] =0x0D   ; 
	
	char szTmp[1] ; 
	int iSendstatus = 0 ; 
	int iByteindex =0 ; 

	for(int i = 15 ; i >=0  ; i-= 4)
	{
		iByteindex++ ; 
		iSendstatus = 0 ; 
		for(int j = 0 ; j <4 ; j++)
		{
			iSendstatus += bytestatus[i-j]*pow(2 , 3 - j  ) ; 
		}
		ZeroMemory(szTmp,1 ); 
		sprintf(szTmp , "%X" ,iSendstatus); 
		sprintf(szTmp , "%C" ,szTmp[0]); 
		byteArray1[2+iByteindex] = szTmp[0] ; 
	}
	
	
	m_pSerial1->WritePort((char*)byteArray1 ,8) ; 
	m_pSerial1->WaitForResponse(strData1 , WAITDELAY)  ; 
}


void Send7045Command2(BYTE bytestatus[16])
{
	ZeroMemory(byteArray2,20)   ; 
	byteArray2[0] ='@'  ; 
	byteArray2[1] ='0'  ; 
	byteArray2[2] ='6'  ;  
	byteArray2[7] =0x0D   ; 
	
	char szTmp[1] ; 
	int iSendstatus = 0 ; 
	int iByteindex =0 ; 

	for(int i = 15 ; i >=0  ; i-= 4)
	{
		iByteindex++ ; 
		iSendstatus = 0 ; 
		for(int j = 0 ; j <4 ; j++)
		{
			iSendstatus += bytestatus[i-j]*pow(2 , 3 - j  ) ; 
		}
		ZeroMemory(szTmp,1 ); 
		sprintf(szTmp , "%X" ,iSendstatus); 
		sprintf(szTmp , "%C" ,szTmp[0]); 
		byteArray2[2+iByteindex] = szTmp[0] ; 
	}
	
	
	m_pSerial2->WritePort((char*)byteArray2 ,8) ; 
	m_pSerial2->WaitForResponse(strData2 , WAITDELAY)  ; 
}


void Send7045Command3(BYTE bytestatus[16])
{
	ZeroMemory(byteArray3,20)   ; 
	byteArray3[0] ='@'  ; 
	byteArray3[1] ='0'  ; 
	byteArray3[2] ='6'  ;  
	byteArray3[7] =0x0D   ; 
	
	char szTmp[1] ; 
	int iSendstatus = 0 ; 
	int iByteindex =0 ; 

	for(int i = 15 ; i >=0  ; i-= 4)
	{
		iByteindex++ ; 
		iSendstatus = 0 ; 
		for(int j = 0 ; j <4 ; j++)
		{
			iSendstatus += bytestatus[i-j]*pow(2 , 3 - j  ) ; 
		}
		ZeroMemory(szTmp,1 ); 
		sprintf(szTmp , "%X" ,iSendstatus); 
		sprintf(szTmp , "%C" ,szTmp[0]); 
		byteArray3[2+iByteindex] = szTmp[0] ; 
	}
	
	
	m_pSerial3->WritePort((char*)byteArray3 ,8) ; 
	m_pSerial3->WaitForResponse(strData3 , WAITDELAY)  ; 
}

char IntTochar(int i)
{
	char rc;
	switch(i) 
	{
	case 0:
		rc='0';
		break;
	case 1:
		rc='1';
		break;	
	case 2:
		rc='2';
		break;
	case 3:
		rc='3';
		break;
	case 4:
		rc='4';
		break;
	case 5:
		rc='5';
		break;	
	case 6:
		rc='6';
		break;
	case 7:
		rc='7';
		break;
	case 8:
		rc='8';
		break;
	case 9:
		rc='9';
		break;	
	case 10:
		rc='A';
		break;
	case 11:
		rc='B';
		break;
	case 12:
		rc='C';
		break;
	case 13:
		rc='D';
		break;	
	case 14:
		rc='E';
		break;
	case 15:
		rc='F';
		break;
	default:
		;
	}

	return rc;

}

void HexStatus(BYTE * bValue,int iNum , int iHex )
{	
   	int iTmp = iHex	 ; 
	
	for (int i = 0 ;i< iNum ; i++)
	{	
		if (iTmp & 1 ==1 )
		{
			bValue[i] =1 ; 
		}
		else
			bValue[i] =0 ; 
		
		iTmp >>= 1 ; 
		
	}
}
//将单个数字转换为对应的8位2进制数
int ConvertHex(CString &str)  
{
	int A1 =0 ; 
	
	if (str =="A") A1 =10 ; 
	if (str =="B") A1 =11; 
	if (str =="C") A1 =12 ; 
	if (str =="D") A1 =13 ; 
	if (str =="E") A1 =14 ; 
    if (str =="F") A1 =15; 
	if (str =="0") A1 =0; 
    if (str =="1") A1 =1; 
    if (str =="2") A1 =2; 
    if (str =="3") A1 =3; 
    if (str =="4") A1 =4; 
    if (str =="5") A1 =5; 
    if (str =="6") A1 =6; 
    if (str =="7") A1 =7; 
    if (str =="8") A1 =8; 
    if (str =="9") A1 =9; 
	
	return A1 ; 
	
}

int HexToint(CString &str)  
{
	CString str1 =str.Mid(0,1) ; 
	CString str2 = str.Mid(1,1) ; 
	CString str3 =str.Mid(2,1) ; 
	CString str4 = str.Mid(3,1) ; 
	
	int A1=0 , A2 = 0  , A3= 0  , A4= 0  ; 
	
	A1 =atoi((LPSTR)(LPCTSTR)str1)  ; 
	if (str1 =="A") A1 =10 ; 
	if (str1 =="B") A1 =11 ; 
	if (str1 =="C") A1 =12 ; 
	if (str1 =="D") A1 =13 ; 
	if (str1 =="E") A1 =14 ; 
    if (str1 =="F") A1 =15 ; 
 
	A2 =atoi((LPSTR)(LPCTSTR)str2)  ; 
	if (str2 =="A") A2 =10 ; 
	if (str2 =="B") A2 =11 ; 
	if (str2 =="C") A2 =12 ; 
	if (str2 =="D") A2 =13 ; 
	if (str2 =="E") A2 =14 ; 
    if (str2 =="F") A2 =15; 

	A3 =atoi((LPSTR)(LPCTSTR)str3)  ; 
	if (str3 =="A") A3 =10 ; 
	if (str3 =="B") A3 =11 ; 
	if (str3 =="C") A3 =12 ; 
	if (str3 =="D") A3 =13 ; 
	if (str3 =="E") A3 =14 ; 
    if (str3 =="F") A3 =15 ; 
	
	A4 =atoi((LPSTR)(LPCTSTR)str4)  ; 
	if (str4 =="A") A4 =10 ; 
	if (str4 =="B") A4 =11 ; 
	if (str4 =="C") A4 =12 ; 
	if (str4 =="D") A4 =13 ; 
	if (str4 =="E") A4 =14 ; 
    if (str4 =="F") A4 =15; 
	
	
	int aTmp = 0 ; 
	aTmp = A1*16*16*16 +A2*16*16 + A3*16 + A4 ; 
	return aTmp ; 
	
}

void  ComDataArrive1(char *data,int length,DWORD userdata)
{	
	
	strData1 +=CString(data);
	
	return ;    //直接返回
}

void  ComDataArrive2(char *data,int length,DWORD userdata)
{	
	
	strData2 +=CString(data);
	
	return ;    //直接返回
}

void  ComDataArrive3(char *data,int length,DWORD userdata)
{	
	
	strData3 +=CString(data);
	
	return ;    //直接返回
}
/////////////////////////////////////////////////////////////////////////////
// CDK20DieselizeDynamotorDlg message handlers

BOOL CDK20DieselizeDynamotorDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	VERIFY(m_font.CreateFont(
		36,                        // nHeight
		0,                         // nWidth
		0,                         // nEscapement
		0,                         // nOrientation
		FW_BOLD,                 // nWeight
		FALSE,                     // bItalic
		FALSE,                     // bUnderline
		0,                         // cStrikeOut
		ANSI_CHARSET,              // nCharSet
		OUT_DEFAULT_PRECIS,        // nOutPrecision
		CLIP_DEFAULT_PRECIS,       // nClipPrecision
		DEFAULT_QUALITY,           // nQuality
		DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
		_T("Arial")));                 // lpszFacename

	for (int x= 0 ;x<16;x++)
	{
		bPortStatus1[x] = 0;
	}


	CString strDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
	CString strDsn;
	CString strFile = "D:\\DK20DieselizeDynamotor\\dk20.mdb";

	strDsn.Format("ODBC;DRIVER={%s};UID=sa;PWD=;DBQ=%s",strDriver,strFile);

	TRY
	{
		m_db.Open(NULL,false,false,strDsn);
		CString strConnect = m_db.GetConnect();
		bOpen=true;
	}
	CATCH(CDBException,e)
	{
		AfxMessageBox("Database Error:" + e->m_strError+" 数据库打开失败");
		bOpen=false;
	}
	END_CATCH
	
	strData1=_T("");
	strData2=_T("");
	strData3=_T("");
	
	m_pSerial1->OpenPort("COM4:",9600,8,ONESTOPBIT,NOPARITY,ComDataArrive1,(DWORD)this);
	m_pSerial2->OpenPort("COM6:",9600,8,ONESTOPBIT,NOPARITY,ComDataArrive2,(DWORD)this);
	m_pSerial3->OpenPort("COM5:",9600,8,ONESTOPBIT,NOPARITY,ComDataArrive3,(DWORD)this);
	
	this->ShowWindow(SW_MAXIMIZE);
	CRect rc(0,56,1280,622);
	m_TCShow.MoveWindow(&rc);
	if (bChinese)
	{
		m_TCShow.InsertItem(0,"关键性报警信息");
		m_TCShow.InsertItem(1,"全部报警信息");
		m_TCShow.InsertItem(2,"压力、液位与转速报警信息");
		m_TCShow.InsertItem(3,"温度报警信息");
		m_TCShow.InsertItem(4,"打印记录与记录查询");
		m_TCShow.InsertItem(5,"报警值设置");
		SetModeChinese();
	}
	else
	{
		m_TCShow.InsertItem(0,"DYNAMOTOR IMPORT INSPECT");
		m_TCShow.InsertItem(1,"DYNAMOTOR INSPECT");
		m_TCShow.InsertItem(2,"DYNAMOTOR DRANG INSPECT");
		m_TCShow.InsertItem(3,"DYNAMOTOR TREMPERATURE INSPECT");
		m_TCShow.InsertItem(4,"DYNAMOTOR INFORMATION PRINT");
		m_TCShow.InsertItem(5,"DYNAMOTOR INSPECT SETTING");
		m_btnExit.SetWindowText("EXIT");
		SetModeEnglish();
	}

	dlgImport.Create(IDD_DIALOG_IMPORT,GetDlgItem(IDC_TAB1));
	dlgAll.Create(IDD_DIALOG_ALL,GetDlgItem(IDC_TAB1));
	dlgDrang.Create(IDD_DIALOG_DRANG,GetDlgItem(IDC_TAB1));
	dlgTemperature.Create(IDD_DIALOG_TREMPERATURE,GetDlgItem(IDC_TAB1));
	dlgPrinter.Create(IDD_DIALOG_PRINTER,GetDlgItem(IDC_TAB1));
	dlgSetting.Create(IDD_DIALOG_SETTING,GetDlgItem(IDC_TAB1));

	CRect rect; 
	m_TCShow.GetClientRect(&rect); 
	rect.top+=20;    
	rect.left+=3;   

	dlgImport.MoveWindow(&rect); 
	dlgAll.MoveWindow(&rect); 
	dlgDrang.MoveWindow(&rect); 
	dlgTemperature.MoveWindow(&rect); 
	dlgPrinter.MoveWindow(&rect); 
	dlgSetting.MoveWindow(&rect); 
	dlgAll.ShowWindow(TRUE);
	Sleep(100);
	dlgAll.ShowWindow(FALSE);
	dlgImport.ShowWindow(TRUE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -