您現(xiàn)在的位置:
中國(guó)傳動(dòng)網(wǎng)
>
技術(shù)頻道
>
應(yīng)用方案
>
用歐姆龍PLC與上位機(jī)通信實(shí)現(xiàn)振動(dòng)磨的變頻控制
時(shí)間:2009-04-09 15:32:19來(lái)源:lihan


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