• <blockquote id="fficu"><optgroup id="fficu"></optgroup></blockquote>

    <table id="fficu"></table>

    <sup id="fficu"></sup>
    <output id="fficu"></output>
    1. ABB
      關(guān)注中國自動(dòng)化產(chǎn)業(yè)發(fā)展的先行者!
      CAIAC 2025
      2025工業(yè)安全大會(huì )
      OICT公益講堂
      當前位置:首頁(yè) >> 案例 >> 案例首頁(yè)

      案例頻道

      西門(mén)子S7-300 PLC與模擬屏串行通信
      1  引言

          模擬屏能簡(jiǎn)單、明了地反映現場(chǎng)的實(shí)時(shí)數據和狀態(tài)信息,應用十分廣泛。為了使現場(chǎng)信息及時(shí)、準確、動(dòng)態(tài)地顯示在模擬屏上,要求數據采集設備和模擬屏之間進(jìn)行通信。

          現場(chǎng)信息量比較大,如果每個(gè)信號都獨立連接到模擬屏,信號線(xiàn)數量多、耗線(xiàn)多,不經(jīng)濟,走線(xiàn)不便,故障率高,采用串行通信可克服以上缺點(diǎn)。

          現在通信方式多種多樣、速度越來(lái)越快,但串行通信在控制范疇一直占據著(zhù)極其重要的地位。它不僅沒(méi)有因時(shí)代的進(jìn)步而淘汰,反而在規格上越來(lái)越完善、應用越來(lái)越廣,長(cháng)久不衰。與并行通信相比,它傳輸速度慢(并行一次傳8位,串行傳1位),但并行通信數據電壓傳輸過(guò)程中,容易因線(xiàn)路因素使標準電位發(fā)生變化(常見(jiàn)的電壓衰減、信號間互相串音干擾)。傳輸距離越遠,問(wèn)題越嚴重、數據錯誤越容易發(fā)生。相比之下,串行通信處理的數據電壓只有一個(gè)標準電位,數據不易漏失。
          
          常用的串行通信有兩種,一種為rs232,另一種為rs422/485。工業(yè)環(huán)境常會(huì )有噪聲干擾傳輸線(xiàn)路,在用rs232進(jìn)行數據傳輸時(shí),經(jīng)常會(huì )受到外界電氣干擾而使信號發(fā)生錯誤。rs232串行通信的信號標準電位是參考接地端而來(lái)的,干擾信號在原始信號和地線(xiàn)上均會(huì )產(chǎn)生影響,原始信號加上干擾信號后,依然傳送到接收端,而地線(xiàn)部分的信號則不能傳送到接收端。因此,信號便發(fā)生了扭曲。rs422/485傳輸的是差分信號,在發(fā)送端分成正負兩部分,到達接收端通過(guò)相減,還原成原來(lái)信號,兩條信號線(xiàn)受到的干擾的程度相同,這就防止了噪聲干擾。本文以plc和模擬屏通信為例介紹通過(guò)rs485實(shí)現點(diǎn)對點(diǎn)串行通信。

      2  模擬屏的通信規約及設備

      (1) 通信規約

          rs232c/485串行口:速率9600bps,1位起始位,8位數據位,1位停止位,無(wú)奇偶校驗位;傳輸報文內容以字節為單位,在信道中的傳送順序是:低字節先送,高字節后送;字節內低位先送,高位后送;數據格式為16進(jìn)制數;異步通信。

      (2) 設備

          開(kāi)關(guān)量處理器;開(kāi)關(guān)量指示燈;模擬量處理器;模擬量顯示器;時(shí)鐘;通信處理器;中央控制器。

      3  信息傳輸途徑設備和功能

          (1) 途徑:數據采集通過(guò)plc完成,plc向模擬屏傳輸數據,控制模擬屏狀態(tài)。rs485連接圖如圖1所示:


      圖1     rs485連接電纜圖

          (2) 主要相關(guān)設備:中央處理器cpu 314;點(diǎn)到點(diǎn)通信模塊cp341-rs422/485。

          (3) 功能:—向模擬屏發(fā)送模擬量數據;—向模擬屏發(fā)送開(kāi)關(guān)量信息;—控制屏狀態(tài),包括:全屏亮暗、全屏信號分合、 變位幀閃光;—設定和改變時(shí)鐘時(shí)間。

      4  通信實(shí)現的方法

      4.1  初始化
          就串行通信而言,交換數據的雙方利用傳輸在線(xiàn)的電壓改變來(lái)達到數據交換的目的。如何從不斷改變的電壓狀態(tài)中解析出其中的信息,雙方必須有一套共同的譯碼方式,遵守一定的通信規則。這就是通信端口初始化。

          通信端口初始化有以下幾個(gè)項目必須設置或確認:

      (1) 通信模式

          串行通信分同步和異步兩種模式。同步傳輸在通信的兩端使用同步信號作為通信的依據,異步傳輸則使用起始位和停止位作為通信的判斷。模擬屏通信模式:異步傳輸;西門(mén)子plc通信模式:異步傳輸;二者通信模式相同。

      (2) 數據的傳輸速率

          異步通信雙方并沒(méi)有一個(gè)可參考的同步時(shí)鐘作為基準。這樣雙方傳送的高低電位代表幾個(gè)位就不得而知了。要使雙方的數據讀取正常,就要考慮到傳輸速率。收發(fā)雙方通過(guò)傳輸在線(xiàn)的電壓改變來(lái)交換數據,但發(fā)送端發(fā)送的電壓改變的速率必須和接收端的接受速率保持一致。模擬屏的通信速率:9600bps;西門(mén)子plc通信速率:600bps,1200bps,2400bps,4800bps,9600bps,19200bps,38400bps,57600bps,76800bps。初始化,將plc波特率設為:9600bps

      (3) 起始位及停止位

          當發(fā)送端準備發(fā)送數據時(shí),會(huì )在所送出的字符前后分別加上高電位的起始位及低電位的停止位。接收端會(huì )因起始位的觸發(fā)而開(kāi)始接收數據,并因停止位的通知而確定數據的字符信號已經(jīng)結束。起始位固定為1位,而停止位則有1,1.5,2等多種選擇。模擬屏的停止位: 1位;西門(mén)子plc的停止位:1位或2位。初始化,將plc數據停止位設為:1位。

      (4) 數據的發(fā)送單位

          不同的協(xié)議會(huì )用到不同的發(fā)送單位(歐美一般用8位、日本一般用7位組成一字節),使用幾位合成一字節,雙方必須一致。模擬屏的數據發(fā)送單位: 8位為一字節;西門(mén)子plc的數據發(fā)送單位:7位或8位為一字節。初始化,將plc數據發(fā)送單位設為:8位。

      (5) 校驗位的檢查

          為了預防錯誤的產(chǎn)生,使用校驗位作為檢查的機制。校驗位是用來(lái)檢查所發(fā)送數據正確性的一種校對碼,它分奇偶校驗,也可無(wú)校驗。模擬屏校驗位:none;西門(mén)子plc校驗位:none,odd,even;初始化,將plc校驗位設為:none。

      (6) 工作模式

          交換數據是通過(guò)一定的通信線(xiàn)路來(lái)實(shí)現的。微機在進(jìn)行數據的發(fā)送和接收時(shí)通信線(xiàn)路上的數據流動(dòng)方式有三種:單工、半雙工、全雙工。rs232和rs422使用全雙工模式,rs485使用半雙工模式。模擬屏工作模式:rs232全雙工/rs485半雙工;西門(mén)子plc工作模式:rk512 全雙工四線(xiàn)制(rs422);3964r全雙工四線(xiàn)制(rs422);ascii全雙工四線(xiàn)制(rs422);ascii半雙工兩線(xiàn)制(rs 485);初始化,將plc工作模式設為:ascii半雙工兩線(xiàn)制(rs485)。

      (7) 數據流控制—握手

          傳輸工作進(jìn)行時(shí),發(fā)送速度若大于接收速度,而接收端的cpu處理速度不夠快時(shí),接收緩沖區就會(huì )在一定時(shí)間后溢滿(mǎn),造成后來(lái)發(fā)送過(guò)來(lái)的數據無(wú)法進(jìn)入緩沖區而漏失。采用數據流控制,就是為了保證傳輸雙方能正確地發(fā)送和接收數據,而不會(huì )漏失。數據流控制一般稱(chēng)為握手,握手分為硬件握手和軟件握手。模擬屏數據流控制:none;西門(mén)子plc數據流控制:none。要通過(guò)用戶(hù)程序詢(xún)問(wèn)和控制。

      (8) 錯誤預防—校驗碼

          在傳輸的過(guò)程中,數據有可能受到干擾而使原來(lái)的數據信號發(fā)生扭曲。為了監測數據在發(fā)送過(guò)程中的錯誤,必須對數據作進(jìn)一步的確認工作,最簡(jiǎn)單的方式就是使用校驗碼。模擬屏校驗碼:異或校驗和。要在plc上編校驗碼程序。

      4.2  數據發(fā)送

          (1) 將同步字及測量值db36.dbw21開(kāi)始的數據送到db42.dbw12開(kāi)始的數據區去,為向串口發(fā)送做準備。程序如下:
      遙測第一幀(fc36)

          l  w#16#eb90 

          傳送兩次同步字eb90,分別給db42.dbw12和db42.dbw14

          t  db42.dbw12     

          l  w#16#eb90     

          t  db42.dbw14   

          l  b#16#61         

          //將報文類(lèi)型字“61”送給db42.dbb16

          t  db42.dbb16  

          l  w#16#100        

          //第一幀將起始地址“0100”送給db42.dbw17

          t  db42.dbw17   

          //第二幀將起始地址“0120”送給db42.dbw17

          l  w#16#40         

          //將正文字節數“40”(64字節)送給db42.dbw19

          t  db42.dbw19      

          l  db36.dbw21        

          //第一幀將db36.dbw21開(kāi)始的32個(gè)字的模擬量

          caw 送到db42.dbw21開(kāi)始的區域

          t  db42.dbw21      

          l  db36.dbw23      

          caw                

          t  db42.dbw23      

          …………………   

          l  db36.dbw83      

          caw                

          t  db42.dbw83      

          opn  db42            //遙信校驗

          l  p#17.0            //第二幀與第一幀相同

          t  md100

          l  dbw[md100]

          t  mw10

          l  33

          t  mw16

          l  mw16

          next: t  mw12

          l  m

          d100

          l  p#2.0

          +d

          t  md100

          l  dbw[md100]

          l  mw10

          xow

          t  mw10

          l  mw12

          loop  next

          l  md100

          l  p#2.0

          +d

          t  md100

          l  mw10

          t  mw14

          l  mw14

          slw  8

          t  dbw[md100]

          l  mw10

          aw  w#16#ff00

          t  mw10

          l  mw10

          l  dbw[md100]

          xow

          t  dbw[md100]

          l  dbw16

          t  mw18

          l  mw18

          aw  w#16#ff00

          t  mw18

          l  mw18

          l  dbw[md100]

          xow

          t  dbw[md100]

          (2) 將db42.dbw12開(kāi)始,長(cháng)度為95個(gè)字的數據送到串行端口,程序如下:

          //supply  laddr, db_no,dbb_no,len

          l  256                     // laddr

          t  db40.dbw2

          l  42                      // db_no

          t  db40.dbw4

          t  db42.dbw4

          l  12                      // dbb_no

          t  db40.dbw6

          t  db42.dbw6

          l  95                      // len

          t  db40.dbw8

          t  db42.dbw8

          //send  with  instance-db

          call  fb8  ,  db21

          sf        :=’s’

          req      :=db40.dbx0.0

          r         :=db40.dbx0.1

          laddr   :=db40.dbw2

          db_no   :=db40.dbw4

          dbb_no  :=db40.dbw6

          len      :=db40.dbw8

          r_cpu_no:=

          r_typ    :=

          r_no     :=

          r_offset :=

          r_cf_byt :=

          r_cf_bit :=

          done    :=db40.dbx0.4

          error   :=db40.dbx0.5

          status   :=db40.dbw12

          // generate  edge  p_snd_rk_req

          an  db40.dbx0.0   // p_snd_rk_req

          s  db40.dbx0.0  

          // set  p_snd_rk_req

          o  db40.dbx0.4   // p_snd_rk_done

          o  db40.dbx0.5  // p_snd_rk_error

          r  db40.dbx0.0  // p_snd_rk_req

          // check  “complete  without  error”

          an  db40.dbx0.4           

          // check  p_snd_rk_done  if  p_snd_rk_done  equals 0,

          jc  cher    

          // jump to cher and check  p_snd_rk_error

          //”complete without error”

          // p_snd_rk_done=1

          l  db42.dbw0 

          //“complete  without  error”

          +1  // increment  counter

          t  db42.dbw0

          nop //further  user  function

          nop

          nop

          be

          // check  “complete  with  error”

          // p_snd_rk_error=1

          cher: an  db40.dbx0.5          

          //check  p_snd_rk_error

          bec //if no error occurred, jump to end

          //“complete  with  error”

          l  db42.dbw2 

          //“complete  with  error”

          +1   //increment  counter

          t  db42.dbw2

          l  db40.dbw12

          t  db40.dbw14 //save  status

          nop   //error-handling

          nop

          nop

          be

          (3) 數據刷新,程序如下:

          an  m2.4

          l    s5t#100ms

          sd  t0

          a   t0

          jnb  _007

          l    w#16#1

          l    md4

          rrd

          t    md4

          set

          save

          clr

          _007: a  br

          =   l20.0

          a   l20.0

          a(

          l  md4

          l  l#0

          ==d

          )

          jnb   _008

          l    1

          t    md4

          _008: nop 0

          a    l20.0

          bld  102

          = m2.4

          a(

          o  m5.0

          o  m6.4

          )

          jnb  _003

          call  fc36

          _003: nop 0

          a(

          o  m4.0

          o  m5.4

          )

          jnb  _004

          call  fc38

          _004: nop 0

      熱點(diǎn)新聞

      推薦產(chǎn)品

      x
      • 在線(xiàn)反饋
      1.我有以下需求:



      2.詳細的需求:
      姓名:
      單位:
      電話(huà):
      郵件:
      欧美精品欧美人与动人物牲交_日韩乱码人妻无码中文_国产私拍大尺度在线视频_亚洲男人综合久久综合天

    2. <blockquote id="fficu"><optgroup id="fficu"></optgroup></blockquote>

      <table id="fficu"></table>

      <sup id="fficu"></sup>
      <output id="fficu"></output>