熟女人妻水多爽中文字幕,国产精品鲁鲁鲁,隔壁的少妇2做爰韩国电影,亚洲最大中文字幕无码网站

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 基于VC++和MFC的上位機與PLC的通訊系統

基于VC++和MFC的上位機與PLC的通訊系統

時間:2008-08-25 10:05:00來源:ronggang

導語:?用VC++和MFC開發的上位機和PLC的通訊系統,給出了系統的通訊原理和系統的軟件設計方法。實踐證明整個系統運行穩定,實用性和可擴展性強

摘 要:本文介紹了用VC++和MFC開發的上位機和PLC的通訊系統,給出了系統的通訊原理和系統的軟件設計方法。實踐證明整個系統運行穩定,實用性和可擴展性強。

關鍵詞:PLC VC++ MFC 通訊模式

1 概述

PLC(Programmable Logic Controller)作為新一代工業控制器,以其高性能價格比在工業測控系統中獲得了廣泛應用。隨著微電子及控制技術的不斷發展,PLC已逐漸成為一種智能型、綜合型控制器,由PLC構成的集散控制是現代工業控制的一個重要組成部分。在眾多的小型集散控制系統中,若使用專業工控組態軟件,如INTOUCH、FIX等,制作上位機的監控界面,而以專用的PLC通信接口模塊以及其廠家推薦的DDE Server作為聯系上位機和PLC的橋梁,則成本較高、投資較大。所以上位機直接與PLC的通訊是一種很好的技術方案。

在Windows環境下開發與工業PLC通訊,可以利用C并借助Windows SDK提供的應用程序接口函數來完成軟件的設計,但這樣開發的程序很復雜;也可以利用Visual Basic提供的通訊控件來開發串行通訊程序,程序的編制十分簡單,但在現實中,許多大的應用系統都是基于VC++平臺開發的,VC++是現今最復雜、但也是最強大的一種Windows應用程序開發工程軟件。它在圖形處理和數據庫管理等方面具有較強的優勢,并且用它來實現底層的通訊控制有著更快的效率,使用MFC設計的界面與Visual Basic設計的界面一樣簡練。因此我們利用VC++6.0提供的通訊控件MSComm,以MFC來設計界面編制程序,構造與PLC的通訊系統。系統中的PLC為西門子公司的S7-200系列CPU226型。

2 系統的通訊原理

西門子S7-226型PLC是一種模塊化結構的小型PLC,具有較高的性能價格比,它帶有兩個RS485通訊口,而上位機即工控機的串行口是RS232,所以采用西門子公司專用的PC/PPI編程電纜作為上下位機的連接電纜,它實現了RS232和RS485的轉換,并且具有隔離抗干擾功能。整個系統原理圖如圖1所示。

通訊系統原理

圖1 通訊系統原理

CPU226自帶的通訊口RS485采用半雙工通訊,只需用兩根數據線TXD和RXD來發送數據和接收數據,所以通訊中沒有硬件握手信號,而只能采用軟件握手的通訊方式保持數據傳輸的同步。為了保證通訊的安全性,必須對發送的數據幀中加入幀校驗碼(FCS),采取的方法是:把所發送的數據幀中的數據按照字節進行異或運算后得到的FCS連同數據一起發送。接收方收到后,進行同樣的運算,并把結果與FCS比較,如果兩者不相等,則認為傳輸數據出錯。對于檢驗到出錯的數據采取放棄的措施,并立即發送反饋信號要求發送方重發數據。因此上位機和PLC發送數據的格式分別為表1和表2所示。控制命令如請求、應答等信號另有則不必加上校驗碼。

表1上位機數據格式

表2 PLC數據格式

3 系統的軟件設計

3.1系統的控制流程

整個通訊由上位機觸發開始,首先由上位機發送握手信號,PLC接收到握手信號后,發送回握信號;上位機收到回握信號,則開始發送請求指令,PLC收到指令后發送數據給上位機;上位機收到數據進行校驗,出錯則要求PLC重發,沒有錯誤則處理輸出顯示。下面圖2和圖3分別就是上位機和PLC的通訊程序流程圖。

上位機程序流程圖 圖3 PLC程序流程圖

圖2 上位機程序流程圖 圖3 PLC程序流程圖

3.2 PLC軟件設計

