国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

PC機與變頻器的串行通信

發布時間:2012-10-24 20:02    發布者:1770309616
關鍵詞: PC機 , 變頻器 , 串行通信
引言
  計算機串行通信是計算機與控制設備(如變頻器)進行數據傳送的一種通信方式,也是實現工業自動控制經常用到的通信模式。每一種通信方式都嚴格約定了與其對應的通信協議。要確保計算機與變頻器之間能正常通信,就必須遵照變頻器通信協議編寫通信程序。本文就帶有rs-485通信接口的日普變頻器作為研究對象,設計了變頻器網絡監控的方案,實現了對變頻器各項參數的在線監視和控制。以下就圍繞如何在c++builder編程環境下,利用api函數編寫計算機與日普變頻器(rp3200)之間的串行通信程序進行闡述。
串行通信
  串行通信在工業系統控制的范疇中一直占據著極其重要的地位,串行端口(rs-232)是計算機上的標準配置,常用于連接調制解調器來傳輸數據,在計算機的硬件設備管理器中可以看到,定義為com1、com2等。常用的串行通信方式有兩種,分別是rs-232和rs-485,本文以rs-485方式為例進行介紹。
使用c++builder api函數編寫通信程序
  c++builder本身不提供單獨的串行通信組件,這不是說它不能使用這項功能,而是必須使用一些windowsapi函數來達到這個目的。windowsapi是由操作系統提供的函數,這些函數可以為程序設計人員提供相當多的執行功能,就連操作系統本身也是由這些api函數所組成,由于已經將win32api均聲明進去了,因此在中使用api時只要直接使用即可。使用時必須以api函數的定義使用,才可以得到正確的結果,尤其參數的定義更是重要,使用時必須注意和定義相符,否則執行結果將會出錯,以下就先說明這些必備的函數。
c++builder中與串行通信相關的api函數
  c++builder本身并不提供單獨的串行通信組件,而是使用一些windowsapi的函數來達到此目的。這些函數是由操作系統所提供,可以為程序設計人員提供相當多的執行功能。api中與串行通信相關的函數約有20個,以下對經常使用的函數作以討論。
  打開串行端口
  hcomm=createfile(comno,generic_read|generic_write,
  0,null,open_existing,1,0)
  函數參數定義如下:
  hcomm:createfile()函數的返回值,程序使用此返回值進行相關的串行端口操作。
  comno:定義串行端口號,為com1、com2等。
  generic_read|generic_write:對串行端口的讀/寫操作。
  0:是否共享串行端口,通常不會將串行端口與其它程序共享,因此設為0,否則為1。
  null:函數的返回值hcomm是否可被子程序繼承,此處設為不可繼承。
  open_existing:打開端口的方式,串行端口是一種設備,必須指定為open_existing方式。
  1:使用同步或異步方式傳輸數據,變頻器為異步方式,因此設為1。
  0:由于使用串行端口編程,設為0。
  得到串行端口狀態
  getcommstate(hcomm,&dcb)
  函數參數定義如下:
  hcomm:createfile()函數的返回值。
  dcb:串行端口控制塊地址,負責對串行端口參數進行設置,具體參數如下:
  dcb.baudrate:設置串行端口的波特率,有19200kb/s、9600kb/s、4800kb/s幾種,一般為:9600kb/s。
  dcb.bytesize:設置串行端口的數據位數,有5、6、7、8幾種,變頻器數據位數為8。
  dcb.parity:設置串行端口的校驗位檢查,有none、even、odd幾種,設為none。
  dcb.stopbits:設置串行端口的停止位數,有1、1.5、2幾種,變頻器的停止位數為1。
  設置串行端口狀態
  setcommstate (hcomm,&dcb)
  函數參數定義與getcommstate()函數相同。
  向串行端口寫數據
  writefile(hcomm,senddata,bs,&lrc,null)
  函數參數定義如下:
  hcomm:createfile()函數的返回值。
  senddata:寫數據的地址。
  bs:寫入數據的字節數。
  lrc:被寫入的數據地址。
  null:寫入數據的同步檢查,串行端口采用同步通信時可以設為null。
  清除串行端口的錯誤或將串行端口當前的數據狀態送至輸入緩沖區
  clearcommerror(hcomm,&dwerror,&cs)
  函數參數定義如下:
  hcomm:createfile()函數的返回值。
  dwerror:返回錯誤信息代碼。
  cs:指向串行端口狀態的結構變量。
  從串行端口的輸入緩沖區讀出數據
  readfile(hcomm,inbuff,cs.cbinque,&nbytesread,null);函數參數定義如下:
  hcomm:createfile()函數的返回值。
  inbuff:指向用來存儲數據的地址。
  cs.cbinque:讀取數據的字節數。
  nbytesread:總的讀取字節數。
  null:如果不進行后臺工作,串行端口設為null。
  關閉串行端口
  closehandle(hcomm)
  函數參數定義如下:
  hcomm:createfile()函數的返回值。
