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

    案例頻道

    PPI協(xié)議代替工控組態(tài)軟件采集數(shù)據(jù)
    • 企業(yè):控制網(wǎng)    
    • 點擊數(shù):1660     發(fā)布時間:2006-08-17 21:39:13
    • 分享到:
    利用西門子S7-200 PLC內(nèi)置的PPI協(xié)議的部分功能和VB ,可以做出簡單實用的控制和采集系統(tǒng),可以代替一些小型的工控組態(tài)系統(tǒng)。
    1        前言
           西門子S7-200系列可編程控制器(PLC)是控制領(lǐng)域應(yīng)用最廣的小型PLC之一,它支持兩種與計算機通信方式:自由端口,PPI方式使用自由口方式進行編程時,必須定義自己的通訊協(xié)議,在上位機和PLC中都要編寫數(shù)據(jù)通信程序,占用PLC的內(nèi)存。使用PPI協(xié)議進行通信時,PLC可以不用編程,而且可讀寫所有數(shù)據(jù)區(qū),快捷方便。但是西門子公司沒有公布PPI協(xié)議的格式。用戶如果想使用PPI協(xié)議,必須購買西門子的協(xié)議模塊或其它廠家的組態(tài)軟件。只對于一些小型系統(tǒng)來說成本比較高,若只應(yīng)用幾個數(shù)據(jù),就購買一套軟件,實在是浪費。利用S7-200內(nèi)置的PPI協(xié)議,開發(fā)自己的控制或采集系統(tǒng)不愧是一個捷徑。
    2        部分PPI協(xié)議格式
    SD
    LE
    LEr
    SD
    DA
    SA
    FC
    DSAP
    SSAP
    DU
    FCS
    ED
    SD:(Start Delimiter)開始定界符(68H)
    LE:(Length)報文數(shù)據(jù)長度
    LER:(Repeated Length)重復(fù)報文數(shù)據(jù)長度(從DA到DU)
    SD: (Start Delimiter)開始定界符(68H)
    SA:(Source Address)數(shù)據(jù)源站地址
    DA:(Destination Address)數(shù)據(jù)目標(biāo)站地址
    FC:(Function Code)功能碼
    DSAP:(Destination Service Access Point)目的服務(wù)存取點
    SSAP:(Source Service Access Point)源服務(wù)存取點
    DU:(Data Unit)數(shù)據(jù)單元
    FCS:校驗碼(從DA到DU數(shù)據(jù)和)
    ED:(End  Code)結(jié)束碼(16H)
    3        通訊過程
            從計算機上的COM口通過一條PC/PPI編程電纜連到PLC的編程口上(最小的系統(tǒng)要求),計算機(為主,地址為00)與PLC(為從,地址為02)采用主從方式通訊,具體過程如下圖所示,一次讀寫操作的步驟包括:(1)首先主機(計算機)發(fā)出讀寫命令,(2)從機(PLC)作出接收正確的響應(yīng)(E5),(3)主機接到此響應(yīng)則發(fā)出確認指令(10 02 00 5C 5E 16),(4)PLC回應(yīng)給上位機數(shù)據(jù)。這樣收發(fā)兩次數(shù)據(jù),完成一次數(shù)據(jù)的讀寫。

     
     
     
    讀寫指令實例

    4.1  讀指令實例
          對于一次讀取一個數(shù)據(jù),讀命令都是33個字節(jié)。前面的0―21字節(jié)是相同的,SA=00,DA=02(PLC缺省地址),如果有多個站,DA要改成相應(yīng)的站號。讀命令中從DA到DU的長度為1B即27個字節(jié)。從22字節(jié)開始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。下表是讀不同存儲器命令的Byte22―32。
    字節(jié)
    22
    24
    25
    26
    27
    28
    29
    30
    31
    32
    功能
    讀取長度
    數(shù)據(jù)個數(shù)
    數(shù)據(jù)類型
    數(shù)據(jù)地址
    校驗
    結(jié)束
    讀VB100
    02
    01
    00
    01
    84
    00
    03
    20
    8B
    16
    讀VW100
    04
    01
    00
    01
    84
    00
    03
    20
    8D
    16
    讀vd100
    06
    01
    00
    01
    84
    00
    03
    20
    8F
    16
    讀命令的Byte22-32
           實際輸出指令:讀VB100,Byte28-30 為100*8=&H0320
    68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16
    4.2  寫指令實例:
    一次寫一個類型的數(shù)據(jù)V100,寫V區(qū)地址 Byte28-30 為100*8=&H0320
    寫VB100(16):
    68 20 20 68 2 0 6C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 4 0 8 10 B9 16
    寫VW100(16):
    68 21 21 68 2 0 6C 32 1 0 0 0 0 0 E 0 6 5 1 12 A 10 4 0 1 0 1 84 0 3 20 0 4 0 10 0 10 B9 16
    寫VD100(16):
    68 23 23 68 2 0 6C 32 1 0 0 0 0 0 E 0 8 5 1 12 A 10 6 0 1 0 1 84 0 3 20 0 4 0 20 0 0 0 10 B9 16
    Byte 22-- Byte 30 寫入數(shù)據(jù)的長度、存儲器類型、存儲器偏移量與讀命令相同。Byte 35-38 寫入數(shù)據(jù)的位數(shù)。
    5        應(yīng)用實例
            在鋼管制造行業(yè),水壓靜載試驗機(簡稱水壓機)是必備的檢驗和試驗設(shè)備。因為美國石油協(xié)會的API標(biāo)準(zhǔn)《管線鋼管 Spec 5L》和國家標(biāo)準(zhǔn)GB/T9711-1997規(guī)定,螺旋焊管和直縫焊管必須經(jīng)過規(guī)定的靜水壓試驗,并且保存水壓過程的壓力曲線。該系統(tǒng)原來是用MCGS工控組態(tài)軟件+VB程序來完成的,采集速度較慢,最多一秒鐘采集一個,比較緩慢。現(xiàn)用VB語言,通過PPI協(xié)議直接采集PLC的水壓值進行處理,簡潔又迅速,懷可以開發(fā)出多種功能。采用PPI電纜將計算機COM1口與PLC的PORT0編程口連接,通訊系統(tǒng)采用主從結(jié)構(gòu),通訊協(xié)議遵循PPI協(xié)議格式,計算機發(fā)出讀寫申請,PLC返回相應(yīng)的數(shù)據(jù)。程序?qū)崿F(xiàn)如下
    5.1   初始化程序
    Private Sub Form_Load()
    With MSComm1
    .CommPort = 1
    .Settings = "9600,e,8,1" ‘波特率9600,偶校驗,8數(shù)據(jù)位,1停止位
    .InputLen = 0
    .RThreshold = 1  ‘收到字符就產(chǎn)生事件
    .InputMode = comInputModeBinary   ‘二進制接收模式
    End With
    If MSComm1.PortOpen = False Then
    MSComm1.PortOpen = True  ‘打開通訊串口
    End If
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then
    MSComm1.PortOpen = False  ‘關(guān)閉通訊串口
    End If
    End Sub
    5.2   讀VW函數(shù)
    Function ppird(readaddress As String)  ‘讀VW的地址,例如:1000
     
    Dim i As Integer, temp As Integer
    Dim sendbyte(32) As Byte
    sendbyte(0) = &H68
    sendbyte(1) = &H1B
    sendbyte(2) = &H1B
    sendbyte(3) = &H68
    sendbyte(4) = &H2
    sendbyte(5) = &H0
    sendbyte(6) = &H6C
    sendbyte(7) = &H32
    sendbyte(8) = &H1
    sendbyte(9) = &H0
    sendbyte(10) = &H0
    sendbyte(11) = &H0
    sendbyte(12) = &H0
    sendbyte(13) = &H0
    sendbyte(14) = &HE
    sendbyte(15) = &H0
    sendbyte(16) = &H0
    sendbyte(17) = &H4
    sendbyte(18) = &H1
    sendbyte(19) = &H12
    sendbyte(20) = &HA
    sendbyte(21) = &H10
    sendbyte(22) = &H4
    sendbyte(23) = &H0
    sendbyte(24) = &H1
    sendbyte(25) = &H0
    sendbyte(26) = &H1
    sendbyte(27) = &H84
    sendbyte(28) = &H0
    sendbyte(29) = (readaddress * 8) \ 256  ‘計算讀高位地址
    sendbyte(30) = (readaddress * 8) Mod 256 ‘計算讀低位地址
    sendbyte(31) = &H0
    sendbyte(32) = &H16
    For i = 4 To 30
        temp = temp + sendbyte(i)
    Next
    sendbyte(31) = temp Mod 256    ‘計算校驗碼
    ppird = sendbyte  ‘‘返回讀VW 指令碼
    End Function
    5.3   寫VW函數(shù)
    Function ppiww(adressx As Integer, datax As Integer)
    ‘a(chǎn)dressx 為寫VW的地址datax 要寫入VW的整數(shù)
    Dim i As Integer, temp As Integer
    Dim sendbyte(38) As Byte
    sendbyte(0) = &H68
    sendbyte(1) = &H21
    sendbyte(2) = &H21
    sendbyte(3) = &H68
    sendbyte(4) = &H2
    sendbyte(5) = &H0
    sendbyte(6) = &H6C
    sendbyte(7) = &H32
    sendbyte(8) = &H1
    sendbyte(9) = &H0
    sendbyte(10) = &H0
    sendbyte(11) = &H0
    sendbyte(12) = &H0
    sendbyte(13) = &H0
    sendbyte(14) = &HE
    sendbyte(15) = &H0
    sendbyte(16) = &H6
    sendbyte(17) = &H5
    sendbyte(18) = &H1
    sendbyte(19) = &H12
    sendbyte(20) = &HA
    sendbyte(21) = &H10
    sendbyte(22) = &H4
    sendbyte(23) = &H0
    sendbyte(24) = &H1
    sendbyte(25) = &H0
    sendbyte(26) = &H1
    sendbyte(27) = &H84
    sendbyte(28) = &H0
    sendbyte(29) = (adressx * 8) \ 256
    sendbyte(30) = (adressx * 8) Mod 256
    sendbyte(31) = &H0
    sendbyte(32) = &H4
    sendbyte(33) = &H0
    sendbyte(34) = &H10
    sendbyte(35) = datax \ 256
    sendbyte(36) = datax Mod 256
    sendbyte(37) = &H0
    sendbyte(38) = &H16
    For i = 4 To 36
        temp = temp + sendbyte(i)
    Next
    sendbyte(37) = temp Mod 256
    ppiww = sendbyte  ‘返回寫VW 指令碼
    End Function
    5.4   利用MSCOMM的事件獲取數(shù)據(jù)
    Private Sub MSComm1_OnComm()
    Dim rcvtemp(5) As Byte   ‘定義確認發(fā)送的數(shù)組數(shù)據(jù)元素為字節(jié)
    Dim rcv_array() As Byte
    Dim yy As Long
      Select Case MSComm1.CommEvent
         Case comEvReceive
                rcv_array = MSComm1.Input  ‘取出串口接收緩沖器的數(shù)據(jù)。
                If rcv_array(0) = &HE5 Then   ‘PLC 返回應(yīng)答數(shù)據(jù)E5H
                SComm1.RThreshold =25
                 rcvtemp(0) = &H10
                 rcvtemp(1) = &H2
                 rcvtemp(2) = &H0
                 rcvtemp(3) = &H5C
                 rcvtemp(4) = &H5E
                 rcvtemp(5) = &H16
                 MSComm1.Output = rcvtemp  ‘發(fā)送確認指令碼
                ElseIF rcv_array(0) = &H68 AND rcv_array(1) = &H17 THEN 
                  yy = Val(rcv_array(25)) * 256 + Val(rcv_array(26))  ‘計算讀取數(shù)據(jù)
    Text1 = yy
    ELSE
                  MSComm1.RThreshold = 1
            End If
    End Select
    watchtimer.Enabled = False    ‘監(jiān)視返回數(shù)據(jù)看門狗
    End Sub
    5.5  主程序
            程序已開始,首先寫入PLC必要的實驗數(shù)據(jù):試驗壓力值、鋼管的直徑、保壓時間等數(shù)據(jù),開始試驗,啟動一計時器,每隔100毫秒讀一次油壓值和水壓值,同時識別出壓力值并用曲線顯示出來,完成一次水壓試驗,保存一次水壓曲線數(shù)據(jù),以備日后察看。在日常應(yīng)用中相當(dāng)可靠便捷。
    6        結(jié)束語
            利用PPI協(xié)議還可以讀寫S7-200PLC中的各種類型數(shù)據(jù),包括I、Q、SM、M、V、等數(shù)據(jù)類型,能夠直接讀出以上變量中的位、字節(jié)、字、雙字等,其中讀位變量時,是讀取該位所在的字節(jié)值,計算機再識別出該位的值,一次還可以讀些多個數(shù)據(jù),具體的指令碼可以模擬以上的指令碼寫出。PPI協(xié)議還具有豐富多彩的功能,若要全面是用PPI協(xié)議請使用西門子的授權(quán)軟件。    
    參考文獻:
    [1]S7-200可編程控制器系統(tǒng)手冊西門子(中國)有限公司 2001.9
    [2] SIMATIC S7 STEP7 使用手冊 西門子(中國)有限公司 2001.9
     

    熱點新聞

    推薦產(chǎn)品

    x
    • 在線反饋
    1.我有以下需求:



    2.詳細的需求:
    姓名:
    單位:
    電話:
    郵件: