开发真空测量与控制系统

真空测量与检漏 刘鼎鑫 上海玉川真空技术有限公司

开发真空测量与控制系统
VC++下用MSComm控件实现PG500真空计与PC机的通讯

0、引言

  伤害玉川机械泵有现技木厂家面世的PG500+DM100AC机械泵计产品的是可和PC机、PLC、单面机基本操作系统、组态工具--组态王等上位机软件参与移动通迅的。文中创建PG500机械泵计与PC机的移动通迅,可变现机械泵计的工作压力差值呈现、远程电脑基本操作、状况保持、信息加工等技能。文中详细介绍了在源于对活框的MFC利用过程中利用MSComm控件编程序变现PG500机械泵计串口与PC机串口的保持编号,并建立了检测信息的信息库加工(如将机械泵计工作压力差各值信息在Excel申请表中级)。

1、硬件连接

  PG500高压气计的通信音频usb接口为RS-485串行音频usb接口,而PC飞机上为RS-232-C串口,之所以先期工作恢复RS-485与RS-232-C的转移器,相连接途径如右图

2、软件代码

  这儿华祥苑茗茶小编汇报一点用MSComm控件实现串口和程序编写的大多操作步骤:
  • 在建立的工程中插入MSComm控件
  • 添加MSComm控件ID的控制变量或对象
  • 对串口进行初始化,设置MSComm控件的属性
  • 添加串口事件的消息处理函数OnComm()函数,在函数中根据应用需要,编写数据  处理代码
  • 编写串口发送等其他代码
  • 关闭串口
2.1、加入建设工程并含有MSComm控件   撰写应当使用VC 6.0,撰写另一个基本概念情景情景情景对话框的MFC适用编译小程序:PG500。在情景情景情景对话框中撰写沟通控件,若Control辅助软件栏中替代该控件,可根据页面Project --> Add to Project --> Components and Control加入才可以,再将该控件从辅助软件箱中拉到情景情景情景对话框中。这时,你只需要注意控件打造的对 Windows 无线通讯动力编译小程序的 API 指数函数的模块。也就是说,只需要设立和侵入MSComm控件的特性和行为。 2.2、一开始化串口:软件设置MSComm控件的特质

  在CPG500Dlg::OnInitDialog()函数中写入对串口的初始化语句:
   //串口初始化
   m_DM100Comm.SetCommPort(1);//选择COM1
   m_DM100Comm.SetInputMode(1);//输入方式为二进制方式
   m_DM100Comm.SetInBufferSize(1024);//设置输入缓冲区大小
    m_DM100Comm.SetOutBufferSize(512);//设置输出缓冲区大小
   m_DM100Comm.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位
   if (!m_DM100Comm.GetPortOpen())//如果串口没有打开则打开
    m_DM100Comm.SetPortOpen(TRUE);//打开串口
    else
     AfxMessageBox("串口已打开或不存在");
   m_DM100Comm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
   m_DM100Comm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读
   m_DM100Comm.GetInput();//先预读缓冲区以清除残留数据

