📄 vcsampledlg.cpp
字号:
FreeLibrary(m_hInst);
if(m_pComFile!=NULL)
{
delete m_pComFile;
m_pComFile=NULL;
}
CDialog::OnCancel();
}
/*
* 打开串口
*/
void CVcSampleDlg::OnOK()
{
// TODO: Add extra validation here
//返回值
int nResult=0;
CString msg,oldMsg;
int nOverTime=0;
int nTimes=0;
int nDataBit=0;
int nParity=2;
int nStopBit=0;
int nBps=0;
int checkRtu=0;
char commName[6]={0};
char chOverTime[6]={0};
char chTimes[6]={0};
char chDataBit[2]={0};
char chStopBit[4]={0};
char chBps[7]={0};
m_cmbCommName.GetWindowText(commName,6);
//获取串口名称
m_nCommName=m_cmbCommName.GetCurSel()+1;
nParity=m_cmbParityBit.GetCurSel();
//获取超时时间
m_EdOverTime.GetWindowText(chOverTime,6);
nOverTime=atoi(chOverTime);
//获取重发次数
m_CmbTimes.GetWindowText(chTimes,6);
nTimes=atoi(chTimes);
//获取数据位
m_cmbDataBit.GetWindowText(chDataBit,2);
nDataBit=atoi(chDataBit);
//获取停止位
CString strTemp;
m_cmbSTopBit.GetWindowText(strTemp);
if(strTemp=="1")
{
nStopBit=0;
} else if(strTemp=="1.5")
{
nStopBit=1;
}else if(strTemp=="2")
{
nStopBit=2;
}
//获取波特率
m_cmbBps.GetWindowText(chBps,7);
nBps=atoi(chBps);
//获取通信口 0:ASCII 1:RTU begin
CButton *pRTU=NULL;
pRTU=(CButton*)GetDlgItem(IDC_RTU);
if(pRTU->GetCheck())
{
checkRtu=1;
}
//获取通信口 0:ASCII 1:RTU end
//判断Dll句柄是否为空
if(m_hInst)
{
//获取打开串口函数的指针
OpenComm openComm=(OpenComm)::GetProcAddress(m_hInst,"OpenSerial");
if(openComm)
{
//调用DLL打开串口函数
nResult=openComm(m_nCommName,nBps,nDataBit,nStopBit,nParity,checkRtu,nTimes,nOverTime);
if (nResult !=0)
{
m_BtnExit.EnableWindow(false);
m_EdMsg.GetWindowText(oldMsg);
msg.Format("\r\n打开COM%d 失败,错误代码:%d,错误消息:%s.%s",m_nCommName,nResult,getAckMsg(nResult),oldMsg);
m_EdMsg.SetWindowText(msg);
return ;
}
//按钮、输入框设置有效
m_EdMsg.GetWindowText(oldMsg);
msg.Format("\r\n打开COM%d 成功!%s",m_nCommName,oldMsg);
m_EdMsg.SetWindowText(msg);
OpenCommSuccess(true);
m_edNum.SetWindowText("256");
m_BtnExit.EnableWindow(true);
m_btnOk.EnableWindow(false);
}
}
}
/*
* 关闭串口
*/
void CVcSampleDlg::OnExit()
{
// TODO: Add your control notification handler code here
CString msg,oldMsg;
int nResult=0;
if(m_hInst)
{
//获取关闭串口的函数指针
CloseComm close=(CloseComm)::GetProcAddress(m_hInst,"CloseSerial");
if(close)
{
//调用DLL关闭串口函数
nResult=close(m_nCommName);
if (nResult !=0)
{
m_EdMsg.GetWindowText(oldMsg);
msg.Format("\r\n关闭COM%d 失败,错误代码:%d,错误消息:%s!%s",m_nCommName,nResult,getAckMsg(nResult),oldMsg);
m_EdMsg.SetWindowText(msg);
return ;
}
m_EdMsg.GetWindowText(oldMsg);
msg.Format("\r\n关闭COM%d 成功!%s",m_nCommName,oldMsg);
m_EdMsg.SetWindowText(msg);
}
m_BtnExit.EnableWindow(false);
m_btnOk.EnableWindow(true);
//按钮、输入框设置无效
OpenCommSuccess();
}
}
/*
* 判断是否为RTU 如,RTU最大的波特率可以为38400
*/
void CVcSampleDlg::OnSelchangeCombo2()
{
// TODO: Add your control notification handler code here
CString msg;
char chBps[7]={0};
int nBps=0;
//获取波特率
m_cmbBps.GetWindowText(chBps,7);
nBps=atoi(chBps);
/*
* 判断是否选择ASCII
*/
CButton *pRdAscII=NULL;
pRdAscII =(CButton*) GetDlgItem(IDC_ASCII);
if (pRdAscII->GetCheck() == BST_CHECKED)
{
if (nBps ==MAX_BPS)
{
msg.Format("ASCII的最大波特率不能为:%dbps?,请重新选择",nBps);
MessageBox(msg,"提示框",MB_ICONERROR);
return ;
}
}
}
/*
* 读多个线圈操作控制
*/
void CVcSampleDlg::OnRdMultiBit()
{
// TODO: Add your control notification handler code here
/*
* 控制元件类型、输入框的有效性
*/
AddItem(0);
VwCrlComponet(0);
m_nOperIndex=0;
m_edNum.SetWindowText("256");
m_edValue.SetWindowText("");
}
/*
* 控制增加不用元件类型
* 输入值 0、读多个线圈1、读多个寄存器2、写单个线圈3、写多个线圈4、写单个寄存器
* 5、写多个寄存器 6、回送诊断校验
*/
void CVcSampleDlg::AddItem(int operationID)
{
/*
* 清除元件类型的数据
*/
int nCount=0;
nCount=m_cmbItem.GetCount();
for (int i=0;i <nCount;i++)
{
m_cmbItem.DeleteString( 0 );
}
nCount=m_cmbVerftyCode.GetCount();
for (int j=0;j <nCount;j++)
{
m_cmbVerftyCode.DeleteString( 0 );
}
switch(operationID) {
case 0 :
m_cmbItem.AddString("Y");
m_cmbItem.AddString("X");
m_cmbItem.AddString("M");
m_cmbItem.AddString("SM");
m_cmbItem.AddString("S");
m_cmbItem.AddString("T");
m_cmbItem.AddString("C");
m_cmbItem.SetCurSel(0);
break;
case 1:
m_cmbItem.AddString("D");
m_cmbItem.AddString("SD");
m_cmbItem.AddString("Z");
m_cmbItem.AddString("T");
m_cmbItem.AddString("C");
m_cmbItem.SetCurSel(0);
break;
case 2:
m_cmbItem.AddString("Y");
m_cmbItem.AddString("X");
m_cmbItem.AddString("M");
m_cmbItem.AddString("SM");
m_cmbItem.AddString("S");
m_cmbItem.AddString("T");
m_cmbItem.AddString("C");
m_cmbItem.SetCurSel(0);
break;
case 3:
m_cmbItem.AddString("Y");
m_cmbItem.AddString("X");
m_cmbItem.AddString("M");
m_cmbItem.AddString("SM");
m_cmbItem.AddString("S");
m_cmbItem.AddString("T");
m_cmbItem.AddString("C");
m_cmbItem.SetCurSel(0);
break;
case 4:
m_cmbItem.AddString("D");
m_cmbItem.AddString("SD");
m_cmbItem.AddString("Z");
m_cmbItem.AddString("T");
m_cmbItem.AddString("C");
m_cmbItem.SetCurSel(0);
break;
case 5:
m_cmbItem.AddString("D");
m_cmbItem.AddString("SD");
m_cmbItem.AddString("Z");
m_cmbItem.AddString("T");
m_cmbItem.AddString("C");
m_cmbItem.SetCurSel(0);
break;
case 6:
m_cmbVerftyCode.AddString("0x00");
m_cmbVerftyCode.AddString("0x01");
m_cmbVerftyCode.AddString("0x04");
m_cmbVerftyCode.AddString("0x0a");
m_cmbVerftyCode.AddString("0x0b");
m_cmbVerftyCode.AddString("0x0c");
m_cmbVerftyCode.AddString("0x0d");
m_cmbVerftyCode.AddString("0x0e");
m_cmbVerftyCode.AddString("0x0f");
m_cmbVerftyCode.AddString("0x12");
m_cmbVerftyCode.SetCurSel(0);
break;
default:
break;
}
}
/*
* 控制输入框、按钮等控件的有效性
*输入值:True 打开串口成功False 关闭串口或打开串口失败 默认值False
*/
void CVcSampleDlg::OpenCommSuccess(BOOL successFlag)
{
if (successFlag)
{
CButton *pRdEnabled=NULL;
pRdEnabled =(CButton*) GetDlgItem(IDC_RdMultiBit);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_RdMultiWord);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtOneBit);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtMultBit);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtOneWord);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtMultWord);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_VerfityCode);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_ResetBtn);
pRdEnabled->EnableWindow(true);
pRdEnabled =(CButton*) GetDlgItem(IDC_OpertionBtn);
pRdEnabled->EnableWindow(true);
m_cmbVerftyCode.EnableWindow(true);
m_cmbVerftyCode.ShowWindow(SW_HIDE);
CStatic *tVergtyCode=NULL;
tVergtyCode =(CStatic *) GetDlgItem(IDC_stVertfyCode);
tVergtyCode->ShowWindow(SW_HIDE);
m_edValue.EnableWindow(false);
m_edStartAddr.EnableWindow(true);
m_edNum.EnableWindow(true);
m_cmbItem.EnableWindow(true);
m_cmbSationNo.EnableWindow(true);
}else
{
CButton *pRdEnabled=NULL;
pRdEnabled =(CButton*) GetDlgItem(IDC_RdMultiBit);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_RdMultiWord);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtOneBit);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtMultBit);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtOneWord);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_WrtMultWord);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_VerfityCode);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_ResetBtn);
pRdEnabled->EnableWindow(false);
pRdEnabled =(CButton*) GetDlgItem(IDC_OpertionBtn);
pRdEnabled->EnableWindow(false);
m_cmbVerftyCode.EnableWindow(false);
m_cmbVerftyCode.ShowWindow(SW_HIDE);
CStatic *tVergtyCode=NULL;
tVergtyCode =(CStatic *) GetDlgItem(IDC_stVertfyCode);
tVergtyCode->ShowWindow(SW_HIDE);
m_edValue.EnableWindow(false);
m_edStartAddr.EnableWindow(false);
m_edNum.EnableWindow(false);
m_cmbItem.EnableWindow(false);
m_cmbSationNo.EnableWindow(false);
}
}
/*
* 读多个寄存器控制操作
*/
void CVcSampleDlg::OnRdMultiWord()
{
// TODO: Add your control notification handler code here
/*
* 控制元件类型、输入框的有效性
*/
AddItem(1);
VwCrlComponet(1);
m_nOperIndex=1;
m_edNum.SetWindowText("125");
m_edValue.SetWindowText("");
}
/*
* 写单个线圈控制操作
*/
void CVcSampleDlg::OnWrtOneBit()
{
// TODO: Add your control notification handler code here
/*
* 控制元件类型、输入框的有效性
*/
AddItem(2);
VwCrlComponet(2);
m_nOperIndex=2;
}
/*
* 写多个线圈控制操作
*/
void CVcSampleDlg::OnWrtMultBit()
{
// TODO: Add your control notification handler code here
/*
* 控制元件类型、输入框的有效性
*/
AddItem(3);
VwCrlComponet(3);
m_nOperIndex=3;
m_edNum.SetWindowText("256");
}
/*
* 写单个寄存器控制操作
*/
void CVcSampleDlg::OnWrtOneWord()
{
// TODO: Add your control notification handler code here
/*
* 控制元件类型、输入框的有效性
*/
AddItem(4);
VwCrlComponet(4);
m_nOperIndex=4;
}
/*
* 写多个寄存器控制操作
*/
void CVcSampleDlg::OnWrtMultWord()
{
// TODO: Add your control notification handler code here
/*
* 控制元件类型、输入框的有效性
*/
AddItem(5);
VwCrlComponet(5);
m_nOperIndex=5;
m_edNum.SetWindowText("120");
}
/*
* 回送诊断校验控制操作
*/
void CVcSampleDlg::OnVerfityCode()
{
// TODO: Add your control notification handler code here
/*
* 控制元件类型、输入框的有效性
*/
AddItem(6);
VwCrlComponet(6);
m_nOperIndex=6;
}
/*
*控制输入框、按钮的有效性
*输入值:0、读多个线圈1、读多个寄存器2、写单个线圈3、写多个线圈4、写单个寄存器
5、写多个寄存器 6、回送诊断校验
*/
void CVcSampleDlg::VwCrlComponet(int operationID)
{
CStatic *tVergtyCode=NULL;//诊断码的显示框指针
m_edNum.SetWindowText("");//初始化元件的值
switch(operationID) {
case 0:
m_cmbVerftyCode.EnableWindow(false);
m_cmbVerftyCode.ShowWindow(SW_HIDE);
tVergtyCode =(CStatic *) GetDlgItem(IDC_stVertfyCode);
tVergtyCode->ShowWindow(SW_HIDE);
m_edValue.EnableWindow(false);
m_edStartAddr.EnableWindow(true);
m_edNum.EnableWindow(true);
m_cmbItem.EnableWindow(true);
m_cmbSationNo.EnableWindow(true);
m_btnOperation.SetWindowText("读");
break;
case 1:
m_cmbVerftyCode.EnableWindow(false);
m_cmbVerftyCode.ShowWindow(SW_HIDE);
tVergtyCode =(CStatic *) GetDlgItem(IDC_stVertfyCode);
tVergtyCode->ShowWindow(SW_HIDE);
m_edValue.EnableWindow(false);
m_edStartAddr.EnableWindow(true);
m_edNum.EnableWindow(true);
m_cmbItem.EnableWindow(true);
m_cmbSationNo.EnableWindow(true);
m_btnOperation.SetWindowText("读");
break;
case 2:
m_cmbVerftyCode.EnableWindow(false);
m_cmbVerftyCode.ShowWindow(SW_HIDE);
tVergtyCode =(CStatic *) GetDlgItem(IDC_stVertfyCode);
tVergtyCode->ShowWindow(SW_HIDE);
m_edValue.EnableWindow(true);
m_edStartAddr.EnableWindow(true);
m_edNum.EnableWindow(false);
m_edNum.SetWindowText("1");
m_cmbItem.EnableWindow(true);
m_cmbSationNo.EnableWindow(true);
m_btnOperation.SetWindowText("写入");
break;
case 3:
m_cmbVerftyCode.EnableWindow(false);
m_cmbVerftyCode.ShowWindow(SW_HIDE);
tVergtyCode =(CStatic *) GetDlgItem(IDC_stVertfyCode);
tVergtyCode->ShowWindow(SW_HIDE);
m_edValue.EnableWindow(true);
m_edStartAddr.EnableWindow(true);
m_edNum.EnableWindow(true);
m_cmbItem.EnableWindow(true);
m_cmbSationNo.EnableWindow(true);
m_btnOperation.SetWindowText("写入");
break;
case 4:
m_cmbVerftyCode.EnableWindow(false);
m_cmbVerftyCode.ShowWindow(SW_HIDE);
tVergtyCode =(CStatic *) GetDlgItem(IDC_stVertfyCode);
tVergtyCode->ShowWindow(SW_HIDE);
m_edValue.EnableWindow(true);
m_edStartAddr.EnableWindow(true);
m_edNum.EnableWindow(false);
m_edNum.SetWindowText("1");
m_cmbItem.EnableWindow(true);
m_cmbSationNo.EnableWindow(true);
m_btnOperation.SetWindowText("写入");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -