1、 前言
在工業(ye) 控製領域中,經常要用變頻器去控製交流電機的轉速、轉向等,盡管變頻器自身帶有控製麵,具有簡單、有效的特點,但由於(yu) 現場操作不夠方便,直觀性差以及僅(jin) 能實現單機控製等缺點,針對這些缺點,現在的變頻器都帶有rs485通信接口,使用戶能方便靈活地選擇變頻器的強大功能,在windows下開發工控軟件,可利用windows的豐(feng) 富資源,方便地生成各種采單及美觀大方的圖形界麵。
mobus協議是應用於(yu) 電子控製器上的一種通用語言,通過此協議控製器之間可以相互通信,而visual c++ 6.0的activex控件————mscomm通信控製能夠滿足windows環境下開發微機的低層資源。本文介紹的方案使用mobus協議的ascⅱ傳(chuan) 輸模式,通過visual c++ 6.0編程實現windows環境下,台達vfd-s變頻器的計算機控製係統
2、 係統硬件設計
現在一般的pc機都有rs232串口,但少有rs485口,而實現與(yu) 變頻器進行長距離且抗噪音幹擾的通信,一般多采用一塊rs232/485轉換器,總體(ti) 的係統方框圖如圖1

目前,rs232/485轉換器有無源和有源兩(liang) 種,如果通信距離較近,采用無源轉換即可。可以購買(mai) 也可以自己設計。
3、mobus協議下ascⅱ模式的通信過程及台達vfd-s型變頻器的通信要求
3.1mobus協議規定的通信過程
mobus協議是一種可靠而有效的工業(ye) 控製係統通信協議,得到了眾(zhong) 多硬件廠商的支持,並廣泛應用。mobus協議的數據通訊通過主機與(yu) 從(cong) 機之間查詢/回應的方式實現,查詢消息中的功能代碼告知從(cong) 設備要執行何種功能,數據段包含了從(cong) 設備要執行的功能的附加消息。從(cong) 設備產(chan) 生回應消息,回應消息中的功能代碼是查詢消息中功能代碼的回應,查詢消息、回應消息中都有用於(yu) 判斷傳(chuan) 輸是否正確的錯誤檢測域。
3.2 ascⅱ模式的通信數據格式
mobus協議係統中有兩(liang) 種有效的傳(chuan) 輸模式:ascⅱ(美國標準信息交換碼)模式和rtu(遠程終端裝置)模式,ascⅱ模式通信時,在消息中的每個(ge) 8-bit數據由兩(liang) 個(ge) ascⅱ字元所組成。例如,一個(ge) 1-byte資料64h(十六進製表示法),以ascⅱ“64”表示,包含了‘6’(36h)及‘4’(34h)。
ascⅱ模式:

