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


首先建立一個基于對話框的MFC應(yīng)用程序SCommTest,支持ActiveX控件,電話形狀的控件是在系統(tǒng)中注冊過的MicrosoftCommunications Control, version 6.0,接受缺省的選項。
1.打開串口設(shè)置串口參數(shù)
在主對話框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個數(shù)據(jù)位,2個停止位m_ctrlComm.SetInputModel(1); //1:表示以二進制方式檢取數(shù)據(jù)m_ctrlComm.SetRThreshold(1);
//參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個字符時將引發(fā)一個接收數(shù)據(jù)的OnComm事件
m_ctrlComm.SetInputLen(0); //設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0
m_ctrlComm.GetInput();//先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)
2.發(fā)送數(shù)據(jù)
為發(fā)送按鈕添加一個單擊消息BN_CLICKED處理函數(shù),選擇IDC_BUTTON_MANUALSEND,添加OnButtonManualsend()函數(shù),并在函數(shù)中添加如下代碼:
UpdateData(TRUE); //讀取編輯框內(nèi)容
SendData(m_strTXData1,6);
// m_strTXData1表示發(fā)送速度命令的具體數(shù)值,6表示寫數(shù)
據(jù)的地址DM0006
Sleep(100);
SendData(m_strTXData2,12); //m_strTXData1表示發(fā)送時間命令的具體數(shù)值,12表示寫數(shù)據(jù)的地址DM0012
3.發(fā)送命令
按照命令格式,本課題主要發(fā)送兩個WD命令:
(1)數(shù)據(jù)采用十進制發(fā)送,向DM0006中寫入速度指令;
(2)數(shù)據(jù)采用十進制發(fā)送,向DM0012中寫入時間指令。部分程序如下:
Void CSCommTestDlg::SendData(int m_TobeSend,intm_address)
{ CByteArray Array;
unsigned char auchMsg[45]={0}
auchMsg[0]=64; // 起始標(biāo)志符
auchMsg[1]=0x0; //節(jié)點號
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]=‘*‘; //命令結(jié)束符
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.計算校驗碼函數(shù)
unsigned char uchLRC = 0 ; 初始值設(shè)定
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;
四.結(jié)束語
此程序在VC++6.0中運行通過,并成功應(yīng)用于振動磨的控制中。該系統(tǒng)采用OMRON XA40DR-A PLC與上位機連接組成控制系統(tǒng),上位機通過串行口向PLC發(fā)出寫命令及數(shù)據(jù),PLC接受數(shù)據(jù)后,通過D/A轉(zhuǎn)換模塊,將模擬量發(fā)給變頻器,從而實現(xiàn)了振動磨振動速度和時間的控制。
參考文獻
[1]OMRON公司.CP1H操作手冊.2005
[2]萬曼影.視窗環(huán)境下歐姆龍PLC的實時通信.微處理
機.2004(6)
[3]何華東,趙喜榮.PLC與上位計算機的串行通信程序設(shè)
計.機電工程.2002(6)
[4]OMRON公司.CPM編程手冊.2003
基金項目:國家自然科學(xué)基金資助項目(編號:50575147)
作者簡介:蘇丹(1982-),女,在讀碩士;
王樹林(1951—),男,教授,博士生導(dǎo)師。標(biāo)簽:
傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動網(wǎng)(surachana.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>2025-10-31
2025-10-22
2025-10-17
2025-10-11
2025-10-09
2025-09-23