可編程控制器PLC的應(yīng)用絕大部分都是通過(guò)編寫梯形圖的方式實(shí)現(xiàn)程序控制的,但對(duì)于智能低壓開(kāi)關(guān)系統(tǒng)來(lái)講,其分、斷的控制往往要求由主控操作室遠(yuǎn)程控制來(lái)完成。按傳統(tǒng)的方法,主控室要對(duì)某一個(gè)開(kāi)關(guān)柜進(jìn)行操作,須先發(fā)一個(gè)控制命令,PLC接收到該控制命令后,再由PLC程序執(zhí)行該命令,該段程序必須用梯形圖或邏輯指令編程,當(dāng)開(kāi)關(guān)柜數(shù)目巨大或要求多路設(shè)備同時(shí)控制時(shí),PLC的程">

      技術(shù)頻道

      串行通訊的PLC遠(yuǎn)程控制

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




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


      二、通訊協(xié)議及處理方法
      (一)主站與子站的通訊協(xié)議
      主站采用電力系統(tǒng)遠(yuǎn)動(dòng)循環(huán)規(guī)約與子站進(jìn)行通信,但遠(yuǎn)動(dòng)循環(huán)規(guī)約中僅有主站對(duì)子站的單點(diǎn)遙控命令,為此主站端必須對(duì)CDT規(guī)約進(jìn)行擴(kuò)展,我們借用遙信報(bào)文的格式,將主站端需要控制的低壓開(kāi)關(guān)狀態(tài),用遙信報(bào)文下發(fā)到子站,為此僅需將下發(fā)的遙信報(bào)文中的開(kāi)關(guān)狀態(tài)內(nèi)容分析出來(lái),分別放置在yk_road[0]、 yk_road[1]、yk_road[2]、yk_road[3]四個(gè)字節(jié)中,支持對(duì)32路低壓斷路器的控制。報(bào)文由同步字、控制字和信息字三部分組成,其格式如下:
      同步字為6個(gè)字節(jié):0dbh,09h,0dbh,09h,0dbh,09h;控制字為6個(gè)字節(jié):控制字節(jié)、幀類別、幀長(zhǎng)度、源站址、目的站址、CRC校驗(yàn);信息字為幀長(zhǎng)度×6個(gè)字節(jié),本文因?yàn)榭刂泣c(diǎn)數(shù)在32個(gè)以內(nèi),所以信息字僅為6個(gè)字節(jié):功能碼、1到8組開(kāi)關(guān)柜控制狀態(tài)、9到16組開(kāi)關(guān)柜控制狀態(tài)、17到24組開(kāi)關(guān)柜控制狀態(tài)、備用開(kāi)關(guān)柜控制狀態(tài)、CRC校驗(yàn)。整個(gè)控制報(bào)文18個(gè)字節(jié),這樣既符合CDT規(guī)約的通信格式,又不增加RTU的通信報(bào)文分析負(fù)擔(dān)。
      在該規(guī)約處理中,關(guān)鍵為實(shí)時(shí)判斷出同步字頭,然后根據(jù)幀類別區(qū)別遙控選擇命令、遙控執(zhí)行命令、遙控轍消命令、系統(tǒng)對(duì)時(shí)和成組開(kāi)關(guān)控制命令,分析出遙控?cái)?shù)據(jù)存放在yk_road[0]~yk_road[3]中,并置相應(yīng)標(biāo)志,再由遠(yuǎn)動(dòng)測(cè)量裝置將命令進(jìn)行分析轉(zhuǎn)換發(fā)給
      PLC。實(shí)現(xiàn)該規(guī)約的分析方法voidinterruptCntReach1()函數(shù)如下:
      voidinterruptCntReach1()/*串口1每收到一個(gè)字節(jié)中 斷一次的中斷處理程序*/
      { cntreach[1]++; /*每接收一個(gè)字節(jié),中斷 接收計(jì)數(shù)器加1*/
      stat=sio_read(p[1],data,1);/*從串口1緩沖區(qū)讀入一 個(gè)字節(jié)數(shù)據(jù)放到data[0]中*/
      if(ok[1]==0){/*如未判斷到同步字節(jié),以下分析同步 字頭*/
      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))/*已判斷到同步字頭后,以下分析報(bào)文內(nèi)容*/
      {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;/*置報(bào)文同步標(biāo)志*/
      CODE[1]=Rx_buf[1][1]; /*幀類別*/
      switch(CODE[1]){
      case0x61:…/*遙控選擇命令處理*/
      case0xc2:…/*遙控執(zhí)行命令處理*/
      case0xb3:…/*遙控轍消命令處理*/
      case0x7a:…/*系統(tǒng)對(duì)時(shí),*/
      case0xf4:if(Rx_buf[1][6]==0xf0)/*分析出遙控?cái)?shù) 據(jù),并置相應(yīng)標(biāo)志*/
      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);/*復(fù)位各種標(biāo)志的函數(shù)*/
      } }sio_flush(p[1],0); }
      (二)子站與松下PLC的通信協(xié)議
      松下PLC通信協(xié)議MEWTOCOL2COM為廠家專門設(shè)計(jì)的協(xié)議,采用ASCII碼的方式傳送,用應(yīng)答方式實(shí)現(xiàn)PC機(jī)與松下Fp1PLC之間的通信。由子站端RTU發(fā)出/命令信息0,F(xiàn)P1PLC響應(yīng),其基本格式如圖2。



      其命令代碼Commandcode由2~3個(gè)ASCII字符組成,共26種,主要有:RCS為讀一個(gè)觸點(diǎn)數(shù)據(jù);WCS為寫一個(gè)觸點(diǎn)數(shù)據(jù);RCP為讀多個(gè)觸點(diǎn)數(shù)據(jù);WCP為寫多個(gè)觸點(diǎn)數(shù)據(jù);RS為讀定時(shí)器和計(jì)數(shù)器的設(shè)定值;WS為寫定時(shí)器和計(jì)數(shù)器的設(shè)定值;RCC為將多個(gè)觸點(diǎn)數(shù)據(jù)以字方式讀入;WCC為將多個(gè)觸點(diǎn)數(shù)據(jù)以字方式寫入;因此,通過(guò)對(duì)這26種命令組合分析,可以完全構(gòu)成由遠(yuǎn)程對(duì)PLC進(jìn)行控制,而PLC本身無(wú)需編寫任何梯形圖。通過(guò)分析測(cè)試,例如對(duì) PLC下發(fā)ASCII數(shù)據(jù)串“%01#RCCX00000001**\xod”,共19個(gè)字節(jié),其中X是輸入數(shù)據(jù)類型,Y是輸出數(shù)據(jù)類型,數(shù)據(jù)串末尾是回車符,必須用\xod代替,其中報(bào)文可以不計(jì)算BCH校驗(yàn)碼,用**代替,該報(bào)文實(shí)現(xiàn)了以字方式讀01號(hào)PLC中的輸入從0000到0001數(shù)據(jù),共32 路輸入數(shù)據(jù)。PLC收到該報(bào)文后,立即回17個(gè)字節(jié)的數(shù)據(jù)串,前6個(gè)數(shù)據(jù)為/%01#RC0,后8個(gè)數(shù)據(jù)為2個(gè)字的輸入點(diǎn)數(shù)據(jù),每個(gè)字?jǐn)?shù)據(jù)用4個(gè)字節(jié),每個(gè)字符可表示4位輸入點(diǎn)的狀態(tài),設(shè)計(jì)了Read_fp1_input()函數(shù)實(shí)現(xiàn)報(bào)文分析轉(zhuǎn)換方法。
      對(duì)PLC的輸出控制用WCC命令實(shí)現(xiàn),其基本數(shù)據(jù)串格式為“%01#WCCY000000030000000000000000**/xod”,該報(bào)文實(shí)現(xiàn)了以字方式置01號(hào)PLC中的輸出點(diǎn)從0000到0003數(shù)據(jù),控制數(shù)據(jù)內(nèi)容為16個(gè)字節(jié),每個(gè)字符可表示4位輸出點(diǎn)的狀態(tài),共64路輸出數(shù)據(jù)。因?yàn)槊總€(gè)低壓開(kāi)關(guān)柜需要“開(kāi)”、“斷”2 路輸出控制,實(shí)際此命令只可控制32路開(kāi)關(guān)。為了系統(tǒng)可靠,低壓開(kāi)關(guān)設(shè)計(jì)為脈沖控制型,為此必須用通信命令
      來(lái)實(shí)現(xiàn)PLC輸出觸點(diǎn)的同時(shí)輸出,延時(shí)一段后再對(duì)PLC進(jìn)行求反輸出控制。設(shè)計(jì)Write_fp1_output()函數(shù)實(shí)現(xiàn)了具體報(bào)文轉(zhuǎn)換成輸出數(shù)據(jù)下發(fā)給PLC的方法。
      Read_fp1_input() /*讀FP1PLC輸入數(shù)據(jù)的 處理函數(shù)*/
      {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碼轉(zhuǎn)換成十六進(jìn)制數(shù) */
      { if(x<=0x39)x=x&0x0f; else x=x-“A”+ return x;}
      Hex_to_Asc(charx,inthigh)/*十六進(jìn)制數(shù)的高、 轉(zhuǎn)換成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輸出,并合成 沖的處理函數(shù)*/
      {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得觸點(diǎn)狀態(tài)數(shù)據(jù)*/
      yx_duiwei();/*遙信數(shù)據(jù)對(duì)位*/
      Send_yx();} /*將遙信數(shù)據(jù)上送*/
      (三)控制的實(shí)現(xiàn)
      我們?yōu)橄到y(tǒng)操作員在主站端設(shè)計(jì)了兩種控制方式,第1種為手動(dòng)遙控:在后臺(tái)的圖形界面中,點(diǎn)擊進(jìn)入相應(yīng)的變電站,再進(jìn)入路燈和景觀燈所在的控制界面,界面中每一組路燈對(duì)應(yīng)變電站的一個(gè)低壓抽屜柜,操作員用鼠標(biāo)選擇路燈和景觀燈的“開(kāi)”、“滅”狀態(tài),再將所有的開(kāi)滅狀態(tài)組成字節(jié)數(shù)據(jù),用CDT報(bào)文下發(fā)給變電站的 RTU。RTU收到路燈控制命令后,將報(bào)文解析和重組,用MEWTOCOL2COM通信協(xié)議將控制數(shù)據(jù)傳送給PLC。PLC將按照系統(tǒng)操作員在后臺(tái)的設(shè)置執(zhí)行控制命令,RTU將控制結(jié)果及時(shí)反饋給主站端,主站端將這一控制過(guò)程作為一條記錄存入數(shù)據(jù)庫(kù),可以事后查詢。第2種控制方式為時(shí)控:操作員用鼠標(biāo)選擇在××年××月××日××?xí)r××分或星期幾時(shí)的路燈和景觀燈的/開(kāi)0、/滅0狀態(tài),將這些數(shù)據(jù)存入數(shù)據(jù)庫(kù),當(dāng)設(shè)定時(shí)間到達(dá)時(shí)系統(tǒng)自動(dòng)發(fā)出這些數(shù)據(jù),系統(tǒng)可以根據(jù)RTU的反饋信息確定控制是否成功,并可決定是否重發(fā)。
      因?yàn)閷?duì)PLC的控制是在子站RTU完成的,為控制的實(shí)時(shí)性,我們采用C語(yǔ)言編程實(shí)現(xiàn)了對(duì)PLC的通信控制,確保PLC中無(wú)需編寫任何梯形圖邏輯。由于系統(tǒng)主站與子站之間的通信是基于十六進(jìn)制數(shù)據(jù)的CDT規(guī)約,而 MEWTOCOL2COM通信協(xié)議是基于ASCII碼的數(shù)據(jù)通信,為此設(shè)計(jì)了兩個(gè)函數(shù)用于基于ASCII字符數(shù)據(jù)的發(fā)送和接收。其中發(fā)送數(shù)據(jù)函數(shù) Sio_putb(),其使用格式見(jiàn)Read_fp1_input()程序。另一個(gè)數(shù)據(jù)接收中斷處理處理函數(shù)為本設(shè)計(jì)的關(guān)鍵,為方便和可靠,本文設(shè)計(jì)的中斷觸發(fā)信號(hào)為“串行口收到回車符(十六進(jìn)制的0dH)”,確保PLC每應(yīng)答完一幀完整的報(bào)文,RTU才進(jìn)入中斷處理,并在中斷處理程序中完成報(bào)文數(shù)據(jù)的分析,大大提高了快速性和可靠性。這種方法在基于ASCII字符的通信中極為有效。本文RTU有6個(gè)串口,串口1為與主站的全雙工通信通道,串口6為與 PLC通信通道,用sio_term_irq(p[6],TermCome,0x0d);函數(shù)指明串口6只有收到回車符(0x0d)才響應(yīng)中斷 voidinterruptTerm2Come(),其他的為變電站內(nèi)的微機(jī)保護(hù)監(jiān)控裝置、發(fā)電機(jī)、直流電源屏、變壓器通信通道,本文不做贅述。其中斷函數(shù)初始化及中斷處理程序參見(jiàn)文獻(xiàn)。
      三、結(jié)語(yǔ)
      利用串行通信實(shí)現(xiàn)對(duì)PLC的遠(yuǎn)程控制,可以方便在主站后臺(tái)端改變對(duì)底端設(shè)備的控制邏輯和運(yùn)行方式,PLC中無(wú)需編寫任何梯形圖程序,這在設(shè)備遠(yuǎn)程控制中有重要意義。該項(xiàng)目2004年在廈門海滄大橋多個(gè)變電站正式投運(yùn),達(dá)到了設(shè)計(jì)要求,實(shí)現(xiàn)了全橋低壓設(shè)備的遠(yuǎn)方控制.

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 狠狠综合久久av一区二区| 日韩好片一区二区在线看| 国产精品亚洲不卡一区二区三区| 中文字幕在线视频一区| 伊人久久一区二区三区无码| 无码国产精品一区二区免费虚拟VR| 日韩一区二区三区在线观看 | 精品国产一区二区三区久| 99精品国产高清一区二区三区| 国产一区二区草草影院| 无码一区二区三区爆白浆| 97精品国产一区二区三区| 91视频一区二区| 亚洲AV日韩综合一区尤物| 人妻av无码一区二区三区| 麻豆一区二区99久久久久| 人妻无码视频一区二区三区| 夜夜添无码一区二区三区| 午夜视频久久久久一区| 国产高清在线精品一区小说| 濑亚美莉在线视频一区| 国产一区二区三区在线观看影院| 国产精品区一区二区三| 免费在线观看一区| 一区视频免费观看| 日韩精品无码久久一区二区三| 国产精品免费综合一区视频| 亚洲av高清在线观看一区二区| 亚洲国模精品一区| 亚洲av一综合av一区| 亚洲Av永久无码精品一区二区 | 国产美女在线一区二区三区| 中文无码一区二区不卡αv| 日韩一区二区三区在线| 人妻无码一区二区三区四区| 精品视频一区二区三区在线观看| 在线视频一区二区三区| 日韩在线一区高清在线| 国产伦理一区二区| 国产精品日韩欧美一区二区三区| 亚洲av片一区二区三区|