閱讀 | 訂閱
閱讀 | 訂閱
控制系統(tǒng)

VC++開發(fā)PC與松下PLC間的通訊程序

星之球激光 來源:中國自動化網(wǎng)2012-08-28 我要評論(0 )   

1 引言 可編程控制器是一種數(shù)字運算操作的電子系統(tǒng),專為在工業(yè)環(huán)境下應(yīng)用而設(shè)計。它采用了可編程序的存儲器,用于其內(nèi)部存儲程序,執(zhí)行邏輯運算、順序控制、定時、計數(shù)...

1 引言

  可編程控制器是一種數(shù)字運算操作的電子系統(tǒng),專為在工業(yè)環(huán)境下應(yīng)用而設(shè)計。它采用了可編程序的存儲器,用于其內(nèi)部存儲程序,執(zhí)行邏輯運算、順序控制、定時、計數(shù)和算術(shù)操作等面向用戶的指令,并通過數(shù)字式或模擬式輸入輸出控制各種類型的機械的生產(chǎn)過程。可編程控制器及其有關(guān)外部設(shè)備,都按易于與工業(yè)控制系統(tǒng)聯(lián)成一個整體、易于擴充其功能的原則設(shè)計。早期的plc以數(shù)字量的順序控制為主,提供了簡單的慢速的通信功能(只支持rs232、rs485、多采用modbus協(xié)議),現(xiàn)在的plc不僅具有邏輯運算、順序控制、定時、計數(shù)和算術(shù)操作,而且還具有a/d、d/a轉(zhuǎn)換,數(shù)值計算和數(shù)據(jù)處理等功能。它既可以對開關(guān)量進行控制,也可以對模擬量進行控制,隨著plc功能不斷擴充,它還有通訊聯(lián)網(wǎng)功能。本文就是基于松下電工的專門通信協(xié)議(mewtocol),用vc++開發(fā)的上位機與plc間的通信。

 

2 松下電工的專用通信協(xié)議mewtocol-com

  目前,隨著plc的快速發(fā)展,越來越多的plc生產(chǎn)廠商開發(fā)了它與計算機的通信功能(主要是利用計算機串口進行通信),本文是以松下fp系列plc為例,作詳細闡述。在一臺計算機于plc之間的通信中,通信由計算機發(fā)動,把命令幀發(fā)向plc,plc將以響應(yīng)幀作應(yīng)答,并執(zhí)行相應(yīng)的動作。

 ?。?) 命令幀格式

  其中: %:mewtocol-com的命令幀開始標(biāo)志(ascii碼為25h)。

  h,l:站地址的高位和低位。

  #:站號特征碼(ascii碼為23h)。

  發(fā)送文本:由命令碼和數(shù)據(jù)組成,其主要命令碼如表1所示。

  bcc:校驗碼,采用異或校驗碼,bcc為8位。

 ?。?) 響應(yīng)幀格式

  當(dāng)主站發(fā)來命令幀之后,從站將以響應(yīng)幀作應(yīng)答。響應(yīng)幀分為2種,若主站命令幀正確無誤,則用“正確響應(yīng)幀”作應(yīng)答;如果主站命令幀有錯誤則用“錯誤響應(yīng)幀”作應(yīng)答。這兩種應(yīng)幀格式下。正確響應(yīng)幀的格式

  其中 %,h,l,bcc,cr含義與命令幀相同。

  $:正確響應(yīng)的標(biāo)志(acsii碼為24h)。

  響應(yīng)文本:應(yīng)當(dāng)按照命令幀要求及協(xié)議規(guī)定組織。

  錯誤響應(yīng)幀的格式

  其中%,h,l,bcc,cr含義與命令幀相同。

 ?。。哄e誤響應(yīng)幀的標(biāo)志(acsii碼為21h)。

  錯誤代碼:對于命令及數(shù)據(jù)傳送中的各種錯誤均規(guī)定為代碼以識別。

        (3) 命令碼: mewtocol-com協(xié)議的命令碼匯總?cè)绫?所示

 ?。?)常用的命令與格式

  a)單接點的讀

  錯誤響應(yīng)幀與單接點的相同。

 

