時間:2009-04-09 15:32:19來源:lihan


 首先建立一個基于對話框的MFC應用程序SCommTest,支持ActiveX控件,電話形狀的控件是在系統中注冊過的MicrosoftCommunications Control, version 6.0,接受缺省的選項。
1.打開串口設置串口參數
    在主對話框CSCommTestDlg::OnInitDialog()中打開串口,加入如下代碼:
    if(m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(FALSE);
    m_ctrlComm.SetCommPort(1); //選擇com1
    i f ( ! m _ c t r l C o m m . G e t P o r t O p e n ( ) ) m _ c t r l C o m m .
SetPortOpen(TRUE);//打開串口
    else
    AfxMessageBox("cannot open serial port");
    m_ctrlComm.SetSettings("9600,E,7,2"); //波特率9600,偶校驗,7個數據位,2個停止位m_ctrlComm.SetInputModel(1); //1:表示以二進制方式檢取數據m_ctrlComm.SetRThreshold(1);
    //參數1表示每當串口接收緩沖區中有多于或等于1個字符時將引發一個接收數據的OnComm事件
    m_ctrlComm.SetInputLen(0); //設置當前接收區數據長度為0
    m_ctrlComm.GetInput();//先預讀緩沖區以清除殘留數據
2.發送數據
    為發送按鈕添加一個單擊消息BN_CLICKED處理函數,選擇IDC_BUTTON_MANUALSEND,添加OnButtonManualsend()函數,并在函數中添加如下代碼:
    UpdateData(TRUE); //讀取編輯框內容
    SendData(m_strTXData1,6);
    // m_strTXData1表示發送速度命令的具體數值,6表示寫數
據的地址DM0006
    Sleep(100);
    SendData(m_strTXData2,12); //m_strTXData1表示發送時間命令的具體數值,12表示寫數據的地址DM0012
3.發送命令
    按照命令格式,本課題主要發送兩個WD命令:
    (1)數據采用十進制發送,向DM0006中寫入速度指令;
    (2)數據采用十進制發送,向DM0012中寫入時間指令。部分程序如下:
    Void CSCommTestDlg::SendData(int m_TobeSend,intm_address)
    { CByteArray Array;
    unsigned char auchMsg[45]={0}
    auchMsg[0]=64; // 起始標志符
    auchMsg[1]=0x0; //節點號
    auchMsg[2]=0x0; auchMsg[3]=‘W‘; //命令符
    auchMsg[4]=‘D‘;
    auchMsg[5]=m_address/1000;
    auchMsg[6]=(m_address%1000)/100;
    auchMsg[7]=(m_address%100)/10;
    auchMsg[8]=m_address%10;
    auchMsg[9]=m_TobeSend/1000;
    auchMsg[10]=(m_TobeSend%1000)/10;
    auchMsg[11]=(m_TobeSend%100)/10;
    auchMsg[12]=m_TobeSend%10;
    LRC(auchMsg,13);
    //auchMsg[13] ,auchMsg[14] ,保存FCS值
    auchMsg[15]=‘*‘; //命令結束符
    auchMsg[16]=13;
    Array.RemoveAll();
    for (Count=0;Count<17;Count++)
    Array.Add(auchMsg[Count]);
    m _ c t r l C o m m . S e t O u t p u t ( C O l e Va r i a n t ( A r r a y ) ) ;
4.計算校驗碼函數
    unsigned char uchLRC = 0 ; 初始值設定
    while (usDataLen——)
    {uchLRC ︿= *auchMsg++; }
    unsigned char high=0xF0;
    //high為校驗碼的高位
    unsigned char low=0x0F;
    //low為校驗碼的低位
    high&=uchLRC;
    low&=uchLRC;
    high>>=4;右移四位
    if(high<=9)
    high=high+48;
    else
    high=high+55;
    if(low<=9)
    low=low+48;
    else
    low=low+55;
    *auchMsg++=high;
    *auchMsg++=low;
四.結束語
    此程序在VC++6.0中運行通過,并成功應用于振動磨的控制中。該系統采用OMRON XA40DR-A PLC與上位機連接組成控制系統,上位機通過串行口向PLC發出寫命令及數據,PLC接受數據后,通過D/A轉換模塊,將模擬量發給變頻器,從而實現了振動磨振動速度和時間的控制。
參考文獻
[1]OMRON公司.CP1H操作手冊.2005
[2]萬曼影.視窗環境下歐姆龍PLC的實時通信.微處理
機.2004(6)
[3]何華東,趙喜榮.PLC與上位計算機的串行通信程序設
計.機電工程.2002(6)
[4]OMRON公司.CPM編程手冊.2003
基金項目:國家自然科學基金資助項目(編號:50575147)
作者簡介:蘇丹(1982-),女,在讀碩士;
王樹林(1951—),男,教授,博士生導師。
    首先建立一個基于對話框的MFC應用程序SCommTest,支持ActiveX控件,電話形狀的控件是在系統中注冊過的MicrosoftCommunications Control, version 6.0,接受缺省的選項。
1.打開串口設置串口參數
    在主對話框CSCommTestDlg::OnInitDialog()中打開串口,加入如下代碼:
    if(m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(FALSE);
    m_ctrlComm.SetCommPort(1); //選擇com1
    i f ( ! m _ c t r l C o m m . G e t P o r t O p e n ( ) ) m _ c t r l C o m m .
SetPortOpen(TRUE);//打開串口
    else
    AfxMessageBox("cannot open serial port");
    m_ctrlComm.SetSettings("9600,E,7,2"); //波特率9600,偶校驗,7個數據位,2個停止位m_ctrlComm.SetInputModel(1); //1:表示以二進制方式檢取數據m_ctrlComm.SetRThreshold(1);
    //參數1表示每當串口接收緩沖區中有多于或等于1個字符時將引發一個接收數據的OnComm事件
    m_ctrlComm.SetInputLen(0); //設置當前接收區數據長度為0
    m_ctrlComm.GetInput();//先預讀緩沖區以清除殘留數據
2.發送數據
    為發送按鈕添加一個單擊消息BN_CLICKED處理函數,選擇IDC_BUTTON_MANUALSEND,添加OnButtonManualsend()函數,并在函數中添加如下代碼:
    UpdateData(TRUE); //讀取編輯框內容
    SendData(m_strTXData1,6);
    // m_strTXData1表示發送速度命令的具體數值,6表示寫數
據的地址DM0006
    Sleep(100);
    SendData(m_strTXData2,12); //m_strTXData1表示發送時間命令的具體數值,12表示寫數據的地址DM0012
3.發送命令
    按照命令格式,本課題主要發送兩個WD命令:
    (1)數據采用十進制發送,向DM0006中寫入速度指令;
    (2)數據采用十進制發送,向DM0012中寫入時間指令。部分程序如下:
    Void CSCommTestDlg::SendData(int m_TobeSend,intm_address)
    { CByteArray Array;
    unsigned char auchMsg[45]={0}
    auchMsg[0]=64; // 起始標志符
    auchMsg[1]=0x0; //節點號
    auchMsg[2]=0x0; auchMsg[3]=‘W‘; //命令符
    auchMsg[4]=‘D‘;
    auchMsg[5]=m_address/1000;
    auchMsg[6]=(m_address%1000)/100;
    auchMsg[7]=(m_address%100)/10;
    auchMsg[8]=m_address%10;
    auchMsg[9]=m_TobeSend/1000;
    auchMsg[10]=(m_TobeSend%1000)/10;
    auchMsg[11]=(m_TobeSend%100)/10;
    auchMsg[12]=m_TobeSend%10;
    LRC(auchMsg,13);
    //auchMsg[13] ,auchMsg[14] ,保存FCS值
    auchMsg[15]=‘*‘; //命令結束符
    auchMsg[16]=13;
    Array.RemoveAll();
    for (Count=0;Count<17;Count++)
    Array.Add(auchMsg[Count]);
    m _ c t r l C o m m . S e t O u t p u t ( C O l e Va r i a n t ( A r r a y ) ) ;
4.計算校驗碼函數
    unsigned char uchLRC = 0 ; 初始值設定
    while (usDataLen——)
    {uchLRC ︿= *auchMsg++; }
    unsigned char high=0xF0;
    //high為校驗碼的高位
    unsigned char low=0x0F;
    //low為校驗碼的低位
    high&=uchLRC;
    low&=uchLRC;
    high>>=4;右移四位
    if(high<=9)
    high=high+48;
    else
    high=high+55;
    if(low<=9)
    low=low+48;
    else
    low=low+55;
    *auchMsg++=high;
    *auchMsg++=low;
四.結束語
    此程序在VC++6.0中運行通過,并成功應用于振動磨的控制中。該系統采用OMRON XA40DR-A PLC與上位機連接組成控制系統,上位機通過串行口向PLC發出寫命令及數據,PLC接受數據后,通過D/A轉換模塊,將模擬量發給變頻器,從而實現了振動磨振動速度和時間的控制。
參考文獻
[1]OMRON公司.CP1H操作手冊.2005
[2]萬曼影.視窗環境下歐姆龍PLC的實時通信.微處理
機.2004(6)
[3]何華東,趙喜榮.PLC與上位計算機的串行通信程序設
計.機電工程.2002(6)
[4]OMRON公司.CPM編程手冊.2003
基金項目:國家自然科學基金資助項目(編號:50575147)
作者簡介:蘇丹(1982-),女,在讀碩士;
王樹林(1951—),男,教授,博士生導師。標簽:
                                 
                            
上一篇:油液污染度檢測儀動態校準試...
傳動網版權與免責聲明:凡本網注明[來源:傳動網]的所有文字、圖片、音視和視頻文件,版權均為傳動網(www.cdcst56.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-10-31
2025-10-22
2025-10-17
2025-10-11
2025-10-09
2025-09-23