變頻器的監控系統設計
  硬件連接框圖
  本文設計的監控系統采用平衡發送和差分接收方式實現通信。由于傳輸線通常使用雙絞線,又是差分傳輸,所以有極強的抗共模干擾的能力。rs-485最大的通信距離可達1219m,rs-485最大傳輸速率為10mb/s。rs-485采用半雙工工作方式,支持多點數據通信。總線網絡拓撲一般采用終端匹配的總線型結構。
  rs-485總線一般最大支持32個節點。
  本設計采用帶有rs-485接口的日普變頻器(rp3200)控制電機運轉,上位計算機和變頻器進行通訊,計算機通過讀寫變頻器的參數來監控變頻器的運行狀態。上位機為主控計算機,下位機為被控變頻器(最多為31個)。主控和被控之間的串行控制信號始終是主控啟動傳送,被控對此作出響應。某一個時刻,主控和一個被控進行信號傳送,所以要預先給每個被控分配地址號,并由主控指定地址執行發送。被控接收到主控來的信號后執行其功能,并返回應答給主控。由于計算機本身支持rs-232串行通信方式,所以需要用rs-232與rs-485轉換器將計算機與變頻器連接起來。上位機與變頻器控制組網結構如圖1所示。
  變頻器通信功能設置
  此變頻器控制命令和方式有三種:數字面板控制、端子控制和rs-485通訊控制,變頻器的默認出廠設置為變頻器控制面板控制,這不符合我們與pc
  機通訊的要求,為了能使變頻器與 pc機之間通訊,我們對變頻器作如下設置:
  操作方式選擇
  在數字面板中選擇參數設定,將運行方式按表1設置為rs-485運行方式。
        
  通信參數設定
  通信地址設定:定義設備地址 1 – 31,在線不允許兩個設備占用一個地址
  傳送中斷檢測時間:設定 范圍為:0-60sec
  通信規格設定:
  接口:rs-485 同步方式:異步
  傳輸參數:
  波特率:可從 1200,2400,4800,9600,19200 等中選擇
  停止位:固定為 1位
  變頻器通信命令介紹
  通信數字元格式
  數字元格式如圖2所示。
  1位起始位,8位數據位,奇校驗,1位停止位。
  糾錯方法
  在信息后加checksum, checksum等于所有字節(hex)之和的最后一字節,轉換為ascii碼。
  數據包格式
  類似modbus ascii格式,格式如下。
  header akp1p0 d3d2d1d0 s delimiter
  格式解析:
  【header】:3ah
  【delimiter】:0dh,0ah
  a、k、p1p0、d3d2、d1d0、s分別為單字節十六進制數,轉換為ascii碼。
  【a】:從機(變頻器)地址。變頻器地址范圍為(1-31),a必須存在。
  注:地址a=00h時對所有從機有效,且所有從機不回送響應信息。故a=00h只能發送運行命令操作。
  【k】:數據包功能代碼。
  【p1p0】:參數序號。參數標號,兩字節十六進制數。
  【d3d2d1d0】:參數值:去掉小數點的參數值,共四字節的十六進制數,先發高位,后發低位。
  【s】:和校驗字。s是上面所有字節十六進制之和(a+k+p1p0+d3+d2+d1+d0)取最后一字節(bit7-bit0)值,轉換為ascii碼。
  其中k、p、d3d2d1d0參數定義如表3所示。
  計算機與變頻器串行通信程序實現
  通信主程序的設計架構
  設計通信主程序的主要功能是:實現計算機對變頻器的運行控制和狀態監視,即構成一個閉環監控系統。程序設計架構如圖3示。
  例1:變頻起運行參數設定
  1#變頻器在運行狀態下改變它的“設定頻率”為35.00hz
  方法如下:
  35.00去掉小數為3500d=0dach
  a=1=01h (變頻器地址為“01h”)
  k=04h (運行參數設定為“04h”)
  p1p0=0001h (運行時設定頻率為“0001h”)
  d3=00h (數據高字節為“00h”)
  d2=00h (數據次高字節為“00h”)
  d1=0dh (數據次字節為“0dh”)
  d0=ach (數據低字節為“ach”)
  s=c9h (和校驗字節為“c9h”)
  (s=0bh+04h+00h+01h+00h+00h+00h+0dh+ach=c9h)
  主機先后依次發送字節如下的數據包ascii:
  3ah,30h,42h,30h,34h,30h,30h,30h,31h,30h,30h,30h,30h,30h,44h,41h,43h,43h,39h,0dh,0ah
  變頻器回復主機相同數據。
  部分通信代碼如下:
  打開通訊端口代碼
  char *comno;
  dcb dcb;
  string temp;
  temp=“com”+inttostr(rdcom-》itemindex+1);
  comno=temp.c_str() ;
  hcomm=createfile(comno,generic_
  read|generic_write,0,null,open_existing,0,0);
  if(hcomm==invalid_handle_value)
  {
  statusbar1-》simpletext=“打開通信端口錯誤!”;
  return;
  }
  else
  statusbar1-》simpletext=“端口已打開!”;
  sleep(100);
  getcommstate(hcomm,&dcb);
  dcb.baudrate=cbr_9600;
  dcb.bytesize =8;
  dcb.parity =noparity;
  dcb.stopbits =onestopbit;
  setcommstate(hcomm,&dcb);
  if(!setcommstate(hcomm,&dcb))
  {
  statusbar1-》simpletext=“通信端口設置錯誤!”;
  closehandle(hcomm);
  return;
  }
  發送數據代碼
  int i=0;
  unsigned char sends[21];
  unsigned long lrc,bs;
  sends[0]=3ah; //header
  sends[1]=30h; //a
  sends[2]=31h;
  sends[3]=30h;//k
  sends[4]=34h;
  sends[5]=30h; //p1
  sends[6]=30h;
  sends[7]=30h; //p0
  sends[8]=31h;
  sends[9]=30h; //d3
  sends[10]=30h;
  sends[11]=30h;//d2
  sends[12]=30h;
  sends[13]=30h; //d1
  sends[14]=44h;
  sends[15]=41h; //d0
  sends[16]=43h;
  sends[17]=43h; //s
  sends[18]=39h;
  sends[19]=0dh; //delimiter
  sends[20]=0ah;
  for(i=0;i++;i《21)
  {
  if(hcomm==0)
  return;
  writefile(hcomm,sends,1,&lrc,null);
  }
  接收數據代碼
  int ln;
  unsigned long lrc,bs;
  char inbuff[1024];
  dword nbytesread,dwevent,dwerror;
  comstat cs;
  if(hcomm==0)
  {
  mreceive-》text=“讀取過程有問題,已跳出!”;
  return;
  }
  if(hcomm==invalid_handle_value)
  {
  mreceive-》text=“讀取過程有問題,已跳出!”;
  return;
  }
  clearcommerror(hcomm,&dwerror,&cs);
  if(cs.cbinque)
  {
  readfile(hcomm,inbuff,cs.cbinque,&nbytesread,null);
  inbuff[cs.cbinque]=`\0`;
  mreceive-》text=inbuff;
  interceptrece(mreceive-》text);
  }
  else
  mreceive-》text=“未讀取到數據!”;
  以上代碼在winxp sp2操作系統, c++builder6 編程環境下調試編譯通過。
結語
  通過對帶有rs-485通信接口的日普系列變頻器的研究,設計了可行的變頻器網絡監控系統方案,在c++builder編程環境下,利用api函數,實現了變頻器各項參數的在線監測與控制。提高了變頻器控制自動化水平。
本文地址:http://m.4huy16.com/thread-99671-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 技術熱潮席卷三城,2025 Microchip中國技術精英年會圓滿收官!
  • 常見深度學習模型介紹及應用培訓教程
  • Microchip第22屆中國技術精英年會——采訪篇
  • Microchip第22屆中國技術精英年會上海首站開幕
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表