ascⅱ模式采用lrc(longitudinal redundancy check)偵(zhen) 誤值。lrc偵(zhen) 誤值是將adr1至最後一個(ge) 資料內(nei) 容加總,得到之結果以256為(wei) 單位,超出部分去除(例如得到結果為(wei) 1f2h時則隻取f2h),然後計算二次反補後得到的結果即為(wei) lrc偵(zhen) 誤值。
3.3台達vfd-s型變頻器的通信要求
vfd-s係列交流馬達驅動器是內(nei) 建rs485串聯通訊介麵,通訊埠(rj-11)位於(yu) 控製回路端子,端子定義(yi) 如下:
2:gnd 3:sg- 4:sg+ 5:+5v
2、5pin為(wei) 參數設定器操作盤之電源,做rs485通信時,請勿使用!
使用rs485串聯通訊介麵時,每台vfd-s型必須預先在(9-00)指定通訊地址,電腦便根據其個(ge) 別地址實施控製。
4、mscomm控件介紹
mscomm控件是微軟公司開發的專(zhuan) 門用於(yu) 串行通信的控件,它是高級語言編寫(xie) 的串行通信程序和pc串口之間的橋梁,vc++ 6.0中提供了mscomm控件,用戶可以在自己的應用程序嵌入mscomm控件,利用它可以方便的進行計算機串口的通信管理。
使用mscomm控件時,其中一個(ge) 難點是對輸入緩衝(chong) 區或輸出緩衝(chong) 區的數據進行處理,因為(wei) 向輸出緩衝(chong) 區寫(xie) 入的數據及從(cong) 輸入緩衝(chong) 區讀出的數據都是variant類型的數據,而程序中常用的通信數據既可能是文本型的字符串,又可能是二進製的數值,因此必須處理好字符串與(yu) variant類型數據間的轉換及二進製數據與(yu) variant類型數據的轉換。
以下代碼簡單介紹如何完成使用mscomm控件時如何接收和發送字符串或二進製數值:
ⅰ、收字符串
variant input1; //定義(yi) 一個(ge) variant結構的變量
char *str;
int counts;
counts=mycomm.getinbuffercount(); //獲取接收緩衝(chong) 區中的字符數
if(counts>0)
{ input1=myco
mm.getinput(); //將接收緩衝(chong) 區內(nei) 容讀至input1中
str=(char*)(unsigned char*)input1.parray->pvdata;//將input1變量的數據指針賦值給字符指針
}
……
ⅱ、發送字符串
cstring senddata1;
senddata1=”atz”;
mycomm.setoutput(colevariant (senddata1));
ⅲ、接收二進製數據
variant input1; //定義(yi) variant類型變量
byte rxdata[2048],aa1; //定義(yi) 存放二進製數據的數組
long len1,k;
colesafearray safearray1; //定義(yi) colesafearray類的實例
input1=mycomm.getinput();
safearray1=input1; //將variant變量賦值colesafearray類的實例
len1=safearray1.getonedimsize(); //使用colesafearray類的成員函數獲取數據長度
for(k=0;k safearray1.getelement(&k,rxdata+k); //使用colesafearray類的成員函數將數據寫(xie) 入數組
ⅳ、發送二進製數據
cbytearray array1;
array1.removeall();
array1.setsize(3);
array1.setat(0,12);array1.setat(1,79);array1.setat(2,0xe2);
mycomm.setoutput(colevariant(array1));
5、通信程序編寫(xie)
下麵給出了利用pc機對vfd-s型台達變頻器的串行通信控製程序:
⑴端口設置界麵(如圖3)
通過設置端口參數使控製程序跟變頻器的(9-00 9-01 9-04)參數設定一致,從(cong) 而能夠保證正常通信,同時設置變頻器的(2-00 2-01)參數,使得變頻器的控製由rs485通訊界麵輸出。

⑵主界麵(如圖4)
主界麵用來發送控製信息給變頻器來控製電機的起止、反轉、寸動和頻率等。
⑶運行控製編程
發送控製信號: 主要代碼(以正轉運行為(wei) 例)
if(nid==idc_radio1)
{ str0=":010620000012" ;
b="0x01"+0x06+0x20+0x00+0x00+0x12;
if(b>0xff)
b="b"&0x0ff;
b="b"︿c; //求校驗
b="b"+1;
str1.format("%02x",b);
}
str3=str0+str1+"\r\n";
mycomm.setoutput(colevariant(str3));
接收返回信息: 通過接收返回信息來監測變頻器的狀態,包括輸出頻率、輸出電流、運轉命令、變頻器狀態以及異常代碼等。
為(wei) 提高程序效率,通常接收數據的操作都在oncomm事件中進行的,主要代碼:
…………
variant input1; //定義(yi) variant類型變量
char
rxdata[2048]; //定義(yi) 存放二進製數據的數組
long len1,k;
colesafearray safearray1; //定義(yi) colesafearray類的實例
cstring strdis;
switch(mycomm.getcommevent())
{ case 2:
input1=mycomm.getinput(); //收到 rthreshold 個(ge) 字符
safearray1=input1; //將varaiant變量賦值給colesafearray類的實例
len1=safearray1.getonedimsize(); //使用colesafearray類的成員函數獲取數據長度
for(k=0;k safearray1.getelement(&k,rxdata+k);#p#分頁標題#e#
for(k=0;k { strdis+=rxdata[k]; }
………… //處理接收的信息
6、小結
本文介紹了通過vc++ 6.0的mscomm控件,遵照mobus協議中的ascⅱ模式實現了在windows環境下的計算機對變頻器的參數傳(chuan) 遞,運行及頻率控製以及實時監控。本人通過對整個(ge) 控製係統的軟硬件設計,實現了變頻器的計算機控製,經試驗表明係統的頻率控製比使用外部avi輸入更加精確,並且該係統具有簡單、可靠、實用的優(you) 點。
轉載請注明出處。









相關文章
熱門資訊
精彩導讀
























關注我們

