英文摘 要 :This paper introduces multi-motor synchronous drives system composed of B&R PCC and Siemens invertors. The serial communication control between PCC and multiple invertors is realized by using USS protocol based on the RS485 interface. The presented system is very convenient to monitor the bbbbbeters of every invertor on line and realize the bbbenet control. The bbbbbb can reduce electric connections and improve the anti-interbbbbbb capability of the system. Thereby a scheme for dyeing-printing automation with low-cost and high-perbbbbance is provided.
關鍵詞: USS協議 RS485 PCC 變頻器
1 引言
在紡織印染造紙設備中,為了對織物進行連續加工,通常把各個加工單元組合成聯合機,各加工單元分別由一臺電動機控制,要求加工中保持個單元間張力恒定或者線速度成適當關系[1>。此時對單臺變頻器的控制在許多場合已經不能滿足生產的要求,必須對多臺變頻器進行協調控制。因此變頻調速技術也逐漸朝著網絡化的方向發展。為適應這一發展方向的需要,各大公司相繼推出了帶有標準通訊接口的通用變頻器,為用戶設計滿足工業現場需求的控制系統帶來了極大的方便[2>。德國西門子公司的MASTERDRIVER 6SE70 交流變頻器帶有RS485通信接口,并以基于二進制的USS協議作為其串口通信協議。因此,可以借助PLC或者工控機作為主控制器,通過USS協議實現多電機協調控制。
2 系統的總體設計
2.1 系統設計要求
在紡織印染造紙等生產過程中,有保持各傳動子系統之間同步運行的要求。不僅僅是穩速運行時需要同步,而且在加減速的動態過程中也需要保證線速度的協調一致。在不用松緊架和張力傳感器的情況下,變頻器大都采用光電編碼器的反饋方式,各單元使用轉速負反饋形成閉環控制,從而使得速度盡量不受負載波動等擾動的影響。在速度誤差控制在千分之幾的情況下,按照對伸長率的要求,設定各單元的線速度依次相差百分之幾,其范圍可調,形成所要求的織物張力,達到各單元同步調速的目的。不用松緊架,也不用張力傳感器。
另外,矢量控制的變頻器能實時地計算出電機的驅動轉矩,讓轉矩信息參與線速度的調整,可以進一步增加了它的智能性。
2.2 控制系統的組成
系統結構如圖1所示。本系統管理層的計算機通過以太網與PCC(Programmable Computer Controller)進行通訊,對現場的變頻器進行實時的控制與監測;控制層則是通過觸摸屏和PCC來完成的;現場驅動層由4臺西門子變頻器構成。這里重點介紹圖1中控制層和現場驅動層的設計。本系統采用貝加萊的PCC作為系統的控制中心,由西門子6SE70矢量變頻器為驅動單元,交流三相異步電動機作為執行單元,光電編碼器提供速度反饋信號,使印染設備傳動在速度閉環模式下運行,從而使系統穩速精度達到千分之幾。由PCC通過西門子USS協議、RS485網絡與變頻器實現速度鏈功能、速差控制、總車速升降、各分部點的速度升降等功能,較理想地滿足印染設備恒張力的工作的需求。HITECH觸摸屏作為現場的人機接口,通過RS-232與PCC相連,可以設定電機的轉速和伸長律,同時顯示實際的轉速、頻率、轉矩、電壓和電流等。
3 USS控制協議
USS協議是由Siemens AG定義的簡單的串行數據通信協議。從OSI7層模型來講,USS協議屬于數據鏈路層及其高層,RS485協議主要為其物理層。運用USS協議,用戶可以在主站與多個從站之間建立串行總線鏈接,主站可以是PLC或PC機,從站可以是變頻器或直流調速器等。1個主站和最多31個從站連接到總線上,主站通過幀中的地址標志選擇每個從站。在主站沒有要求它通信時,從站本身不能首先發送數據,各個從站之間也不能直接進行信息的交換。USS協議的波特率最高可達187.5kbps,通信字符格式為1位起始位、1位停止位、1位偶校驗位和8位數據位。
3.1 通信報文的結構
USS協議中每一報文都是以字符STX(=02hex)開始,接著是長度的說明(LGE)和地址字節(ADR),隨后是數據字符1~n,報文以數據塊的檢驗符(BCC)結束,其報文結構如圖2所示。

STX:STX區為1個字節的ASCII字符,固定為02hex,表示一條信息的開始。
LGE:LGE區為1個字節,指明這一條信息中后跟的字節數目。報文的長度是可以變化的,其長度必須在報文的第2個字節(即LGE)中說明。總線上的各個從站結點可以采用不同長度的報文。一條報文的最大長度是256個字節。LGE是根據所采用的數據字符數(數量n),地址字節(ADR)和數據塊檢驗字符(BCC)確定。顯然,實際的報文總長度比LGE要多2個字節,因為字節STX和LGE沒有計算在LGE以內。本項目凈數據區中由3個字(6個字節)的PKW域和5個字(10個字節)的PZD域組成,共有16個數據字節,故LGE=16+2= 18。報文的長度應為18+2=20。
ADR:ADR區為一個字節,標志從站地址。Bit0-Bit4表示變頻器的地址,從站地址可以是0-31。Bit5是廣播位標志位,如果這一位設置為1,該報文就是廣播報文,對串行鏈路上的所有結點都有效。Bit6表示鏡像報文,如果這一位設置為1,結點號需要判定,被尋址的從站將未加更改的報文返回給主站。其余不用的位應設置為0。
BCC:BCC區是長度為一個字節的校驗和,用于檢查該報文是否有效。它是該報文中BCC前面所有字節“異或”運算的結果。
凈數據區由參數標志值域(PKW)和過程數據域(PZD)組成,一種可能結構如圖3所示。
PKW域由參數標志(PKE)、參數標號(IND)和參數值(PWE)3部分構成,其長度由參數P702設定。
PKE:PKE為參數標志碼,1字長,PNU(bit0~10)表示參數號,SP(bit11)為參數改變標志,由從站設置;AK(Bit12~15)為報文類型,主站—從站和從站—主站各有16種不同的報文類型。
IND:參數標號,1字長,用來指定某些數組型設備參數的子參數號。
PWE:參數的值,1字長或2字長,是PKE區域中所指定的參數的IND指定的子參數的值。每個報文中只能有一個參數值被傳送。
例:PCC通過485接口標準,在采用USS協議的基礎上,改變參數P554的值。其發送給變頻器的完整幀命令為:
[02> [08> [01> [194> [42> [00> [01> [33> [00> [C3>
意義如下:
02:報文起始標志;08:報文有效長度為8個字節;01:變頻器作為子站的站地址為1;194:參數標志PKE的高字節,16進制表示為0xC2;42:參數標志PKE的低字節,16進制表示為0x2A;將PKE的高低字節組合起來0xC22A表示:改變參數P554的值,其中AK為:C(意義為改變參數值),參數號PNU為:22A(即10進制的554);00:參數標號的高字節為0;01:參數標號低字節為1;33:參數值的高字節,16進制為0x21;00:參數值的低字節;將參數值的高低字節組合起來表示:將P554的標號1的值改為0x2100;C3:前邊所有字節的異或和。整個幀的長度為10個字節。
PZD區是為控制和監測變頻器而設計的。在主站和從站中收到的PZD總是以最高的優先級加以處理,處理PZD的優先級高于處理PKW的優先級,而且,總是傳送接口上當前最新的有效數據。PZD區域的長度是由PZD元素的數量和它們的大小(單字或雙字)決定的。每個電報中的最大PZD數量限制為16個字,最小為0個字,即在凈數據塊中無PZD區。PZD1在傳送方向為主站至從站時為控制字,傳送方向為從站至主站時為狀態字,其余的傳送內容由交流調速器參數P707設置決定。本項目中傳送的過程數據為轉速、電樞電壓、電樞電流、轉矩等。
3.2 USS協議的時序
從站并不能通過啟動標志STX(02HEX)清楚識別報文,因為位組合02HEX也會出現在凈數據域中。因此主站在STX前定義了一個至少2個標志執行時間的啟動間隔,啟動間隔為工作報文的一部分。啟動間隔可以查USS說明書得到。本項目中的波特率為38400b/s,此時最小啟動間隔為0.58ms。只有具備上述啟動間隔的啟動幀才被識別為有效。
工作報文的最后標志(BCC)與應答報文的啟動(STX)之間的時間間隔為應答延遲時間,最大的應答延遲時間為20ms,但是必須不小于啟動間隔。如果從站在最大允許延時應答時間內沒有響應,主站中存儲一個錯誤信息。
4 系統的軟件實現
系統的軟件設計主要包括:變頻器功能參數的設定,變頻器控制信息的發送和運行狀態的動態顯示,轉速和織物伸長率的設定及處理。
4.1 交流調速器的功能參數設定
在工程實際中,利用PMU控制面板對變頻器的串口進行配置,6SE70型變頻器有SCom1和SCom2兩個串口,工程實際中用SCom1。變頻器串口的配置如附表。
經過上述設置,變頻器應答報文內容如圖4所示。報文的總長度是20字節,PZD域5字,PKW域3字。
4.2 變頻器運行狀態的監控和數據處理的軟件設計
本項目中利用貝加萊2005系列PCC來實現變頻器的監控和數據處理。貝加萊2005系列PCC除了支持標準的通信協議(如485,CAN等)之外,還向用戶提供了用于與第三方產品通信的協議開發工具——幀驅動器,用戶只需要了解第三方產品的通信協議細節(包括信息幀格式的組成等),并用幀驅動器寫出與第三方產品通信協議一樣的通信規則,就可方便地實現PCC與第三方產品之間的通信。幀驅動器存放在應用程序ROM中,它完全控制了通信的硬件部分,而不改變幀的形式。通常數據通信,對數據進行讀寫操作時,用戶必須對端口的細節了解得很清楚,才能通過編程實現對接口各管腳進行的操作。而幀驅動器將這些操作集中起來,用戶不必知道接口的細節(只須知道接口地址),就可以通過幀驅動器命令直接傳輸讀寫數據。其提供的函數如下:
FRM_xopen:初始化接口,為幀驅動器分配緩存,安裝相關的中斷處理程序。
FRM_read:讀數據并將其放在讀緩存區。
FRM_rbuf:釋放讀緩存區。
FRM_gbuf:申請寫緩存區。
FRM_writ:將數據寫入寫緩存區。
FRM_robot:釋放寫緩存區。
FRM_close:接口通信結束。
FRM_ctrl:接口控制。
(1)串口初始化
串口使用前必須初始化,設置串口操作所需要的參數。程序初始化時,需使用FRM_xopen(enable,adr(device),adr(mode),adr(config),status,ident)函數。其中,enable:使能端,為1時,函數才能執行;device:定義接口設備的字符串地址;mode是用來定義接口參數的字符串地址,其字符串格式為:
“[〈TYPE〉>,[〈BAUD〉>,[〈PARITY〉>,[〈DATA BITS〉>,[〈STOP BITS〉>,[〈OPTION〉>”,TYPE為通信接口的類型,要與實際硬件相符;BAUD為波特率;PARITY為校驗類型;DATA BITS為數據位的個數;STOP BITS為停止位的個數;OPTION為可定義硬件握手。Config為接口配置結構的地址;status為數據傳輸狀態標志,0表示沒有錯誤;ident為幀驅動識別號,供所有其它的函數使用,注意該函數對每個接口只能執行一次,應在任務的初始化中調用。
串口初始化程序必須放在程序的初始化部分,即僅在首次掃描時運行初始化程序。本次課題串口初始化程序如下:
strcpy(ADR(bbbbbb_device),"SL2.SS1.IF2");表示模塊地址2號槽的子模塊上的第2個接口
strcpy(ADR(bbbbbb_mode),"RS485,38400,e,8,1");RS-485接口,波特率為38400b/s,1個偶校驗位,8個數據位,1個停止位config_struct.idle=4;最大的空閑時間,單位:一個字符的傳送時間
config_struct.tx_cnt=1;發送緩沖區的數目
config_struct.rx_cnt=1;接收緩沖區的數目
config_struct.tx_len=20;發送緩沖區的最大長度
config_struct.rx_len=20;接收緩沖區的最大長度
config_struct.argc=0;argc/argv:兩個相匹配參數是為定義擴展參數而設置的config_struct.argv=0;初始化接口
FRM_xopen_01.enable=1
FRM_xopen_01.device=ADR(bbbbbb_device)
FRM_xopen_01.mode=ADR(bbbbbb_mode)
FRM_xopen_01.config=ADR(config_struct)
FRM_xopen_01 FUB FRM_xopen();打開接口
status_open=FRM_xopen_01.status;獲取狀態
frm_ident=FRM_xopen_01.ident;獲取幀驅動器識別號
(2)變頻器控制字的發送程序設計
為PCC編寫的控制字發送程序,共有三步,其程序流程圖如圖5所示。

第一步,向幀驅動器申請緩沖區,用FRM_gbuf函數;
第二步,將要發送的數據寫入發送緩沖區。只需將數據依次拷貝到第一步所申請的緩沖區中,用系統庫中的函數STRCPY()或MEMCPY()函數;
第三步,命令驅動器傳輸數據。調用幀驅動器庫函數FRM_writ,由幀驅動器(實際上是硬件)完成寫操作。如果狀態返回值不為零(需判斷),則用函數FRM_rbuf釋放緩存。
部分程序如下:
......
FRM_gbuf_01.enable=1
FRM_gbuf_01.ident=frm_ident
FRM_gbuf_01 FUB FRM_gbuf();申請寫緩存區
send_buffer=FRM_gbuf_01.buffer;獲取發送緩存區地址
send_buffer_length=FRM_gbuf_01.buflng;獲取發送緩存區長度
status_gbuf=FRM_gbuf_01.status;獲取狀態
IF(status_gbuf=0)THEN;判斷狀態
write_data[0>=2;報文頭
write_data[1>=18;報文長度
write_data[2>=3;站地址
write_data[3>=193;十六進制為C1
write_data[4>=178;十六進制為B2(C1B2表示改變參數P434的值)
write_data[5>=0;參數標號為1
write_data[6>=1;
write_data[7>=E;參數值來自觸摸屏伸長率
write_data[8>=F;
write_data[9>=149;控制字為95FF
write_data[10>=255;
write_data[11>=a;給定頻率來自觸摸屏
write_data[12>=b
write_data[13>=c
write_data[14>=d
write_data[15>=0
write_data[16>=0
write_data[17>=0
write_data[18>=0
write_data[19>=write_data[0> XOR write_data[1>XOR write_data[2> XOR write_data[3> XOR write_data[4> XOR write_data[5> XOR write_data[6>XOR write_data[7>XOR write_data[8>XOR write_data[9>XOR write_data[10>XOR write_data[11>XOR write_data[12>XOR write_data[13>XOR write_data[14>XOR write_data[15> XOR write_data[16>XOR write_data[17>XOR write_data[18>
memcpy(send_buffer,ADR(write_data), send_buffer_length);將數據拷貝到發送緩存區
memcpy(send_buffer,ADR(write_data), send_buffer_length)
......
(3)變頻器運行狀態的接收程序設計
由于USS通信協議由一個雙向信息表組成,在向變頻器寫完數據后,須通過幀驅動器的讀指令來讀取變頻器的返回報文。接收數據的過程與發送的過程基本相反,也有如下三步,其程序流程圖如圖6所示。
圖6 變頻器運行狀態的接收程序
第一步,通過幀驅動器從接口讀一幀數據并把它放在一個緩存區中,用FRM_read();
第二步,將數據從緩存區中拷貝到工作區域,使用系統庫中的函數MEMCPY()讀出該緩存區中的數據。
第三步,釋放緩存區以便再使用,用FRM_rbuf()函數來釋放緩存區。
部分程序如下:
......
FRM_read_01.enable=1
FRM_read_01.ident=frm_ident
FRM_read_01 FUB FRM_read();從接口讀取數據
read_buffer=FRM_read_01.buffer;獲取讀緩存區地址
read_buffer_length=FRM_read_01.buflng;獲取讀緩存區長度
status_read=FRM_read_01.status;獲取狀態
IF (status_read=0) THEN
memcpy(ADR(read_data),read_buffer, read_buffer_length);3#應答報文放入read_data3[16>
......
4.3 數據處理
通過串口向變頻器設定參數和從變頻器讀出的實時數據都不是實際值,而是以二進制補碼形式表示的,讀出的二進制值應先轉化為十進制。在西門子變頻器參數里,有參考量這個參數,如速度參考量、電流參考量、電壓的參考量。使用參考量的目的是為了使設定值和實際值以統一的方式里顯示出來。如果參數是雙字,如速度參數,那么參考量就相當于40000000h(1073741824),則實際值應該是(讀出的二進制值/1073741824)×速度參考量;如果參數是單字,如電流參數,那么參考量就相當于4000h(16384),則實際值應該是(讀出的二進制值/16384)×電流參考量。
以下是接收觸摸屏設定速度數據并處理的部分程序:
......
receive=MB4[0>; 觸摸屏設定速度值
g=1500/REAL(receive);將觸摸屏設定速度值轉換為二進制頻率給定值
e=UDINT((REAL($40000000))/g)
a=USINT(SHR(e,24))
b=USINT(SHR(e,16) AND $00FF)
c=USINT(SHR(e,8) AND $0000FF)
d=USINT(e AND $000000FF);處理3#實時數據并送至觸摸屏
a2=read_data2[11>; 從變頻器讀取的頻率二進制值
b2=read_data2[12>
c2=read_data2[13>
d2=read_data2[14>
e2=((SHL(UDINT(a2),24))) or (SHL(UDINT(b2),16)) or (SHL(UDINT(c2),8)) or (UDINT(d2))
f2=REAL(e2)/REAL($40000000); 由頻率二進制值算出實際頻率和轉速
MB4[9>=UINT((f2*1500)); 轉速實際值給觸摸屏,速度參考量為1500
MB4[10>=UINT((f2*50)*100); 頻率實際值給觸摸屏
g2=read_data2[15>; 從變頻器讀取的電壓二進制值
h2=read_data2[16>
i2=((SHL(UINT(g2),8))) or (UINT(h2))
j2=REAL(i2)/REAL($4000); 由電壓二進制值算出實際電壓
MB4[11>=UINT(j2*380); 電壓實際值給觸摸屏,電壓參考量為380
g22=read_data2[17>; 從變頻器讀取的電流二進制值
h22=read_data2[18>
i22=((SHL(UINT(g22),8))) or (UINT(h22))
j22=REAL(i22)/REAL($4000); 由電壓二進制值算出實際電流
MB4[12>=UINT(j22*90); 電壓實際值給觸摸屏,電流參考量為0.9
......
5 結束語
采用USS協議進行多電機同步調速,實際運行證明:在不同的負載、不同的伸長率要求及不同的轉速設定值下,系統的同步性、實時性、可靠性等相當令人滿意。西門子變頻器本身均配置有USS協議通過RS-485口進行串行通訊,無須購置額外的附件進行系統組態,成本大幅度下降。因此,直接利用USS協議對其組網監控,無疑是一條獲得低成本、高性能的好途徑。










