国产又粗又猛又爽又黄的黄牛视频-欧美日韩精品网址-国产成人麻豆h视频在线观看-蜜臀av区一二三爽免费播放-久久久伦理精品-99精品资源在线视频-伊人久久大香樵-久久人妻人人爽-性欧美少妇煌妇喷水,麻豆免费在线观看视频网站,天天射天天干天天要,91精品国自产拍老熟女露脸

PLC技術(shù)資料
    NI 利用西門子PPI協(xié)議采集數(shù)據(jù)
    發(fā)布者:用戶投稿  發(fā)布時(shí)間:2008/5/24 21:50:46
    摘  要:利用西門子S7-200 PLC內(nèi)置的PPI協(xié)議的部分功能,可以做出簡(jiǎn)單使用的控制和采集系統(tǒng)。

    關(guān)鍵詞:PPI協(xié)議、PLC通訊、數(shù)據(jù)采集

    1、前言
    西門子S7-200系列可編程控制器(PLC)是控制領(lǐng)域應(yīng)用最廣的小型PLC之一,它支持兩種與計(jì)算機(jī)通信方式:自由端口,PPI方式使用自由口方式進(jìn)行編程時(shí),必須定義自己的通訊協(xié)議,在上位機(jī)和PLC中都要編寫(xiě)數(shù)據(jù)通信程序,占用PLC的內(nèi)存。使用PPI協(xié)議進(jìn)行通信時(shí),PLC可以不用編程,而且可讀寫(xiě)所有數(shù)據(jù)區(qū),快捷方便。但是西門子公司沒(méi)有公布PPI協(xié)議的格式。用戶如果想使用PPI協(xié)議,必須購(gòu)買西門子的協(xié)議模塊或其它廠家的組態(tài)軟件。只對(duì)于一些小型系統(tǒng)來(lái)說(shuō)成本比較高,若只應(yīng)用幾個(gè)數(shù)據(jù),就購(gòu)買一套軟件,實(shí)在是浪費(fèi)。利用S7-200內(nèi)置的PPI協(xié)議,開(kāi)發(fā)自己的控制或采集系統(tǒng)不愧是一個(gè)捷徑。

    2、部分PPI協(xié)議格式

    SD:(Start Delimiter)開(kāi)始定界符(68H)
    LE:(Length)報(bào)文數(shù)據(jù)長(zhǎng)度
    LER:(Repeated Length)重復(fù)報(bào)文數(shù)據(jù)長(zhǎng)度(從DA到DU)
    SD: (Start Delimiter)開(kāi)始定界符(68H) 
    SA:(Source Address)數(shù)據(jù)源站地址
    DA:(Destination Address)數(shù)據(jù)目標(biāo)站地址
    FC:(Function Code)功能碼
    DSAP:(Destination Service Access Point)目的服務(wù)存取點(diǎn)
    SSAP:(Source Service Access Point)源服務(wù)存取點(diǎn)
    DU:(Data Unit)數(shù)據(jù)單元
    FCS:校驗(yàn)碼(從DA到DU數(shù)據(jù)和)
    ED:(End  Code)結(jié)束碼(16H)

    3、通訊過(guò)程
    從計(jì)算機(jī)上的COM口通過(guò)一條PC/PPI編程電纜連到PLC的編程口上(最小的系統(tǒng)要求),計(jì)算機(jī)(為主,地址為00)與PLC(為從,地址為02)采用主從方式通訊,具體過(guò)程如下圖所示,一次讀寫(xiě)操作的步驟包括:(1)首先主機(jī)(計(jì)算機(jī))發(fā)出讀寫(xiě)命令,(2)從機(jī)(PLC)作出接收正確的響應(yīng)(E5),(3)主機(jī)接到此響應(yīng)則發(fā)出確認(rèn)指令(10 02 00 5C 5E 16),(4)PLC回應(yīng)給上位機(jī)數(shù)據(jù)。這樣收發(fā)兩次數(shù)據(jù),完成一次數(shù)據(jù)的讀寫(xiě)。

    4、讀寫(xiě)指令實(shí)例
    4.1讀指令實(shí)例 
    對(duì)于一次讀取一個(gè)數(shù)據(jù),讀命令都是33個(gè)字節(jié)。前面的0—21字節(jié)是相同的,SA=00,DA=02(PLC缺省地址),如果有多個(gè)站,DA要改成相應(yīng)的站號(hào)。讀命令中從DA到DU的長(zhǎng)度為1B即27個(gè)字節(jié)。從22字節(jié)開(kāi)始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。 下表是讀不同存儲(chǔ)器命令的Byte22—32。


    讀命令的Byte22-32
    實(shí)際輸出指令:讀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 寫(xiě)指令實(shí)例:
    一次寫(xiě)一個(gè)類型的數(shù)據(jù)V100,寫(xiě)V區(qū)地址 Byte28-30 為100*8=&H0320
    寫(xiě)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
    寫(xiě)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 
    寫(xiě)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 寫(xiě)入數(shù)據(jù)的長(zhǎng)度、存儲(chǔ)器類型、存儲(chǔ)器偏移量與讀命令相同。Byte 35-38 寫(xiě)入數(shù)據(jù)的位數(shù)。

    5、應(yīng)用實(shí)例
    在鋼管制造行業(yè),水壓靜載試驗(yàn)機(jī)(簡(jiǎn)稱水壓機(jī))是必備的檢驗(yàn)和試驗(yàn)設(shè)備。因?yàn)槊绹?guó)石油協(xié)會(huì)的API標(biāo)準(zhǔn)《管線鋼管 Spec 5L》和國(guó)家標(biāo)準(zhǔn)GB/T9711-1997規(guī)定,螺旋焊管和直縫焊管必須經(jīng)過(guò)規(guī)定的靜水壓試驗(yàn),并且保存水壓過(guò)程的壓力曲線。該系統(tǒng)原來(lái)是用MCGS工控組態(tài)軟件+VB程序來(lái)完成的,采集速度較慢,最多一秒鐘采集一個(gè),比較緩慢,F(xiàn)用VB語(yǔ)言,通過(guò)PPI協(xié)議直接采集PLC的水壓值進(jìn)行處理,簡(jiǎn)潔又迅速,懷可以開(kāi)發(fā)出多種功能。采用PPI電纜將計(jì)算機(jī)COM1口與PLC的PORT0編程口連接,通訊系統(tǒng)采用主從結(jié)構(gòu),通訊協(xié)議遵循PPI協(xié)議格式,計(jì)算機(jī)發(fā)出讀寫(xiě)申請(qǐng),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,偶校驗(yàn),8數(shù)據(jù)位,1停止位
    .InputLen = 0
    .RThreshold = 1  ‘收到字符就產(chǎn)生事件
    .InputMode = comInputModeBinary   ‘二進(jìn)制接收模式
    End With 
    If MSComm1.PortOpen = False Then
    MSComm1.PortOpen = True  ‘打開(kāi)通訊串口
    End If


    [NextPage]

    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  ‘計(jì)算讀高位地址
    sendbyte(30) = (readaddress * 8) Mod 256 ‘計(jì)算讀低位地址
    sendbyte(31) = &H0
    sendbyte(32) = &H16
    For i = 4 To 30
        temp = temp + sendbyte(i)
    Next
    sendbyte(31) = temp Mod 256    ‘計(jì)算校驗(yàn)碼


    [NextPage]

    ppird = sendbyte  ‘‘返回讀VW 指令碼
    End Function

    5.3 寫(xiě)VW函數(shù)
    Function ppiww(adressx As Integer, datax As Integer) 
    ‘a(chǎn)dressx 為寫(xiě)VW的地址datax 要寫(xiě)入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  ‘返回寫(xiě)VW 指令碼
    End Function


    [NextPage]

    5.4 利用MSCOMM的事件獲取數(shù)據(jù)
    Private Sub MSComm1_OnComm()
    Dim rcvtemp(5) As Byte   ‘定義確認(rèn)發(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
                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ā)送確認(rèn)指令碼
                ElseIF rcv_array(0) = &H68 AND rcv_array(1) = &H17 THEN  
                  yy = Val(rcv_array(25)) * 256 + Val(rcv_array(26))  ‘計(jì)算讀取數(shù)據(jù)
    Text1 = yy
    ELSE
                  MSComm1.RThreshold = 1
            End If
    End Select
    watchtimer.Enabled = False
    End Sub
    5.5 主程序
    程序已開(kāi)始,首先寫(xiě)入PLC必要的實(shí)驗(yàn)數(shù)據(jù):試驗(yàn)壓力值、鋼管的直徑、保壓時(shí)間等數(shù)據(jù),開(kāi)始試驗(yàn),啟動(dòng)一計(jì)時(shí)器,每隔100毫秒讀一次油壓值和水壓值,同時(shí)識(shí)別出壓力值并用曲線顯示出來(lái),完成一次水壓試驗(yàn),保存一次水壓曲線數(shù)據(jù),以備日后察看。在日常應(yīng)用中相當(dāng)可靠便捷。

    6、結(jié)束語(yǔ)
    利用PPI協(xié)議還可以讀寫(xiě)S7-200PLC中的各種類型數(shù)據(jù),包括I、Q、SM、M、V、等數(shù)據(jù)類型,能夠直接讀出以上變量中的位、字節(jié)、字、雙字等,其中讀位變量時(shí),是讀取該位所在的字節(jié)值,計(jì)算機(jī)再識(shí)別出該位的值,一次還可以讀些多個(gè)數(shù)據(jù),具體的指令碼可以模擬以上的指令碼寫(xiě)出。PPI協(xié)議還具有豐富多彩的功能,若要全面是用PPI協(xié)議請(qǐng)使用西門子的授權(quán)軟件。     

    參考文獻(xiàn):
    [1]S7-200可編程控制器系統(tǒng)手冊(cè) 西門子(中國(guó))有限公司 2001.9
    [2] SIMATIC S7 STEP7 使用手冊(cè) 西門子(中國(guó))有限公司 2001.9

    版權(quán)聲明PLC信息網(wǎng)轉(zhuǎn)載作品均注明出處,本網(wǎng)未注明出處和轉(zhuǎn)載的,是出于傳遞更多信息之目的,并不意味 著贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。如轉(zhuǎn)載作品侵犯作者署名權(quán),或有其他諸如版權(quán)、肖像權(quán)、知識(shí)產(chǎn)權(quán)等方面的傷害,并非本網(wǎng)故意為之,在接到相關(guān)權(quán)利人通知后將立即加以更正。聯(lián)系電話:0571-87774297。
0571-87774297  
湟源县| 赤水市| 泰来县| 县级市| 合肥市| 新乡县| 宁武县| 旬邑县| 乐都县| 沧州市| 郑州市| 西吉县| 华坪县| 慈利县| 黔西县| 巩义市| 金寨县| 泽州县| 金沙县| 望江县| 册亨县| 金乡县| 安溪县| 江北区| 呼伦贝尔市| 女性| 凌海市| 会东县| 海安县| 福海县| 图木舒克市| 望都县| 丹江口市| 格尔木市| 白银市| 昭苏县| 凤冈县| 广丰县| 葵青区| 广德县| 昌吉市|