S7-200系列PLC有兩種通訊模式:一種是點對點(PPI)通訊模式,另一種是對用戶完全開放的自由口通訊模式(free port mode),PPI模式用于PLC間直接連接的通訊,可以組成網絡,自由口模式應用于PLC與計算機間以及PLC間無線通訊等方面。本通訊系統采用自由口通訊模式。在通訊之前通過改寫SMB30或SMB130來選擇通訊模式,設定波特率以及數據長度和校驗位。對于數據發送,采用專用發送指令XMT TABLE, PORT,其中TABLE為發送緩沖區的首地址,首地址中保存要發送的字節數,即數據長度,最大為255,其后的地址中保存要發送的數據,PORT指定用于發送的端口。對于數據接收,使用接收指令RCV TABLE, PORT,接收指令激活初始化或結束接收信息,通過指定端口(PORT)接收信息并存儲于數據緩沖區(TABLE),數據緩沖區的第一個數據指明了接收的字節數。在西門子PLC編程語言中,共有33個中斷事件,其中用于通訊口的中斷事件就有6個。在通訊過程中,我們利用中斷來實現發送數據和接收數據的切換,當數據發送完成,會產生發送字符中斷事件,在中斷程序中切換到接收狀態;當接收數據完成,會產生接收信息完成中斷事件,在中斷程序中切換到發送狀態,由于收發切換有一定的間隔,所以必須延時一段時間再發送數據,我們用定時中斷來產生延時。為了產生接收信息完成中斷事件,必須要對RCV指令設定結束信息作為判斷接收完成的條件,通過向SMB89或SMB189中裝入字符來設置,這個字符必須與上位機發送來的結束信息相吻合。

以下是PLC的部分程序:

MAIN(主程序)

NETWORK 1

LD SM0.1

MOVB 16#09, SMB30//初始化自由端口,選擇9600波特率,8位數據,無校驗

MOVB 16#A0, SMB87//RCV允許,檢測信息結束字符

MOVB ‘@’, SMB89//設定信息結束字符為‘@’

MOVB 10, SMB94//設定最大字符數為10

MOVB 5, SMB34 //定時中斷0為5ms

ATCH 0,23//接收完成事件連接到中斷0

ENI//允許全局中斷

NETWORK 2

RCV VB300, 0//接收數據

NETWORK 3

LD SM0.0

MOVB 16,VB200//發送16個字符

MOVD 16#4521347E, VD201//以下是實驗數據

MOVW +9860, VW205

MOVD 16#12345678, VD207

MOVW +10562, VW211

MOVW +8568, VW213

MOVB 8, VB215

CALL SBR_0

INT_0(中斷0子程序)

NETWORK 1//如果接收到的字符為‘K‘,則繼續接收

LDB= VB302, ‘K‘

RCV VB300, 0

NETWORK 2//如果接收到的字符為‘A‘、‘C‘或者‘R‘,則發送數據

LDB= VB302, ‘A‘

OB= VB302, ‘R‘

OB= VB302, ‘C‘

ATCH INT_1, 10//啟動定時中斷

NETWORK 3 //如果接收到的字符為“Z”,則

停止延時發送

LDB= VB302, ‘Z‘

DTCH 10

INT_1(中斷1子程序)

LD SM0.0

XMT VB200, 0//發送數據

DTCH 10//關定時中斷

3.3 上位機軟件設計

系統中上位機的軟件部分利用VC++提供的通訊控件MSComm,以MFC為基礎編制通訊程序。MSComm通訊控件提供了使用RS232開發串行通訊軟件的細則,它使用事件驅動或查詢方式來解決開發通訊軟件中遇到的問題。事件驅動是一種功能強大的處理問題的方法,對事件發生的跟蹤和處理在通訊控件中是用OnComm來實現的,它包括檢測和處理通訊錯誤以及數據的處理顯示等。為了清楚了解現場的工作狀態,可以在界面上實時顯示攝像機觀察到的內容,為此,需要對圖像采集卡采集到的圖像進行分析處理,這里就不再詳述。圖4為通訊界面。

程序設計方法如下:

(1)建立項目:啟動VC++6.0,利用MFC AppWizard(exe)應用向導建立一個基于對話框的應用程序ScommTest。

通訊界面

圖4 通訊界面

(2)在項目中插入MSComm控件:選擇Project菜單下Add To Project子菜單中的 Components and Controls…選項,在彈出的對話框中雙擊Registered ActiveX Controls項,選擇Microsoft Communications Control version 6.0,單擊Insert按鈕將它插入到Project中來,接受缺省的選項。