2.3、移除串口时件讯息清理变量   MSComm控件般用新闻驱动器方式来从串口收到动态数据统计,也可是传闻处置,当串口一会儿间引发时,小程序加载传闻数学函数来处置动态数据统计。

  void CDM100Dlg::OnComm()
  {
   // TODO: Add your control notification handler code here
   VARIANT m_input;
   COleVariant nyVar;
   char* str;
   if(m_DM100Comm.GetCommEvent()==2)//事件值为2表示接收缓冲区
   {
    int l = m_DM100Comm.GetInBufferCount();
    if(l > 0)
    {
     nyVar.Attach(m_DM100Comm.GetInput());//读缓冲区
     m_input=nyVar;//VARIANT型变量转换为ColeSafeArray型变量
     str = (char*)(unsigned char*)m_input.parray->pvData;//字符型
    }
    str[l]='\0';
      if(str[0]==':')
       {
       m_zstrtmp=_T("");
      }
    m_zstrtmp+=(const char*)str;
    if(str[l-1]==0x0D)
    {
     if (m_bShowData)//已发送数据
     {
      m_strtmp=m_zstrtmp;
         m_strfinal=GetShowMode();//显示压力值的单位以及压力数据显示方式
      if (m_strtmp.Mid(3,2)=="1D")//
      {
       m_nCount1++;
       m_strRecv1=m_strfinal;
       if (m_bExcelSave)//存入Excel表格的数据
       {
        m_time=m_time.GetCurrentTime();
        m_SampleArray.Add(m_time.Format("%H:%M:%S"));
        m_SampleArray.Add(m_strRecv1);
       }
       UpdateData(FALSE);
      }
      else if (m_strtmp.Mid(3,2)=="2D")
       m_strRecv2=m_strfinal;
      else if (m_strtmp.Mid(3,2)=="1R") 
      m_strExpo1=m_strfinal;
      else if (m_strtmp.Mid(3,2)=="2R")
       m_strExpo2=m_strfinal;
      else if (m_strtmp.Mid(3,2)=="3R")
       m_strExpo3=m_strfinal;
           UpdateData(FALSE);
     }
     m_zstrtmp.Empty();
    }
   } 
  }

2.4、发邮箱数值   为发邮箱按钮开关增添一家单击积极响应方程,增添以下几点编码   void CDM100Dlg::OnCheckCycleSend1() //向PG500性能的DM100表示屏1渠道循环往复传输信息

{
 // TODO: Add your control notification handler code here
 if (m_bAutoSend2)
 {
  m_ctrlCycleSend2.SetCheck(0);
  KillTimer(2);
 }
 if (m_ctrlCycleSend1.GetCheck())
 {
  m_bAutoSend1=TRUE;
 ((CButton*)GetDlgItem(IDC_BTN_PORT_OPEN))->EnableWindow(FALSE);
  SetTimer(1,m_nCycleTime1,NULL);
 }
 else
 {
  m_bAutoSend1=FALSE;
  ((CButton*)GetDlgItem(IDC_BTN_PORT_OPEN))->EnableWindow();
  KillTimer(1);
 }
}
void CDM100Dlg::OnCheckCycleSend2() //向PG500配置的DM100显示屏2通道循环发送数据
{
 // TODO: Add your control notification handler code here
 if (m_bAutoSend1)
 {
  m_ctrlCycleSend1.SetCheck(0);
  KillTimer(1);
 }
 if (m_ctrlCycleSend2.GetCheck())
 {
  m_bAutoSend2=TRUE;
 ((CButton*)GetDlgItem(IDC_BTN_PORT_OPEN))->EnableWindow(FALSE);
  SetTimer(2,m_nCycleTime2,NULL);
 }
 else
 {
  m_bAutoSend2=FALSE;
  ((CButton*)GetDlgItem(IDC_BTN_PORT_OPEN))->EnableWindow();
  KillTimer(2);
 }
}
定时器消息处理函数代码如下:
void CDM100Dlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
switch (nIDEvent)
 {
 case 1:
  OnBtnShow1();//1通道发送一次数据
  break;
 case 2:
  OnBtnShow2();//2通道发送一次数据
  break;
 case 3:
  SetWindowText(m_strCaption.Mid(0,13+m_ncaption));
  if(m_ncaption<(m_strCaption.GetLength()+1))
      m_ncaption++;
  else
   m_ncaption=0;
  break;
 default:
  break;
 }
 CDialog::OnTimer(nIDEvent);
}

3、结束语

  使用以上代码可以通过PC机实现PG500真空计的远程设置、压力显示、状态控制、数据处理等过程。

  注:往上二维码为PG500正空计与PC机通讯网的树干二维码,另有大这部分方程扮演致使图片文字受限在文中中未描写。 正空测量方法免费软件建设可保持联系仇小姐姐,固定电话:021-61526449,分机号8002