




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Delphi的MSCOMM實(shí)現(xiàn)上位機(jī)與PLC間的串行通信(附源程序 Delphi的MSCOMM實(shí)現(xiàn)上位機(jī)與PLC間的串行通信(附源程序 2008-10-14來源: 網(wǎng)絡(luò) 隨著現(xiàn)代信息技術(shù)的發(fā)展以及計(jì)算機(jī)網(wǎng)絡(luò)的廣泛應(yīng)用,計(jì)算機(jī)通信技術(shù)已經(jīng)日趨成熟。作為傳統(tǒng)的計(jì)算機(jī)通信方式的串行通信,由于具有線路簡單、應(yīng)用靈活、可靠性高等一系列優(yōu)點(diǎn)長期以來獲得了廣泛的應(yīng)用。計(jì)算機(jī)串行通信在數(shù)據(jù)財(cái)經(jīng)、數(shù)據(jù)通信、故障檢測、計(jì)算機(jī)遠(yuǎn)程監(jiān)控等方面有廣泛的實(shí)用價(jià)值,特別在Windows下的串口通信可以充分利用Windows下的軟件資源優(yōu)勢(shì),實(shí)現(xiàn)多任務(wù)條件下對(duì)外部的數(shù)據(jù)傳輸、信息收集和處理。在本系統(tǒng)中,我們采用了性能/價(jià)格比
2、較高的計(jì)算機(jī)構(gòu)成廠級(jí)的監(jiān)控工作站。在PLC與上位計(jì)算機(jī)之間采用RS-485和RS-232C標(biāo)準(zhǔn)通信接口進(jìn)行通信。 在兩級(jí)計(jì)算機(jī)控制系統(tǒng)中,最不穩(wěn)定的環(huán)節(jié)就是上位機(jī)。為了保證系統(tǒng)的穩(wěn)定性,避免因上位機(jī)的故障導(dǎo)致系統(tǒng)控制失靈,所有采集到的信號(hào)都反饋到PLC當(dāng)中。上位機(jī)需要通過串行通信取得所需的數(shù)據(jù)信息,并通過串行通信將必要的控制信息和參數(shù)設(shè)置信息寫入PLC的數(shù)據(jù)存儲(chǔ)區(qū)。因此,串行通信作為上位機(jī)和下位機(jī)聯(lián)系的唯一方式,在整個(gè)系統(tǒng)中具有非常重要的作用。 1.1上位機(jī)與PLC間的串行通信 計(jì)算機(jī)與計(jì)算機(jī)或計(jì)算機(jī)與外部設(shè)備之間的數(shù)據(jù)傳輸和交換的方式主要有串行通信和并行通信兩種方式,其中串行通信指的是數(shù)據(jù)逐
3、位傳輸?shù)姆绞?。由于串行通信方式具有使用線路少、成本低,特別是在遠(yuǎn)程傳輸時(shí),避免了多條線路特性的不一致而被廣泛采用。 1.1.1串行通信 串行通信方式又可分為兩種:同步串行通信方式和異步串行通信方式。 1.同步串行通信方式:同步串行通信是以數(shù)據(jù)塊(字符塊)為信息單位傳送,每幀信息可以包含很多字符。同步通信要求通信雙方以相同的速率進(jìn)行,而且要準(zhǔn)證確協(xié)調(diào),通常通過共享一個(gè)時(shí)鐘或定時(shí)脈沖源保發(fā)送方和接收方準(zhǔn)確同步。這種通信方式的效率較高,但是對(duì)時(shí)鐘同步要求非常嚴(yán)格,成本較高。 2.異步串行通信方式:異步串行通信以字符為信息單位傳送。雙方需要遵守異步通信協(xié)議,以字符為數(shù)據(jù)單位,發(fā)送方傳送字符的時(shí)間間隔不
4、確定。每個(gè)字符傳輸都以起始位開始,以停止位結(jié)束。通信雙方所指定的字符的數(shù)據(jù)位數(shù),奇偶校驗(yàn)方法和停止位數(shù)必須相同。其傳輸效率比同步通信方式低,但是成本較低。 異步通信是在以起始位開始、停止位結(jié)束的一 個(gè)字符內(nèi)按約定的頻率進(jìn)行同步接收。各個(gè)字符之間允許有間隙,而且兩個(gè)字符之間的間隔是不固定的。在同步通信方式中,不僅同一字符中的相鄰兩位間的時(shí)間間隔要相等,而且相鄰字符間的時(shí)間間隔也要求相等,這也是同步通信和異步通信方式的主要差別所在。 因此,異步串行通信一般用在數(shù)據(jù)傳送時(shí)間不能確知,發(fā)送數(shù)據(jù)不連續(xù),數(shù)據(jù)量較少和數(shù)據(jù)傳輸速率較低的場合;而同步串行通信則用在要求快速、連續(xù)傳輸大批量數(shù)據(jù)的場合。 1.1.
5、2串行通信接口標(biāo)準(zhǔn) 在串行通信時(shí),要求通信雙方都采用一個(gè)標(biāo)準(zhǔn)接口,使不同的設(shè)備可以方便地連接起來進(jìn)行通信。在設(shè)計(jì)通信接口時(shí),一般都采用標(biāo)準(zhǔn)接口以提高其通用性。本系統(tǒng)中,上、下位機(jī)進(jìn)行通信首先面臨的問題就是通信標(biāo)準(zhǔn)的選擇問題。 1、RS-232C接口標(biāo)準(zhǔn) RS-232C接口標(biāo)準(zhǔn)(全稱EIA-RS-232C標(biāo)準(zhǔn))是在1969年由美國電子工業(yè)聯(lián)合會(huì)(EIA,Electronic Industrial Associate-Recommended Standard-232C)與Bell公司、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同開發(fā)的用于串行接口的通信協(xié)議。它最初是為遠(yuǎn)程通信連接數(shù)據(jù)終端設(shè)備DTE(Da
6、ta Terminal Equipment)和數(shù)據(jù)通信設(shè)備DCE(Data Communication Equipment)而制定的46。雖然這個(gè)標(biāo)準(zhǔn)的制定沒有考慮計(jì)算機(jī)系統(tǒng)的應(yīng)用要求,但是廣泛的用于計(jì)算機(jī)與終端或外設(shè)之間的連接。 RS-232C標(biāo)準(zhǔn)規(guī)定了在串行通信時(shí),數(shù)據(jù)終端設(shè)備和數(shù)據(jù)通信設(shè)備之間的接口信號(hào)。其中常用信號(hào)的名稱、引腳號(hào)以及功能如表4-1所示。 表4-1 RS-232C常用信號(hào)定義 引腳號(hào)信號(hào)名稱簡稱信號(hào)功能說明 2發(fā)送數(shù)據(jù)TxDDTE向DCE發(fā)送串行數(shù)據(jù) 3接收數(shù)據(jù)RxDDTE從DCE接收串行數(shù)據(jù) 4請(qǐng)求發(fā)送RTS請(qǐng)求通信設(shè)備切換到發(fā)送方向 5清除發(fā)送CTS響應(yīng)DTE請(qǐng)求,提
7、示DCE開始發(fā)送 6數(shù)據(jù)設(shè)備就緒DSRDCE通信設(shè)備就緒 7信號(hào)地SG整個(gè)電路的公共信號(hào)地 8數(shù)據(jù)載波檢測DCDDCE收到載波 20數(shù)據(jù)終端就緒DTRDTE終端設(shè)備就緒 22振鈴RI通信線路上有振鈴 RS-232C的電氣特性:RS-232C采用的是負(fù)邏輯工作,即邏輯“1”用負(fù)電壓(-3-15V表示,邏輯“0”用正電壓(+3+15V表示。介于-3V和+3V之間以及低于-15V或高于+15V的電壓沒有意義。實(shí)際工作時(shí),應(yīng)保證電平在±(515V之間。由于RS232C是用正負(fù)電壓來表示邏輯狀態(tài),與以高低電平表示邏輯狀態(tài)的TTL不同。為了能夠同計(jì)算機(jī)接口或終端的TTL器件連接,必須進(jìn)行電平和
8、邏輯關(guān)系的轉(zhuǎn)換。目前使用較為廣泛的是集成電路轉(zhuǎn)換器件,如MC1488和MC1489。 RS-232C的機(jī)械特性:雖然RS-232標(biāo)準(zhǔn)定義了25個(gè)信號(hào),但進(jìn)行異步通信時(shí)實(shí)際只用到了9個(gè)信號(hào):2個(gè)數(shù)據(jù)信號(hào)、6個(gè)控制信號(hào)和1個(gè)信號(hào)地線。因此RS-232的連接器主要有DB25和DB9兩種類型?,F(xiàn)在微型計(jì)算機(jī)上均采用DB9型連接器作為主板上COM1和COM2兩個(gè)串行口的連接器,其引腳及信號(hào)分配如圖4-2所示。 3、RS-485接口標(biāo)準(zhǔn) RS-485標(biāo)準(zhǔn)也是一種平衡傳輸方式的串行接口標(biāo)準(zhǔn),它和RS-422A兼容并且擴(kuò)展了RS-422A的功能。 RS-485的電氣特性:邏輯“1”以兩線間的電壓差為(26V表
9、示;邏輯“0”以兩線間的電壓差為-(2-6V表示。接口信號(hào)電平比RS-232C降低了,就不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL電路連接。數(shù)據(jù)最高傳輸速率為10Mbps。RS-485接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,抗共模干擾能力增強(qiáng),即抗干擾性好。RS-485接口的最大傳輸距離標(biāo)準(zhǔn)值為4000英尺,實(shí)際上可達(dá)3000米。RS-485接口在總線上是允許連接多達(dá)128個(gè)收發(fā)器,具有多站能力,用戶可以利用它建立起設(shè)備網(wǎng)絡(luò)。RS-485接口由于具有良好的抗干擾性、傳輸距離長和多站能力等優(yōu)點(diǎn)使其成為首選的串行接口。 本系統(tǒng)中,上位機(jī)和下位機(jī)的通信運(yùn)用了以上標(biāo)準(zhǔn)中的RS48
10、5和RS232C兩種通信標(biāo)準(zhǔn)。計(jì)算機(jī)具有標(biāo)準(zhǔn)RS232C接口,而PLC具有標(biāo)準(zhǔn)RS485接口,兩者通過電纜和RS485/RS232C轉(zhuǎn)換模塊連接(如圖所示4-3)。 1.2通訊參數(shù)設(shè)置和通訊測試界面 在供水自動(dòng)化監(jiān)控系統(tǒng)中,信息管理及監(jiān)控軟件作為處理、顯示和存儲(chǔ)數(shù)據(jù)的核心,主要負(fù)責(zé)對(duì)各個(gè)電動(dòng)機(jī)的轉(zhuǎn)速和各處管道壓力的查詢、監(jiān)控以及報(bào)警的處理。運(yùn)行信息管理及監(jiān)控軟件的計(jì)算機(jī)與PLC之間的通訊主要是通過RS-232C串行接口(PC機(jī)一般提供了COM1和COM2兩個(gè)串行口)進(jìn)行通訊,實(shí)現(xiàn)系統(tǒng)的監(jiān)測控制和信息管理功能。 本系統(tǒng)中上位機(jī)的信息管理及監(jiān)控軟件運(yùn)行在Windows2000/NT操作系統(tǒng)下,串行
11、通訊程序運(yùn)用Inprise公司推出的快速開發(fā)工具Delphi 6.0開發(fā)。PPI通信協(xié)議是西門子專為S7-200系列PLC開發(fā)的一個(gè)通信協(xié)議,物理上采用RS485信號(hào)電平,PLC默認(rèn)處于該方式。使用PPI方式對(duì)PLC編程及調(diào)試監(jiān)控,其硬件連接只需通過編程(PC/PPI)電纜即可實(shí)現(xiàn)。軟件編程采用中文環(huán)境、內(nèi)部系統(tǒng)協(xié)議,設(shè)計(jì)人員只需通過軟件設(shè)置一下參數(shù),數(shù)據(jù)如交換不需要考慮,用NETR和NETW 兩條語句即可進(jìn)行數(shù)據(jù)的傳遞。 1.2.1通訊參數(shù)設(shè)置 為了進(jìn) 行串口通信, 實(shí)現(xiàn)系統(tǒng)的監(jiān)測控制和信息管理功能,必須對(duì)通訊參數(shù)加以設(shè)置。 通信設(shè)置: 串口:COM1、COM2 波特率:300、600、12
12、00. 校驗(yàn)方法:N、E、M、O、S 數(shù)據(jù)位數(shù) 停止位數(shù): Setting: 緩沖區(qū)設(shè)置 接收緩沖區(qū):字節(jié) 發(fā)送緩沖區(qū):字節(jié) 數(shù)據(jù)傳送方式 文本形式和二進(jìn)制形式 流控制 不握手(默認(rèn))、XON/XOFF方式、 RTS/CTS方式、 XON/XOFF AND RTS/CTS方式 1.2.2通訊測試界面 通信測試界面如圖4-5所示。 通訊設(shè)置 Setting屬性值 commport屬性值 通訊狀態(tài) 串口狀態(tài) 發(fā)送字節(jié)數(shù) 接收字節(jié)數(shù) 數(shù)據(jù)顯示 接收數(shù)據(jù)顯示 發(fā)送數(shù)據(jù)顯示 1.3 PLC通信程序設(shè)計(jì) 1.3.1 PLC網(wǎng)絡(luò)通信協(xié)議19 本系統(tǒng)采用的PLC是德國SIEMENS公司生產(chǎn)的S7-200系列,
13、主模塊采用CPU226,擴(kuò)展模塊采用數(shù)字量擴(kuò)展模塊EM222和模擬量擴(kuò)展模塊EM235。 S7-200系列CPU具有強(qiáng)大的通信能力。主要支持以下幾種協(xié)議: 1PI(Point-to-Point協(xié)議,即點(diǎn)到點(diǎn)接口協(xié)議。PPI是一個(gè)主/從協(xié)議,主站(其它CPU或SIMATIC編程器給從站發(fā)送申請(qǐng),從站進(jìn)行響應(yīng)。從站不初始化信息,只響應(yīng)主站的申請(qǐng)或查詢。如果在用戶程序中允許PPI主站模式,S7-200 CPU在RUN模式下可以作為主站,還可以利用網(wǎng)絡(luò)讀(NETR和網(wǎng)絡(luò)寫(NETW指令讀寫其他CPU,同時(shí)也能夠作為從站響應(yīng)來自其它主站的申請(qǐng)。采用PPI協(xié)議的網(wǎng)絡(luò)中最多只能有32個(gè)主站。該協(xié)議主要是用來
14、編程、PPI組網(wǎng)等 2MPI(Multi-Point協(xié)議,即多點(diǎn)接口協(xié)議。MPI可以是主/主協(xié)議或主/從協(xié)議,協(xié)議如何操作依賴于設(shè)備類型(設(shè)備是S7-200系列CPU時(shí)建立主/從連接)。MPI總在兩個(gè)相互通信的設(shè)備之間建立連接,其它主站不能干涉兩個(gè)設(shè)備之間已建立的連接。由于S7-200的連接是非公用的,并且需要CPU中的資源,每個(gè)S7-200 CPU只能支持4個(gè)連接,每個(gè)EM277模塊支持6個(gè)連接。在使用時(shí),每個(gè)S7-200 CPU和EM277模塊保留兩個(gè)連接,分別用于連接SIMATIC編程器(或計(jì)算機(jī))以及操作面板。這些保留連接不能被其它類型的主站使用。 3ROFIBUS協(xié)議。PROFIBU
15、S協(xié)議設(shè)計(jì)用于分布式I/O設(shè)備(遠(yuǎn)程I/O的高速通信。PROFIBUS網(wǎng)絡(luò)通常有一個(gè)主站和幾個(gè)I/O從站,主站配置成知道所連接的I/O從站的型號(hào)和地址。主站初始化網(wǎng)絡(luò)并核對(duì)網(wǎng)絡(luò)上的從站設(shè)備和配置中 的是否匹配。主站連續(xù)的把輸出數(shù)據(jù)寫到從站并從它們讀取輸入數(shù)據(jù)。 4戶自定義協(xié)議(自由口協(xié)議。自由口協(xié)議可以由用戶定義通訊協(xié)議,通過用戶程序控制S7-200通信口的操作模式,將CPU與任意通訊協(xié)議公開的設(shè)備聯(lián)網(wǎng),如上位計(jì)算機(jī)、打印機(jī)、變頻器等。用戶程序通過使用接收中斷、發(fā)送中斷、發(fā)送指令(XMT和接收指令(RCV來控制通信口的操作。在自由口模式下,通信協(xié)議完全由用戶程序控制。用戶程序通過設(shè)置SMB30
16、(0口允許自由口模式,而且只有在CPU處于RUN模式時(shí)才能允許。當(dāng)CPU處于STOP模式時(shí),自由口通信停止,通信口轉(zhuǎn)換成正常的PPI協(xié)議操作。 可以利用PC/PPI電纜和自由口通信功能把S7-200 CPU連接到許多和RS-232標(biāo)準(zhǔn)兼容的設(shè)備。PC/PPI電纜支持波特率設(shè)置,利用PC/PPI電纜盒上的DIP開關(guān)可以配置所需的波特率。波特率和開關(guān)位置的對(duì)應(yīng)關(guān)系如表4-6所示: 表4-6 波特率和開關(guān)位置對(duì)應(yīng)表 波特率38400192009600480024001200600300 開關(guān)(1=上000001010011100101110111 當(dāng)數(shù)據(jù)從RS-232傳送到RS-485口時(shí),PC/P
17、PI電纜是發(fā)送模式。當(dāng)數(shù)據(jù)從RS-485傳送到RS-232口時(shí),PC/PPI電纜是接收模式。當(dāng)檢測到RS-232的發(fā)送線有字符時(shí),電纜立即從接收模式轉(zhuǎn)換到發(fā)送模式。當(dāng)RS-232發(fā)送線處于閑置的時(shí)間超過電纜切換時(shí)間時(shí),電纜又切換到接收模式。這個(gè)時(shí)間與電纜上的DIP開關(guān)設(shè)定的波特率選擇有關(guān),如表4-7所示: 表4-7 PC/PPI電纜轉(zhuǎn)換時(shí)間(發(fā)送模式到接收模式 波 特 率38400192009600480024001200600 轉(zhuǎn)換時(shí)間(ms0.512471428 在使用自由口的系統(tǒng)中使用PC/PPI電纜時(shí),必須在S7-200 CPU的用戶程序中包含轉(zhuǎn)換時(shí)間。S7-200 CPU在接收到RS
18、-232設(shè)備的申請(qǐng)信息后,S7-200 CPU的發(fā)送信息響應(yīng)必須延遲超過或等于電纜的切換時(shí)間。RS-232設(shè)備在接收到RS-232設(shè)備的申請(qǐng)信息后,S7-200 CPU的下一次申請(qǐng)信息的發(fā)出必須延遲超過或等于電纜的切換時(shí)間。在以上兩種情況中,需要通過延遲使PC/PPI電纜有足夠的時(shí)間從發(fā)送模式切換到接收模式,以便于數(shù)據(jù)從RS-485口傳送到RS-232口。 1.3.2 PLC通信程序設(shè)計(jì) PLC作為控制系統(tǒng)中的下位機(jī),不主動(dòng)發(fā)送數(shù)據(jù)而是被動(dòng)的響應(yīng)上位機(jī)的命令,根據(jù)上位機(jī)的指令進(jìn)行數(shù)據(jù)發(fā)送和接收。PLC中的通信程序由主程序、三個(gè)子程序和三個(gè)中斷組成,通信程序的流程如圖4-4所示。 1、主程序 P
19、LC在第一次掃描時(shí)執(zhí)行初始化子程序,對(duì)端口及RCV指令進(jìn)行初始化。初始化完成后,使端口處于接收狀態(tài)。RCV指 令將接收到的數(shù)據(jù)保存到接收緩沖區(qū),同時(shí)產(chǎn)生接收完成中斷。PLC每接收到一條指令后都會(huì)發(fā)送一條反饋信息,發(fā)送完成后產(chǎn)生發(fā)送完成中斷。程序中使用的標(biāo)志位含義約定如下: M0.0:BCC校驗(yàn)正確則置位; M0.1:Verify子程序的觸發(fā)條件,被置位表示進(jìn)行BCC校驗(yàn)。 /主程序 LD SM0.1 CALL Init LDB= VB117, VB150 /接收數(shù)據(jù) AB= VB103, 16#05 A M0.0 CALL Recv LDB= VB117, VB150 /發(fā)送數(shù)據(jù) AB= VB
20、103, 16#06 A M0.0 CALL Send LD M0.1 /校驗(yàn) CALL Verify LD SM4.5 RCV VB100, 0 2、通信初始化子程序(Init) 本系統(tǒng)采用自由口通信,通信協(xié)議為自定義的。用戶可以通過設(shè)置PLC中相應(yīng)的特殊寄存器SMB30等的參數(shù)改變485口的波特率、數(shù)據(jù)格式(數(shù)據(jù)位數(shù)、停止位、校驗(yàn)),以適應(yīng)不同的通訊協(xié)議。PLC采用了特殊存儲(chǔ)器(SM)標(biāo)志位,提供大量的狀態(tài)和控制功能,并且能夠使CPU和用戶程序之間交換信息。 SMB30和SMB130是自由端口控制寄存器。SMB30控制自由端口0的通信方式,SMB130控制自由端口1的通信方式。這兩個(gè)寄存器
21、是用來設(shè)置自由端口通信的操作方式,并提供自由端口或者系統(tǒng)所支持的協(xié)議之間的選擇。Pp用于校驗(yàn)選擇,00和10表示不校驗(yàn),01表示奇校驗(yàn),11表示偶校驗(yàn)。d用于指定每個(gè)字符的數(shù)據(jù)位,0表示8位字符,1表示7位字符。bbb用于選擇自由口通信的波特率,其含義同表4-2。mm用于協(xié)議選擇,00表示PPI/從站模式,01表示自由口協(xié)議,10表示PPI/主站模式,11保留不用。 SMB87或SMB187用于控制接收信息的標(biāo)志;SMB88或SMB188用于指定開始的信息字符;SMB88或SMB188用于指定結(jié)束的信息字符。SMB94或SMB194用于指定端口0或端口1接收字符的最大個(gè)數(shù)(1255Byte)。
22、該區(qū)要設(shè)為需要的最大緩沖區(qū),否則可能會(huì)丟失信息。 本系統(tǒng)采用端口0,自由口方式通信,波特率為9600Kbps,發(fā)送數(shù)據(jù)的最大長度為16。因此SMB30的值為09H(十六進(jìn)制),SMB87的值為ECH(十六進(jìn)制),SMB94的值為16。當(dāng)PLC的工作模式開關(guān)處于“RUN”(SM0.7=1)時(shí)初始化通信端口,初始化完畢打開接收數(shù)據(jù)中斷。PLC的通信初始化程序如下: /通信初始化子程序 LD SM0.0 MOVB 16#09, SMB30 MOVB 16#EC, SMB87 MOVB 103, SMB88 MOVB 71, SMB89 MOVW +1000, SMW92 MOVB 16, SMB94
23、 R SM87.2, 1 LD SM0.0 ATCH INT_1, 23 ATCH INT_2, 9 ENI LD SM0.0 MOVD &VB102,VD120 MOVB 2, VB150 MOVB 0, VB147 MOVB 0, VB148 2、發(fā)送子程序(Send) 在PLC接收到上位機(jī)的讀取數(shù)據(jù)命令后,調(diào)用發(fā)送程序?qū)⒅付ǖ臄?shù)據(jù)通過端口0發(fā)送給上位機(jī)。在PLC的存儲(chǔ)區(qū)中,從VB126到VB141為約定的數(shù)據(jù)存儲(chǔ)區(qū),VB125為發(fā)送的數(shù)據(jù)個(gè)數(shù)。發(fā)送完數(shù)據(jù)后,打開發(fā)送完成中斷。 /發(fā)送子程序 LD SM0.0 R SM87.7, 1 R M0.0, 1 RCV VB100, 0 M
24、OVB 103, VB126 MOVB 16#01, VB127 MOVB 26, VB141 MOVB 16, VB125 LD SM0.0 FOR VW121, +1, +12 XORB *VD121, VB148 INCD VD181 NEXT LD SM0.0 HTA VB148, VB140, 1 XMT VB125, 0 3、接收子程序(Recv) LD SM0.0 R SM87.7, 1 R M0.0, 1 RCV VB100, 0 MOVB 21, VB125 MOVB 103, VB126 MOVB 16#02, VB127 MOVB 16, VB141 LD SM4.5 X
25、MT VB125, 0 4、接收完成中斷(INT_0) 接收完成中斷用來處理接收完成中斷事件,它將接收緩沖區(qū)的數(shù)據(jù)還原并保存,同時(shí)將M0.1置位。 /接收完成中斷 LD SM0.0 ATH VB102, VB123, 1 ATH VB104, VB129, 1 ATH VB115, VB140, 1 S M0.1, 1 MOVB 0, VB147 MOVD &VB102, VD120 5、發(fā)送完成中斷(INT_1) 發(fā)送完成中斷用于處理發(fā)送完成中斷事件,主要是將M0.0復(fù)位、BCC碼寄存器清零、將接收緩沖區(qū)中存放結(jié)束字符的字節(jié)清零等。 /發(fā)送完成中斷 LD SM0.0 R M0.0,
26、1 S SM87.7, 1 MOVB 0, VB147 MOVB 0, VB148 MOVD &VB102, VD120 MOVB 0, VB100 6、BCC校驗(yàn)程序(Verify) 將接收到的數(shù)據(jù)進(jìn)行異或和校驗(yàn)。 LD SM0.0 R M0.1, 1 LD S M0.0 FOR VW143, +1, +12 LD SM0.0 XORB *VD121, VB147 LD SM0.0 INCD VD121 NEXT LDB= VB147, VB119 AB= VB116, 71 S M0.0, 1 LDB= VB116, 71 AB<> VB147, VB119 MOVB
27、16, VB119 MOVB 16#03, VB125 R SM87.7, 1 RCV VB100, 0 XMT VB125, 0 LDB<> VB116, 71 MOVB 16, VB125 MOVB 16#04, VB127 R SM87.7, 1 RCV VB100, 0 XMT VB125, 0 1.4 上位機(jī)的通信模塊設(shè)計(jì) 該恒壓供水監(jiān)控系統(tǒng)采用一臺(tái)工控機(jī)對(duì)泵房的水泵機(jī)組進(jìn)行監(jiān)控,監(jiān)控程序程序的功能包括水位、水壓、電機(jī)速度信號(hào)的采集;監(jiān)測顯示水泵機(jī)組的工作狀態(tài)和運(yùn)行情況;檢測故障信號(hào),進(jìn)行報(bào)警及語言提示;相關(guān)數(shù)據(jù)的存儲(chǔ)、動(dòng)態(tài)實(shí)時(shí)報(bào)表、歷史數(shù)據(jù)的隨時(shí)查詢、打??;根據(jù)現(xiàn)場工作
28、情況發(fā)出控制指令給PLC實(shí)行水泵機(jī)組的切換;根據(jù)生產(chǎn)實(shí)際情況修改工作參數(shù)等等。系統(tǒng)軟件采用Delphi高級(jí)語言編程,能夠及時(shí)準(zhǔn)確地對(duì)供水自動(dòng)化生產(chǎn)實(shí)行監(jiān)控。串行通信作為上位機(jī)和下位機(jī)聯(lián)系的橋梁,因此上位機(jī)通信模塊設(shè)計(jì)在整個(gè)監(jiān)控程序占有非常重要的地位。 用Delphi實(shí)現(xiàn)串口通信,最常用的辦法是使用控件(如MSCOMM等),利用MSCOMM控件開發(fā)串口通信程序,只需設(shè)置相關(guān)的屬性,使用相關(guān)的方法與相應(yīng)的事件,實(shí)現(xiàn)串口通信較為簡單方便。本系統(tǒng)中上位機(jī)的信息管理及監(jiān)控軟件運(yùn)行在Windows2000/NT操作系統(tǒng)下,并利用MSCOMM控件開發(fā)設(shè)計(jì)了上位機(jī)與PLC的串行通信程序,對(duì)供水系統(tǒng)的運(yùn)行狀態(tài)進(jìn)
29、行監(jiān)控。MSComm32控件的主要屬性、方法及事件如下6-8: CommPort屬性:用于設(shè)置或返回通訊端口號(hào)。計(jì)算機(jī)的串行通訊端口一般有COM1和COM2兩個(gè),必須在打開端口以前設(shè)置該屬性。如果設(shè)置的端口不存在,運(yùn)行時(shí)會(huì)產(chǎn)生設(shè)備無效錯(cuò)誤。 CommEvent屬性:返回通信事件或錯(cuò)誤。 Setting屬性:設(shè)置并返回初始化參數(shù),即波特率、奇偶校驗(yàn)、傳輸數(shù)據(jù)位和停止位。 InputMode屬性:設(shè)置或返回接收到的數(shù)據(jù)的類型。缺省為ComInputModeText表示以文本(ASCII碼)形式接收數(shù)據(jù),而ComInputModeBinary表示以二進(jìn)制形式接收數(shù)據(jù)。 Input屬性:返回并刪除接收
30、緩沖區(qū)中的數(shù)據(jù),在設(shè)計(jì)時(shí)Output屬性:向輸出緩沖區(qū)中寫入數(shù)據(jù),在設(shè)計(jì)時(shí)無效,運(yùn)行時(shí)為只讀。 Output屬性:向輸 出緩沖區(qū)中寫入數(shù)據(jù),在設(shè)計(jì)時(shí)無效,運(yùn)行時(shí)為只讀。 PortOpen屬性:設(shè)置并返回通信端口開或關(guān)的狀態(tài),運(yùn)行時(shí)有效。 CommInit方法:初始化并打開指定的串口。 RecvData方法:接收數(shù)據(jù)。 SendData方法:發(fā)送數(shù)據(jù)。 ComOpenOrClose方法:打開或關(guān)閉串口。 OnComm事件:當(dāng)CommEvent屬性的值發(fā)生變化時(shí),就產(chǎn)生此事件,標(biāo)志發(fā)生了一個(gè)通信事件或錯(cuò)誤。 通信模塊作為上位機(jī)和PLC交換數(shù)據(jù)的平臺(tái),具有十分重要的作用。通信模塊的設(shè)計(jì)主要包括幾個(gè)方
31、面: 1、串口初始化。串口初始化包括設(shè)置通信協(xié)議、輸入輸出緩沖區(qū)大小等內(nèi)容。 2、數(shù)據(jù)的接收和發(fā)送以及校驗(yàn)。上位機(jī)首先發(fā)出命令給PLC,PLC從串口輸出緩沖區(qū)內(nèi)接收數(shù)據(jù),然后PLC自動(dòng)發(fā)送一個(gè)響應(yīng)幀,上位機(jī)檢測到輸入緩沖區(qū)的數(shù)據(jù)開始接收數(shù)據(jù)。命令幀的格式為站號(hào)、讀/寫操作類型、發(fā)送數(shù)據(jù)、校驗(yàn)碼、結(jié)束字符。響應(yīng)幀的格式為站號(hào)、接收數(shù)據(jù)、校驗(yàn)碼、結(jié)束字符。為了保證通信數(shù)據(jù)的正確性,上位機(jī)對(duì)接收到的數(shù)據(jù)需要進(jìn)行校驗(yàn),校驗(yàn)是通過一個(gè)BCC校驗(yàn)函數(shù)來進(jìn)行。BCC校驗(yàn)碼就是將要傳送的字符串的ASCII碼以字節(jié)為單位作異或運(yùn)算,并將異或運(yùn)算結(jié)果作為指令的一部分傳送出去。 3、數(shù)據(jù)轉(zhuǎn)換。由于PLC在發(fā)送數(shù)據(jù)時(shí)
32、,有些模擬量數(shù)據(jù),如管網(wǎng)壓力和電機(jī)轉(zhuǎn)速,采用的是二進(jìn)制的形式,在計(jì)算機(jī)接受到數(shù)據(jù)之后必須進(jìn)行轉(zhuǎn)換,方能正確顯示。 4、錯(cuò)誤處理和報(bào)警。對(duì)于傳輸過程中可能出現(xiàn)的各種錯(cuò)誤,需要采取相應(yīng)的處理措施,不可恢復(fù)的嚴(yán)重錯(cuò)誤必須報(bào)警。 通信模塊中的部分事件源代碼如下: /串口初始化 procedure TfrmCommTmInit; begin if MSComm1.PortOpen then MSComm1.PortOpen:=false; MSComm1.Settings:=cboSetting.Text; if chkTextOrBin.Checked then MSComm1.InputMode:=
33、ComInputModeText/文本形式 else MSComm1.InputMode:=ComInputModeBinary;/二進(jìn)制形式 MSComm1.InputLen:=0;/讀接收緩沖區(qū)所有數(shù)據(jù) MSComm1.InBufferSize:=CommOption.inbuffer;/設(shè)置緩沖區(qū)大小 MSComm1.OutBufferSize:=CommOption.outbuffer; MSComm1.RThreshold:=1;/每接收到一個(gè)字符都產(chǎn)生OnComm事件 if cboCommPort.Text='COM1' then MSComm1.CommPort:
34、=1 else MSComm1.CommPort:=2; MSComm1.Handshaking:=CommOption.handshake;/設(shè)置握手協(xié)議 end; procedure TfrmCommTest.c hkSendHexClick(Sender: TObject; var bChk:boolean; str:string; begin if chkSendHex.Checked then /十六進(jìn)制形式 begin bChk:=true; end else /字符串形式 begin bChk:=false; end; str:=ConvertHexChar(memSend.Te
35、xt,bChk; memSend.Clear; memSend.Text:=str; end; procedure TfrmCommTest.chkRecvHexClick(Sender: TObject; var bChk:boolean; str:string; begin if chkRecvHex.Checked then /十六進(jìn)制形式 begin bChk:=true; end else /字符串形式 begin bChk:=false; end; str:=copy(memRecv.Text,1,length(memRecv.Text;/需轉(zhuǎn)換的字符 str:=ConvertHe
36、xChar(str,bChk; memRecv.Clear; memRecv.Text:=str; end; /發(fā)送數(shù)據(jù) procedure TfrmCommTest.SendData; var str:string; begin str:='' if not MSComm1.PortOpen then/串口未打開 begin MessageDlg('請(qǐng)先打開串口! ',mtInformation,mbOk,0; exit; end else /串口已打開 begin if memSend.Text='' then MessageDlg('
37、;請(qǐng)輸入需要發(fā)送的數(shù)據(jù)! ',mtInformation,mbOk,0; str:=memSend.Text; sumSend:=sumSend+length(str; MSComm1.Output:=str; edit2.Text:=inttostr(sumSend; end; end; /接收數(shù)據(jù) procedure TfrmCommTest.RecvData; var s:string; vTmp:Variant; ovTmp:oleVariant; i,iRecv:integer; bTmp:Byte; begin if MSComm1.InputMode=ComInputModeText then/文本形式 begin iRecv:=MSComm1.InBufferCount; s:=MSComm1.Input; if chkAutoClear.Checked then memRecv.Text:=s else memRecv.Text:=memRecv.Text+s; sumRecv:=sumRecv+iRecv; edit3.Text:=inttostr(sumRecv; end else /二進(jìn)制形式 begin iRecv:=MSComm1.InBufferCount; ovTmp:=MSComm1.Input; v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第4章 第6節(jié) 魚類(新教學(xué)設(shè)計(jì))2023-2024學(xué)年七年級(jí)上冊(cè)生物(冀少版)
- 2024-2025學(xué)年高中物理 第五章 曲線運(yùn)動(dòng) 3 實(shí)驗(yàn):研究平拋運(yùn)動(dòng)(3)教學(xué)實(shí)錄 新人教版必修2
- 施工現(xiàn)場消防方案課件
- 高中政治必修一滿分選擇易錯(cuò)(中)
- 任務(wù)十七繪制房屋建筑施工圖一建筑施工圖繪制方法二實(shí)訓(xùn)任務(wù)與
- 管弦樂演出AI應(yīng)用企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 簡歷撰寫與面試指導(dǎo)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 耐磨地坪涂料生產(chǎn)行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 精細(xì)動(dòng)作訓(xùn)練工具套裝行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 民俗文化主題公園行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2024-2030年中國光伏建筑一體化(BIPV)行業(yè)發(fā)展模式及十三五規(guī)劃分析報(bào)告
- 2024-2025學(xué)年人教版八年級(jí)下冊(cè)地理第五章綜合測試卷(含答案)
- 廣醫(yī)三院產(chǎn)房個(gè)案護(hù)理分享
- 《鐵路軌道維護(hù)》課件-更換軌距桿作業(yè)
- 全國計(jì)算機(jī)等級(jí)考試一級(jí)試題及答案(5套)
- 新入職員工設(shè)備培訓(xùn)
- 2024年中國林蛙油市場調(diào)查研究報(bào)告
- PANTONE潘通色卡TPX顏色在線查詢(1-2部分)
- 2021《超星爾雅》舞蹈鑒賞章節(jié)測試答案
- 外周灌注指數(shù)PI
- 2020年天津市中考滿分作文《細(xì)品落雨花開》2
評(píng)論
0/150
提交評(píng)論