(3)在對話框中添加控件:向主對話框中添加通訊控件、按鈕、文本框、編輯框和組合框,其中部分屬性如表3所示。

表3控件屬性表

(4)初始化串口:在OnInitDialog()函數中添加初始化串口參數的代碼

// TODO: Add extra initialization here

if(m_ctrlComm.GetPortOpen())

m_ctrlComm.SetPortOpen(FALSE);

m_ctrlComm.SetCommPort(1); //選擇com1

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(16); //參數15表示每當串口接收緩沖區中有多于或等于15個字符時將引發一個接收數據的OnComm事件

m_ctrlComm.SetInputLen(0); //設置當前接收區數據長度為0

m_ctrlComm.GetInput();//先預讀緩沖區以清除殘留數據

(5)編寫幀校驗函數:首先在CSCommTestDlg類中加入公共成員函數說明

BYTE PLCData[30];//定義輸入數據存儲區

Void verfun(BYTE vdata[],int n);//定義校驗函數

然后寫幀校驗函數:

void CSCommTestDlg::verfun(BYTE vdata[],int n)

int i;

BYTE sum=vdata[0];

for(i=1;i<=n-2;i++)

sum︿=vdata[i];//計算校驗碼

vdata[n]=sum;//保存幀校驗碼

(6)為通訊控件IDC_MSComm1添加OnComm消息處理函數OnComm()

void CSCommTestDlg::OnComm()

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[2048]; //設置BYTE數組(8位無符號整數)

CString strtemp;

if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區內有字符

variant_inp=m_ctrlComm.GetInput();//讀緩沖區

safearray_inp=variant_inp; //VARIANT型變量轉換為ColeSafeArray型變量

len=safearray_inp.GetOneDimSize(); //得到有效數據長度

for(k=0;k

safearray_inp.GetElement(&k,rxdata+k);//轉換為BYTE型數組

for(k=0;k

PLCData[k]=rxdata[k];

verfun(PLCData,16);//計算校驗碼

if(PLCData[15]==PLCData[16])

{ //接收數據正確發送確認信號

m_ctrlComm.SetOutput(COleVariant(“K@”));   //可以在下面自行加上對數據的處理

if(!m_quit)//如果沒有結束信號則續傳數據

m_ctrlComm.SetOutput(COleVariant(“C@”));

else

m_ctrlComm.SetOutput(COleVariant(“Z@”));

else //接收數據出錯要求重發數據

m_ctrlComm.SetOutput(COleVariant(“R@”));

(7)為按鈕IDC_BUTTON_START和IDC_BUTTON_QUIT添加消息處理函數OnButtonStart()和OnButtonQuit()

void CSCommTestDlg::OnButtonQuit()

m_quit=TRUE;

void CSCommTestDlg::OnButtonStart()

m_quit=FALSE;

m_ctrlComm.SetOutput(COleVariant("A@"));   //發送請求信號

4 結束語

本文運用VC++和MFC開發了計算機與PLC的通訊系統,充分利用計算機和PLC本身的資源實現了上位機對PLC的實時監控,可以有效地對作業工具進行監控和管理。本文介紹的通訊系統用于超高壓帶電作業機器人的控制系統,實踐表明,系統簡練、穩定,取得了令人滿意的效果。

參考文獻

[1] 李志虎等.基于Visual C++的上位機和PLC的通信實現.計算機工程,2000(8)

[2] 朱正禮等.基于VC++的PLC與上位機的通訊.電氣傳動,2002(2)

[3] 西門子有限公司.西門子S7-200可編程序控制器系統手冊,1999

標簽:

點贊

分享到:

上一篇:LonWorks控制器芯片的設計擴...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 达拉特旗| 南通市| 彰化市| 扶余县| 米泉市| 大兴区| 湟中县| 石嘴山市| 庄浪县| 常宁市| 沁阳市| 昂仁县| 揭东县| 绥德县| 千阳县| 琼结县| 吕梁市| 阿图什市| 延寿县| 淮阳县| 塔城市| 峨眉山市| 古交市| 平塘县| 渭源县| 通州市| 安乡县| 蓬莱市| 伊宁市| 隆安县| 永宁县| 新河县| 横峰县| 肥东县| 凌云县| 南靖县| 宁河县| 旺苍县| 赣榆县| 措美县| 新泰市|