江 維,吳雨川,李紅軍
?
基于MFC的單片機上下位機通信控制系統設計
江 維,吳雨川,李紅軍
(武漢紡織大學 機械工程與自動化學院,湖北 武漢 430200)
隨著現代信息技術的發展以及計算機的廣泛應用,計算機與計算機、計算機與微處理器(MCU)等之間串口通信在數據采集、數據通信、故障檢測、工業監控、實時控制系統等方面得到了廣泛應用。本文以單片機為下位機,PC為上位機,利用可視化編程軟件Visual C++6.0 MFC設計了友好的人機交互界面實現了PC與單片機之間的數據通信,其編程模塊化、易于擴展、通用性強,適用于一般的工業控制系統。
MFC(微軟基礎類);單片機;上位機;通信控制
上位機[1-4]是指人可以直接發出操控命令的計算機,一般是PC,屏幕上顯示各種信號變化(液壓,水位,溫度等)。下位機是直接控制設備獲取設備狀況的計算機,一般是PLC/單片機之類的。上位機發出的命令首先給下位機,下位機再根據此命令解釋成相應時序信號直接控制相應設備。下位機不時讀取設備狀態數據(一般為模擬量),轉換成數字信號反饋給上位機。這種以上位機控制下位機的控制系統為計算機遠程控制提供了技術基礎,是目前計算機通信控制的一個重要方面。
Matlab是Mathworks公司開發的面向理論分析研究和工程設計的一套具有強大功能的軟件系統。Matlab不僅能解決控制系統中存在的大量數值計算和矩陣運算,其編程也簡單并集圖像、顯示、處理等于一身。從Matlab6.0版本開始,其軟件增加了設備控制箱(instrument control toolbox),提供了對串口通信的支持。利用該工具箱的serial類能可靠地進行串口通信。可利用單片機和Matlab的優點,利用Matlab GUI圖形用戶界面和設計友好的可視化上位機平臺實現與PC串行通信及數據實時處理的方法。對數據的處理采用Matlab也能更好反映測試的性能,減少勞動強度,測試的結果十分明顯,是有效的實時數據采集和處理方法。
LabVIEW是一種程序開發環境,由美國國家儀器(NI)公司研制開發的,類似于C和BASIC開發環境,但是LabVIEW與其他計算機語言的顯著區別是:其他計算機語言都是采用基于文本的語言產生代碼,而LabVIEW使用的是圖形化編輯語言G編寫程序,產生的程序是框圖的形式。LabVIEW應用于數據采集與控制、信號分析等方面,它為不熟悉文本語言編程的非計算機專業從業人員在測控領域建立計算機儀器系統——虛擬儀器,提供了一個便捷、輕松的圖形化設計環境。由于其靈活、簡單易用、開發效率高等特點,正逐漸成為科技工作者進行儀器應用與開發的得力工具。如果采用單片機作為前端數據采集,通過串口進行與LabVIEW的數據通信,就可實現低成本、靈活方便、接口簡單的數據采集系統。這對于許多信號頻率不是太高的場合,此方案無疑非常便利。利用LabVIEW對單片機的數據進行分析處理,并通過串口實現二者之間的數據交換、經濟實用的數據采集及分析系統。
Visual C++是一種由微軟公司開發的包含協助開發環境的事件驅動編程語言,VC擁有圖形用戶界面(GUI)和快速應用程序開發(RAD)系統,程序員可以輕松的使用VC提供的組件快速建立一個應用程序。MSComm是Windows下串行通信編程控件,它為應用程序提供了通過串行接口收發數據的簡便方法。MSComm控件[5-6]在串口編程時非常方便。開發人員不必花時間去了解較為復雜的API函數,而且在Visual C++等語言中經常使用。
用Matlab設計調試平臺,所編寫的軟件不能脫離Matlab編程環境在Windows平臺下直接運行,對上位機(PC機)的配置要求比較高,代碼執行效率較低,界面編寫功能簡單,不能達到某些用戶的需求。LabVIEW使用的是圖形化環境,對數據文檔的顯示及處理方面效率不高,而且對上位機(PC機)的配置要求比較高,以及考慮到現階段知識的儲備情況,所以不選擇這種方案。綜合上面三種方案,本課題選擇的是第三種方案,即基于VC++(Visual C++)開發的調試平臺,它界面明晰、操作方便,同時對于后期的擴展推廣也很容易實現。
以單片機為下位機設計串口接收上位機發送來的數據,其中單片機P1口接LED,串行通信波特率設定為9600BPS,在KEILC中編寫的C語言程序如下:
#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++設計的通信控制界面
(1)在Visual C++6.0中新建工程添加串口通信控件設計上位機通信控制界面如圖1所示:
(2)添加串口初始化代碼:
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(2); //選擇com2
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打開串口
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,無校驗,8個數據位,1個停止位
m_ctrlComm.SetInputMode(1); //1:表示以二進制方式檢取數據
m_ctrlComm.SetRThreshold(1); //參數1表示每當串口接收緩沖區中有多于或等于1個字符時將引發一個接收數據的OnComm事件
m_ctrlComm.SetInputLen(0); //設置當前接收區數據長度為0
m_ctrlComm.GetInput();//先預讀緩沖區以清除殘留數據
(3)分別為信號1和信號2兩個按鈕控件添加事件處理函數:
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)聯機調試現象:將單片機通過串口線和PC相連,把下位機串口通信程序下載到單片機中,用鼠標在PC上分別點擊界面上的信號1信號2兩個按鈕控件,可以觀察到單片機P1口上的8個LED順序流水燈、反序流水燈現象,編輯框可以接收下位機發過來的數據,清空接收區按鈕可以將接收區的數據清空,點擊退去系統按鈕控件可以退出控制界面。
針對本文的設計要求,較好的完成了方案的選擇和任務,有效的實現了上位機和下位機的通信,設計出了友好的可視化界面和上位機下位機編程模塊,通用性強,推廣價值高,可運用于實際的工業控制系統之中。
[1] 樊新乾,潘存海.基于Modbus/TCP協議臺達PLC與上位機VB軟件之間的通信[J].制造業自動化,2012,34(20):33-35.
[2] 陸嘉,孟文,李常輝.基于VB的PLC與上位機通信軟件的設計[J].自動化技術與應用,2007,26(9):79-81.
[3] 李志宏,杜娟,張平.基于VB的PLC和上位機通信的實現方法[J].控制工程,2002,9(1):35-37.
[4] 胡昊,劉建華,侯云輝.基于冗余S7-400H的通信系統在熱媒爐項目中的應用[J].化工自動化及儀表,2017,44(8):774-777.
[5] 張素萍,李朝強.基于MSComm和隊列技術的LabVIEW數據采集系統設計[J].國外電子測量技術,2016,35(6):86-91.
[6] 龔建偉.VisualC++/TurboC串口通信編程實踐(第2版)[M].北京:電子工業出版社,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-),男,講師,博士,研究方向:智能控制與嵌入式系統.
2018年武漢紡織大學教學研究項目(2018JY019).
TP273
A
2095-414X(2019)02-0077-04