3 用visual c++6.0編寫串行通信程序

 ?。?) mscomm控件

  串行通訊編程基本過程:設(shè)置初始化并打開串行口—配置串口—雙向傳輸數(shù)據(jù)—校驗—釋放串口。本文的上位機通信程序是用visualc++6.0編寫的,主要是利用vc++中的一個通信控件mscomm來現(xiàn)的。

  該控件屏蔽了通訊過程中的底層操作,程序員應(yīng)用時只需設(shè)置,監(jiān)控mscomm控件的屬性和事件即可完成對串口的初始化和數(shù)據(jù)的輸入輸出工作。mscomm控件的主要屬性如下:

  * commport:設(shè)置并返回通訊端口號,設(shè)計時端口號可設(shè)為1到16的任何數(shù)(默認(rèn)值為1)。如:setcommport(1);即設(shè)置當(dāng)前通訊端口為com1。

  * settings:設(shè)置并返回波特率,奇偶校驗,數(shù)據(jù)位長度,停止位長度。

  如:setsettings(lpctstr string);string是一個包括四部分的字符串:第一部分:波特率;

  第二部分:奇偶校驗,n表示不校驗,e表示偶校驗,o表示奇校驗,s表示空格校驗,m表示符號校驗;

  第三部分:數(shù)據(jù)為長度,其可選值為4,5,6,7,8;

  第四部分:停止位長度,其可選為1,1.5,2。 settings屬性的缺省值為“9600,n,8,1”。

  * portopen:用于打開和關(guān)閉端口。setportopen(bool bnewvalue);

  當(dāng)bnewvalue為true時打開端口,當(dāng)為false時關(guān)閉端口。

  * input:從接受緩沖區(qū)返回和刪除字符,該屬性在運行時為只讀。getinput();

  * output:向緩沖區(qū)寫數(shù)據(jù),要傳送的數(shù)據(jù)可以是文本數(shù)據(jù)或是二進制數(shù)據(jù)。

  *commevent:返回最近的通訊事件或錯誤。只要有通訊錯誤或事件發(fā)生時都會產(chǎn)生oncomm事件,commevent屬性中存有錯誤或事件的數(shù)值代碼。

  getcommevent();

      

4 程序框架的生成及控件屬性的配置

  首先利用mfcappwizard(exe)建立一個基于對話框,支持activex控件,命名為transcomn的應(yīng)用程序。然后在對話框中加入一些控件,其中那個mscomm控件(電話形狀的控件)必須是在系統(tǒng)中注冊過的microsoft communications control,由它進行通訊時首先得設(shè)置它的一些屬性,這些屬性既可以在控件屬性對話框中設(shè)置也可以在程序中設(shè)置,本文用后一種方法,在程序中對mscomm控件屬性設(shè)置。最后用classwizard為控件添加變量和響應(yīng)函數(shù)如表2

5 程序編寫

  // transcommdlg.cpp : implementation file

  bool ctranscommdlg::oninitdialog()

  {

  //初始化通訊端口,波特率為9600,奇校驗,8位數(shù)據(jù)位,1位校驗位,選擇com1口

  cdialog::oninitdialog();

  m_comm.setcommport(1);

  m_comm.setsettings(“9600,o,8,1”);

  m_comm.setinputmode(1);

  m_comm.setportopen(true);

  return true; // return true unless you set the focus to a

  control

  }

  void ctranscommdlg::onsend()

  {

  updatedata(true);

  variant vresponse;

  char *str;

  //把對話框中有用戶輸入的命令字符串cstring

  //m_commandstring,由串口發(fā)出

  m_comm.setoutput(colevariant(m_commandstring));

  sleep(50);//延時50毫秒,一個保證有足夠的時間 //讓plc響應(yīng)命令

  //讀取串口輸入緩沖區(qū)中的字符個數(shù),如大于0表 //示串口接受到plc的響應(yīng)幀,然后//進行處理

  int k=m_comm.getinbuffercount();

  if(k》0)

  {

  //把plc發(fā)送來的響應(yīng)幀轉(zhuǎn)換為字符 //串,并在對話框的響應(yīng)文本框中顯示

  vresponse=m_comm.getinput();

  str=(char *)(unsigned char*)vresponse.parray-》pvdata;

  str[k]='';

       }

       }

 

轉(zhuǎn)載請注明出處。

暫無關(guān)鍵詞
免責(zé)聲明

① 凡本網(wǎng)未注明其他出處的作品,版權(quán)均屬于激光制造網(wǎng),未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用。獲本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使 用,并注明"來源:激光制造網(wǎng)”。違反上述聲明者,本網(wǎng)將追究其相關(guān)責(zé)任。
② 凡本網(wǎng)注明其他來源的作品及圖片,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本媒贊同其觀點和對其真實性負(fù)責(zé),版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系我們刪除。
③ 任何單位或個人認(rèn)為本網(wǎng)內(nèi)容可能涉嫌侵犯其合法權(quán)益,請及時向本網(wǎng)提出書面權(quán)利通知,并提供身份證明、權(quán)屬證明、具體鏈接(URL)及詳細侵權(quán)情況證明。本網(wǎng)在收到上述法律文件后,將會依法盡快移除相關(guān)涉嫌侵權(quán)的內(nèi)容。

網(wǎng)友點評
0相關(guān)評論
精彩導(dǎo)讀