可編程控制器PLC的應用絕大部分都是通過編寫梯形圖的方式實現程序控制的,但對于智能低壓開關系統來講,其分、斷的控制往往要求由主控操作室遠程控制來完成。按傳統的方法,主控室要對某一個開關柜進行操作,須先發一個控制命令,PLC接收到該控制命令后,再由PLC程序執行該命令,該段程序必須用梯形圖或邏輯指令編程,當開關柜數目巨大或要求多路設備同時控制時,PLC的程">

      技術頻道

      串行通訊的PLC遠程控制

      可編程控制器PLC的應用絕大部分都是通過編寫梯形圖的方式實現程序控制的,但對于智能低壓開關系統來講,其分、斷的控制往往要求由主控操作室遠程控制來完成。按傳統的方法,主控室要對某一個開關柜進行操作,須先發一個控制命令,PLC接收到該控制命令后,再由PLC程序執行該命令,該段程序必須用梯形圖或邏輯指令編程,當開關柜數目巨大或要求多路設備同時控制時,PLC的程序編寫就比較復雜,尤其是采用脈沖型輸出控制而不是用電平保持型控制時更是如此。因為開關柜的分、合控制須兩路繼電器輸出分別控制“分閘”和“合閘”,而不是由單路繼電器保持輸出控制,使繼電器輸出與開關柜分合一致??紤]這些因素,本文采用串行通訊實現PLC的控制,PLC本機無須任何梯形圖或邏輯指令,這樣不僅實現簡單而且方便可靠。
      一、低壓監控系統設計
      (一)系統設計要求
      依據用戶的實際要求,智能低壓開關柜不僅能在當地手動進行分、合,而且具有系統零位、時控和遠方控制的功能,其控制回路的電氣控制圖如圖1所示。圖1中SV 為轉換開關,當1、2通時,為當地時控方式;9、10通時為手動方式;5、6通時為遠程控制。當開關柜工作在遠方控制方式時,當PLC輸出觸點#107- #113閉合時,KM線圈加載得電,KM常開觸點閉合,并形成回路使KM線圈始終得電,此時PLC輸出觸點#107-#113釋放,當PLC輸出觸點 #105-115吸合時,KA線圈得電,KA常閉繼電路斷開,使KM線圈回路失電,KM常開觸點斷開,當KM線圈常開觸點斷開后,PLC#1052115 輸出觸點釋放,開關維持斷開狀態。圖中#901-#903作為PLC的輸入觸點。
      (二)設計方案簡述
      本系統針對低壓系統的實際要求設計,實現開關柜的遠程控制。主站通過電力專用modem與遠方子站RTU進行雙向通訊,主站發出控制命令,子站接收主站控制命令并轉發到PLC,并將PLC的執行結果及時反饋給主站,控制時間在1~2s完成。
      監控系統分為三級:主站、變電站當地子站、PLC和儀表設備。主站借助GPS時鐘精確定時,操作員可將任何時候的停電和啟動設置進主站,由主站自動發出控制命令,該監控系統極適合路燈及景觀燈的控制。




      圖1 控制回路的電氣控制原理圖


      二、通訊協議及處理方法
      (一)主站與子站的通訊協議
      主站采用電力系統遠動循環規約與子站進行通信,但遠動循環規約中僅有主站對子站的單點遙控命令,為此主站端必須對CDT規約進行擴展,我們借用遙信報文的格式,將主站端需要控制的低壓開關狀態,用遙信報文下發到子站,為此僅需將下發的遙信報文中的開關狀態內容分析出來,分別放置在yk_road[0]、 yk_road[1]、yk_road[2]、yk_road[3]四個字節中,支持對32路低壓斷路器的控制。報文由同步字、控制字和信息字三部分組成,其格式如下:
      同步字為6個字節:0dbh,09h,0dbh,09h,0dbh,09h;控制字為6個字節:控制字節、幀類別、幀長度、源站址、目的站址、CRC校驗;信息字為幀長度×6個字節,本文因為控制點數在32個以內,所以信息字僅為6個字節:功能碼、1到8組開關柜控制狀態、9到16組開關柜控制狀態、17到24組開關柜控制狀態、備用開關柜控制狀態、CRC校驗。整個控制報文18個字節,這樣既符合CDT規約的通信格式,又不增加RTU的通信報文分析負擔。
      在該規約處理中,關鍵為實時判斷出同步字頭,然后根據幀類別區別遙控選擇命令、遙控執行命令、遙控轍消命令、系統對時和成組開關控制命令,分析出遙控數據存放在yk_road[0]~yk_road[3]中,并置相應標志,再由遠動測量裝置將命令進行分析轉換發給
      PLC。實現該規約的分析方法voidinterruptCntReach1()函數如下:
      voidinterruptCntReach1()/*串口1每收到一個字節中 斷一次的中斷處理程序*/
      { cntreach[1]++; /*每接收一個字節,中斷 接收計數器加1*/
      stat=sio_read(p[1],data,1);/*從串口1緩沖區讀入一 個字節數據放到data[0]中*/
      if(ok[1]==0){/*如未判斷到同步字節,以下分析同步 字頭*/
      switch(tp[1]){
      case0:if(data[0]==0xd7)tp[1]++; break;
      case1:if(data[0]==0x09)tp[1]++;
      else tp[1]=0; break;
      case2:if(data[0]==0xd7)tp[1]++;
      else tp[1]=0; break;
      case3:if(data[0]==0x09)tp[1]++;
      else tp[1]=0; break;
      case4:if(data[0]==0xd7)tp[1]++;
      else tp[1]=0; break;
      case5:if(data[0]==0x09)
      { ok[1]=1;cntreach[1]=0; }
      else tp[1]=0; break;
      default:break; } }
      if((ok[1]==1)&&(cntreach[1]、=0))/*已判斷到同步字頭后,以下分析報文內容*/
      {Rx_buf[1][cntreach[1]-1]=data[0];
      if(cntreach[1]==3)LGn[1]=Rx_buf[1][2];
      if(cntreach[1]>=(LGn[1]*6+6))
      {step_flag[1]=1;/*置報文同步標志*/
      CODE[1]=Rx_buf[1][1]; /*幀類別*/
      switch(CODE[1]){
      case0x61:…/*遙控選擇命令處理*/
      case0xc2:…/*遙控執行命令處理*/
      case0xb3:…/*遙控轍消命令處理*/
      case0x7a:…/*系統對時,*/
      case0xf4:if(Rx_buf[1][6]==0xf0)/*分析出遙控數 據,并置相應標志*/
      if(Rx_buf[1][2]==1)
      {yk_road[0]=Rx_buf[1][7];
      yk_road[1]=Rx_buf[1][8];
      yk_road[2]=Rx_buf[1][9];
      yk_road[3]=Rx_buf[1][10];
      yk.road=1;yx1_state[0]=1;} break;
      default:break;
      }reset_point(1);/*復位各種標志的函數*/
      } }sio_flush(p[1],0); }
      (二)子站與松下PLC的通信協議
      松下PLC通信協議MEWTOCOL2COM為廠家專門設計的協議,采用ASCII碼的方式傳送,用應答方式實現PC機與松下Fp1PLC之間的通信。由子站端RTU發出/命令信息0,FP1PLC響應,其基本格式如圖2。



      其命令代碼Commandcode由2~3個ASCII字符組成,共26種,主要有:RCS為讀一個觸點數據;WCS為寫一個觸點數據;RCP為讀多個觸點數據;WCP為寫多個觸點數據;RS為讀定時器和計數器的設定值;WS為寫定時器和計數器的設定值;RCC為將多個觸點數據以字方式讀入;WCC為將多個觸點數據以字方式寫入;因此,通過對這26種命令組合分析,可以完全構成由遠程對PLC進行控制,而PLC本身無需編寫任何梯形圖。通過分析測試,例如對 PLC下發ASCII數據串“%01#RCCX00000001**\xod”,共19個字節,其中X是輸入數據類型,Y是輸出數據類型,數據串末尾是回車符,必須用\xod代替,其中報文可以不計算BCH校驗碼,用**代替,該報文實現了以字方式讀01號PLC中的輸入從0000到0001數據,共32 路輸入數據。PLC收到該報文后,立即回17個字節的數據串,前6個數據為/%01#RC0,后8個數據為2個字的輸入點數據,每個字數據用4個字節,每個字符可表示4位輸入點的狀態,設計了Read_fp1_input()函數實現報文分析轉換方法。
      對PLC的輸出控制用WCC命令實現,其基本數據串格式為“%01#WCCY000000030000000000000000**/xod”,該報文實現了以字方式置01號PLC中的輸出點從0000到0003數據,控制數據內容為16個字節,每個字符可表示4位輸出點的狀態,共64路輸出數據。因為每個低壓開關柜需要“開”、“斷”2 路輸出控制,實際此命令只可控制32路開關。為了系統可靠,低壓開關設計為脈沖控制型,為此必須用通信命令
      來實現PLC輸出觸點的同時輸出,延時一段后再對PLC進行求反輸出控制。設計Write_fp1_output()函數實現了具體報文轉換成輸出數據下發給PLC的方法。
      Read_fp1_input() /*讀FP1PLC輸入數據的 處理函數*/
      {unsignedcharfp1_read[19]=/%01#RCCX00000001* *\x0d0;intn;
      memcpy(SendBuffer,fp1_read,19);
      receive_ok=0; termintrr=0;count=0;
      sio_putb(p[6],SendBuffer,19);
      while(count<wait_time)
      {if(termintrr)
      {if(Test_buf[6][3]==0x24)
      {Test_buf[6][6]=Asc_to_Hex(Test_buf[6][6]);
      Test_buf[6][7]=Asc_to_Hex(Test_buf[6][7]);
      Test_buf[6][8]=Asc_to_Hex(Test_buf[6][8]);
      Test_buf[6][9]=Asc_to_Hex(Test_buf[6][9]);
      Test_buf[6][10]=Asc_to_Hex(Test_buf[6][10]);
      Test_buf[6][11]=Asc_to_Hex(Test_buf[6][11]);
      Test_buf[6][12]=Asc_to_Hex(Test_buf[6][12]);
      Test_buf[6][13]=Asc_to_Hex(Test_buf[6][13]);
      yx_road[0]=((Test_buf[6][6]&0x0f)*16+Test_buf [6][7]);
      yx_road[1]=((Test_buf[6][8]&0x0f)*16+Test_buf [6][9]);
      yx_road[2]=((Test_buf[6][10]&0x0f)*16+Test_ buf[6][11]);
      yx_road[3]=((Test_buf[6][12]&0x0f)*16+Tes buf[6][13]);
      step_flag[6]=1; count = wait_time+1;
      } } }}
      Asc_to_Hex(charx)/*ASCII碼轉換成十六進制數 */
      { if(x<=0x39)x=x&0x0f; else x=x-“A”+ return x;}
      Hex_to_Asc(charx,inthigh)/*十六進制數的高、 轉換成ASCII碼*/
      {if(high==1)x=((x&0xf0)>>4)&0x0f; else x&0x0f;
      if(x>9)x=x+-A。-10; elsex=x+0x30;
      return(x);}
      Write_fp1_output()/*控制FP1PLC輸出,并合成 沖的處理函數*/
      {unsignedcharfp1_write[35]=/%01#WCCY0000 00000000000000**\x0d0;
      intn;
      memcpy(SendBuffer,fp1_write,35);
      receive_ok=0; termintrr=0; count=0;
      SendBuffer[16]=Hex_to_Asc(~yk_road[0],1);
      SendBuffer[17]=Hex_to_Asc(~yk_road[0],0);
      SendBuffer[18]=Hex_to_Asc(~yk_road[1],1);
      SendBuffer[19]=Hex_to_Asc(~yk_road[1],0);
      SendBuffer[20]=Hex_to_Asc(yk_road[2],0);
      SendBuffer[21]=Hex_to_Asc(~yk_road[2],0);
      SendBuffer[28]=Hex_to_Asc(yk_road[0],1);
      SendBuffer[29]=Hex_to_Asc(yk_road[0],0);
      SendBuffer[30]=Hex_to_Asc(yk_road[1],1);
      SendBuffer[31]=Hex_to_Asc(yk_road[1],0);
      sio_putb(p[6],SendBuffer,35);
      while(count<wait_time)
      {if(termintrr) count=count+1;}
      count=0;
      while(count<36){if(count>30)
      {memcpy(SendBuffer,fp1_write,35);
      receive_ok=0; termintrr=0;
      sio_putb(p[6],SendBuffer,35);
      count=40;
      }}sleep(1);
      Read_fp1_input();/*讀PLC得觸點狀態數據*/
      yx_duiwei();/*遙信數據對位*/
      Send_yx();} /*將遙信數據上送*/
      (三)控制的實現
      我們為系統操作員在主站端設計了兩種控制方式,第1種為手動遙控:在后臺的圖形界面中,點擊進入相應的變電站,再進入路燈和景觀燈所在的控制界面,界面中每一組路燈對應變電站的一個低壓抽屜柜,操作員用鼠標選擇路燈和景觀燈的“開”、“滅”狀態,再將所有的開滅狀態組成字節數據,用CDT報文下發給變電站的 RTU。RTU收到路燈控制命令后,將報文解析和重組,用MEWTOCOL2COM通信協議將控制數據傳送給PLC。PLC將按照系統操作員在后臺的設置執行控制命令,RTU將控制結果及時反饋給主站端,主站端將這一控制過程作為一條記錄存入數據庫,可以事后查詢。第2種控制方式為時控:操作員用鼠標選擇在××年××月××日××時××分或星期幾時的路燈和景觀燈的/開0、/滅0狀態,將這些數據存入數據庫,當設定時間到達時系統自動發出這些數據,系統可以根據RTU的反饋信息確定控制是否成功,并可決定是否重發。
      因為對PLC的控制是在子站RTU完成的,為控制的實時性,我們采用C語言編程實現了對PLC的通信控制,確保PLC中無需編寫任何梯形圖邏輯。由于系統主站與子站之間的通信是基于十六進制數據的CDT規約,而 MEWTOCOL2COM通信協議是基于ASCII碼的數據通信,為此設計了兩個函數用于基于ASCII字符數據的發送和接收。其中發送數據函數 Sio_putb(),其使用格式見Read_fp1_input()程序。另一個數據接收中斷處理處理函數為本設計的關鍵,為方便和可靠,本文設計的中斷觸發信號為“串行口收到回車符(十六進制的0dH)”,確保PLC每應答完一幀完整的報文,RTU才進入中斷處理,并在中斷處理程序中完成報文數據的分析,大大提高了快速性和可靠性。這種方法在基于ASCII字符的通信中極為有效。本文RTU有6個串口,串口1為與主站的全雙工通信通道,串口6為與 PLC通信通道,用sio_term_irq(p[6],TermCome,0x0d);函數指明串口6只有收到回車符(0x0d)才響應中斷 voidinterruptTerm2Come(),其他的為變電站內的微機保護監控裝置、發電機、直流電源屏、變壓器通信通道,本文不做贅述。其中斷函數初始化及中斷處理程序參見文獻。
      三、結語
      利用串行通信實現對PLC的遠程控制,可以方便在主站后臺端改變對底端設備的控制邏輯和運行方式,PLC中無需編寫任何梯形圖程序,這在設備遠程控制中有重要意義。該項目2004年在廈門海滄大橋多個變電站正式投運,達到了設計要求,實現了全橋低壓設備的遠方控制.

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 亚洲成av人片一区二区三区| 国产美女视频一区| 国产综合精品一区二区| 麻豆国产一区二区在线观看| 亚洲一区二区三区免费在线观看| 国产精品一区二区三区久久| 台湾无码一区二区| 精品亚洲AV无码一区二区| 欧洲精品码一区二区三区| 国产在线步兵一区二区三区| 伊人精品视频一区二区三区| 精品无码av一区二区三区| 99国产精品欧美一区二区三区| 亚洲AV无码一区二区三区在线观看 | 日韩在线视频一区| 日本精品啪啪一区二区三区| 国产高清一区二区三区四区| 久久久久无码国产精品一区| 欧美一区内射最近更新| 精品国产AⅤ一区二区三区4区 | 精品国产高清自在线一区二区三区| 国产观看精品一区二区三区| 亚洲综合无码AV一区二区 | 国产av天堂一区二区三区| 亚洲综合无码一区二区三区| 精品视频在线观看一区二区| 亚洲综合无码AV一区二区| 国产情侣一区二区| 国产AV一区二区三区传媒| 成人免费视频一区| 亚洲国产精品无码久久一区二区| 亚洲片国产一区一级在线观看| 亚洲精品精华液一区二区| 日本中文一区二区三区亚洲| 在线视频一区二区三区| 亚洲国产成人久久综合一区77| 日韩视频在线观看一区二区| 亚洲制服丝袜一区二区三区 | 亚洲国产成人一区二区三区| 四虎在线观看一区二区| 国产a∨精品一区二区三区不卡|