江 維,吳雨川,李紅軍
?
基于MFC的單片機(jī)上下位機(jī)通信控制系統(tǒng)設(shè)計(jì)
江 維,吳雨川,李紅軍
(武漢紡織大學(xué) 機(jī)械工程與自動(dòng)化學(xué)院,湖北 武漢 430200)
隨著現(xiàn)代信息技術(shù)的發(fā)展以及計(jì)算機(jī)的廣泛應(yīng)用,計(jì)算機(jī)與計(jì)算機(jī)、計(jì)算機(jī)與微處理器(MCU)等之間串口通信在數(shù)據(jù)采集、數(shù)據(jù)通信、故障檢測(cè)、工業(yè)監(jiān)控、實(shí)時(shí)控制系統(tǒng)等方面得到了廣泛應(yīng)用。本文以單片機(jī)為下位機(jī),PC為上位機(jī),利用可視化編程軟件Visual C++6.0 MFC設(shè)計(jì)了友好的人機(jī)交互界面實(shí)現(xiàn)了PC與單片機(jī)之間的數(shù)據(jù)通信,其編程模塊化、易于擴(kuò)展、通用性強(qiáng),適用于一般的工業(yè)控制系統(tǒng)。
MFC(微軟基礎(chǔ)類);單片機(jī);上位機(jī);通信控制
上位機(jī)[1-4]是指人可以直接發(fā)出操控命令的計(jì)算機(jī),一般是PC,屏幕上顯示各種信號(hào)變化(液壓,水位,溫度等)。下位機(jī)是直接控制設(shè)備獲取設(shè)備狀況的計(jì)算機(jī),一般是PLC/單片機(jī)之類的。上位機(jī)發(fā)出的命令首先給下位機(jī),下位機(jī)再根據(jù)此命令解釋成相應(yīng)時(shí)序信號(hào)直接控制相應(yīng)設(shè)備。下位機(jī)不時(shí)讀取設(shè)備狀態(tài)數(shù)據(jù)(一般為模擬量),轉(zhuǎn)換成數(shù)字信號(hào)反饋給上位機(jī)。這種以上位機(jī)控制下位機(jī)的控制系統(tǒng)為計(jì)算機(jī)遠(yuǎn)程控制提供了技術(shù)基礎(chǔ),是目前計(jì)算機(jī)通信控制的一個(gè)重要方面。
Matlab是Mathworks公司開(kāi)發(fā)的面向理論分析研究和工程設(shè)計(jì)的一套具有強(qiáng)大功能的軟件系統(tǒng)。Matlab不僅能解決控制系統(tǒng)中存在的大量數(shù)值計(jì)算和矩陣運(yùn)算,其編程也簡(jiǎn)單并集圖像、顯示、處理等于一身。從Matlab6.0版本開(kāi)始,其軟件增加了設(shè)備控制箱(instrument control toolbox),提供了對(duì)串口通信的支持。利用該工具箱的serial類能可靠地進(jìn)行串口通信??衫脝纹瑱C(jī)和Matlab的優(yōu)點(diǎn),利用Matlab GUI圖形用戶界面和設(shè)計(jì)友好的可視化上位機(jī)平臺(tái)實(shí)現(xiàn)與PC串行通信及數(shù)據(jù)實(shí)時(shí)處理的方法。對(duì)數(shù)據(jù)的處理采用Matlab也能更好反映測(cè)試的性能,減少勞動(dòng)強(qiáng)度,測(cè)試的結(jié)果十分明顯,是有效的實(shí)時(shí)數(shù)據(jù)采集和處理方法。
LabVIEW是一種程序開(kāi)發(fā)環(huán)境,由美國(guó)國(guó)家儀器(NI)公司研制開(kāi)發(fā)的,類似于C和BASIC開(kāi)發(fā)環(huán)境,但是LabVIEW與其他計(jì)算機(jī)語(yǔ)言的顯著區(qū)別是:其他計(jì)算機(jī)語(yǔ)言都是采用基于文本的語(yǔ)言產(chǎn)生代碼,而LabVIEW使用的是圖形化編輯語(yǔ)言G編寫程序,產(chǎn)生的程序是框圖的形式。LabVIEW應(yīng)用于數(shù)據(jù)采集與控制、信號(hào)分析等方面,它為不熟悉文本語(yǔ)言編程的非計(jì)算機(jī)專業(yè)從業(yè)人員在測(cè)控領(lǐng)域建立計(jì)算機(jī)儀器系統(tǒng)——虛擬儀器,提供了一個(gè)便捷、輕松的圖形化設(shè)計(jì)環(huán)境。由于其靈活、簡(jiǎn)單易用、開(kāi)發(fā)效率高等特點(diǎn),正逐漸成為科技工作者進(jìn)行儀器應(yīng)用與開(kāi)發(fā)的得力工具。如果采用單片機(jī)作為前端數(shù)據(jù)采集,通過(guò)串口進(jìn)行與LabVIEW的數(shù)據(jù)通信,就可實(shí)現(xiàn)低成本、靈活方便、接口簡(jiǎn)單的數(shù)據(jù)采集系統(tǒng)。這對(duì)于許多信號(hào)頻率不是太高的場(chǎng)合,此方案無(wú)疑非常便利。利用LabVIEW對(duì)單片機(jī)的數(shù)據(jù)進(jìn)行分析處理,并通過(guò)串口實(shí)現(xiàn)二者之間的數(shù)據(jù)交換、經(jīng)濟(jì)實(shí)用的數(shù)據(jù)采集及分析系統(tǒng)。
Visual C++是一種由微軟公司開(kāi)發(fā)的包含協(xié)助開(kāi)發(fā)環(huán)境的事件驅(qū)動(dòng)編程語(yǔ)言,VC擁有圖形用戶界面(GUI)和快速應(yīng)用程序開(kāi)發(fā)(RAD)系統(tǒng),程序員可以輕松的使用VC提供的組件快速建立一個(gè)應(yīng)用程序。MSComm是Windows下串行通信編程控件,它為應(yīng)用程序提供了通過(guò)串行接口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。MSComm控件[5-6]在串口編程時(shí)非常方便。開(kāi)發(fā)人員不必花時(shí)間去了解較為復(fù)雜的API函數(shù),而且在Visual C++等語(yǔ)言中經(jīng)常使用。
用Matlab設(shè)計(jì)調(diào)試平臺(tái),所編寫的軟件不能脫離Matlab編程環(huán)境在Windows平臺(tái)下直接運(yùn)行,對(duì)上位機(jī)(PC機(jī))的配置要求比較高,代碼執(zhí)行效率較低,界面編寫功能簡(jiǎn)單,不能達(dá)到某些用戶的需求。LabVIEW使用的是圖形化環(huán)境,對(duì)數(shù)據(jù)文檔的顯示及處理方面效率不高,而且對(duì)上位機(jī)(PC機(jī))的配置要求比較高,以及考慮到現(xiàn)階段知識(shí)的儲(chǔ)備情況,所以不選擇這種方案。綜合上面三種方案,本課題選擇的是第三種方案,即基于VC++(Visual C++)開(kāi)發(fā)的調(diào)試平臺(tái),它界面明晰、操作方便,同時(shí)對(duì)于后期的擴(kuò)展推廣也很容易實(shí)現(xiàn)。
以單片機(jī)為下位機(jī)設(shè)計(jì)串口接收上位機(jī)發(fā)送來(lái)的數(shù)據(jù),其中單片機(jī)P1口接LED,串行通信波特率設(shè)定為9600BPS,在KEILC中編寫的C語(yǔ)言程序如下:
#include
unsigned char flag;
unsigned char w,i;
unsigned int j;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
PCON=0x00;
EA=1;
ES=1;
while(1);
}
void ser() interrupt 4
{
RI=0;
flag=SBUF;
if(flag=='1')
{
w=0xfe;
for(i=0;i<8;i++)
{
w=~((~w)<
P1=w;
for(j=0;j<10000;j++);
}
}
else if(flag=='2')
{
w=0x7f;
for(i=0;i<8;i++)
{
w=~((~w)>>i);
P1=w;
for(j=0;j<10000;j++);
}
}
else if(flag=='3')
{
P1=0xff;
for(j=0;j<10000;j++);
P1=0x00;
for(j=0;j<10000;j++);
}
}
圖1 基于VC++設(shè)計(jì)的通信控制界面
(1)在Visual C++6.0中新建工程添加串口通信控件設(shè)計(jì)上位機(jī)通信控制界面如圖1所示:
(2)添加串口初始化代碼:
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(2); //選擇com2
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打開(kāi)串口
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,無(wú)校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位
m_ctrlComm.SetInputMode(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ù)
(3)分別為信號(hào)1和信號(hào)2兩個(gè)按鈕控件添加事件處理函數(shù):
char i= '1';
CString str;
str.Format("%c",i);
m_ctrlComm.SetOutput(COleVariant(str));
char i= '2';
CString str;
str.Format("%c",i);
m_ctrlComm.SetOutput(COleVariant(str));
(4)聯(lián)機(jī)調(diào)試現(xiàn)象:將單片機(jī)通過(guò)串口線和PC相連,把下位機(jī)串口通信程序下載到單片機(jī)中,用鼠標(biāo)在PC上分別點(diǎn)擊界面上的信號(hào)1信號(hào)2兩個(gè)按鈕控件,可以觀察到單片機(jī)P1口上的8個(gè)LED順序流水燈、反序流水燈現(xiàn)象,編輯框可以接收下位機(jī)發(fā)過(guò)來(lái)的數(shù)據(jù),清空接收區(qū)按鈕可以將接收區(qū)的數(shù)據(jù)清空,點(diǎn)擊退去系統(tǒng)按鈕控件可以退出控制界面。
針對(duì)本文的設(shè)計(jì)要求,較好的完成了方案的選擇和任務(wù),有效的實(shí)現(xiàn)了上位機(jī)和下位機(jī)的通信,設(shè)計(jì)出了友好的可視化界面和上位機(jī)下位機(jī)編程模塊,通用性強(qiáng),推廣價(jià)值高,可運(yùn)用于實(shí)際的工業(yè)控制系統(tǒng)之中。
[1] 樊新乾,潘存海.基于Modbus/TCP協(xié)議臺(tái)達(dá)PLC與上位機(jī)VB軟件之間的通信[J].制造業(yè)自動(dòng)化,2012,34(20):33-35.
[2] 陸嘉,孟文,李常輝.基于VB的PLC與上位機(jī)通信軟件的設(shè)計(jì)[J].自動(dòng)化技術(shù)與應(yīng)用,2007,26(9):79-81.
[3] 李志宏,杜娟,張平.基于VB的PLC和上位機(jī)通信的實(shí)現(xiàn)方法[J].控制工程,2002,9(1):35-37.
[4] 胡昊,劉建華,侯云輝.基于冗余S7-400H的通信系統(tǒng)在熱媒爐項(xiàng)目中的應(yīng)用[J].化工自動(dòng)化及儀表,2017,44(8):774-777.
[5] 張素萍,李朝強(qiáng).基于MSComm和隊(duì)列技術(shù)的LabVIEW數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].國(guó)外電子測(cè)量技術(shù),2016,35(6):86-91.
[6] 龔建偉.VisualC++/TurboC串口通信編程實(shí)踐(第2版)[M].北京:電子工業(yè)出版社,2007.9.
Design of Communication Control System for Upper and Lower SCM based on MFC
JIANG Wei, WU Yu-chuan, LI Hong-jun
(School of Mechanical Engineering and Automation, Wuhan Textile University, Wuhan Hubei 430200, China)
With the development of modern information technology and the wide application of computers, serial communication between computers and computers and computers and microprocessors (MCUs) have been used widely in data acquisition, data communication, fault detection, industrial monitoring, real-time control systems, etc. In this paper, the single-chip microcomputer is used as the lower computer, and the PC is the upper computer. The visual programming software Visual C++6.0 MFC is used to design a friendly human-computer interaction interface to realize the data communication between the PC and the single-chip microcomputer. The soft programme is modular, easy to be expanded and strong universal, which is suitable for general industrial control systems.
Microsoft Foundation Class; SCM; Host computer; Communication control
江維(1983-),男,講師,博士,研究方向:智能控制與嵌入式系統(tǒng).
2018年武漢紡織大學(xué)教學(xué)研究項(xiàng)目(2018JY019).
TP273
A
2095-414X(2019)02-0077-04