Delphi的MSCOMM實現上位機與PLC間的串行通信(附源程序)
隨著現代信息技術的發展以及計算機網絡的廣泛應用,計算機通信技術已經日趨成熟。作為傳統的計算機通信方式的串行通信,由于具有線路簡單、應用靈活、可靠性高等一系列優點長期以來獲得了廣泛的應用。計算機串行通信在數據財經、數據通信、故障檢測、計算機遠程監控等方面有廣泛的實用價值,特別在Windows下的串口通信可以充分利用Windows下的軟件資源優勢,實現多任務條件下對外部的數據傳輸、信息收集和處理。在本系統中,我們采用了性能/價格比較高的計算機構成廠級的監控工作站。在PLC與上位計算機之間采用RS-485和RS-232C標準通信接口進行通信。
在兩級計算機控制系統中,最不穩定的環節就是上位機。為了保證系統的穩定性,避免因上位機的故障導致系統控制失靈,所有采集到的信號都反饋到PLC當中。上位機需要通過串行通信取得所需的數據信息,并通過串行通信將必要的控制信息和參數設置信息寫入PLC的數據存儲區。因此,串行通信作為上位機和下位機聯系的唯一方式,在整個系統中具有非常重要的作用。
1.1上位機與PLC間的串行通信
計算機與計算機或計算機與外部設備之間的數據傳輸和交換的方式主要有串行通信和并行通信兩種方式,其中串行通信指的是數據逐位傳輸的方式。由于串行通信方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。
1.1.1串行通信
串行通信方式又可分為兩種:同步串行通信方式和異步串行通信方式。
1.同步串行通信方式:同步串行通信是以數據塊(字符塊)為信息單位傳送,每幀信息可以包含很多字符。同步通信要求通信雙方以相同的速率進行,而且要準證確協調,通常通過共享一個時鐘或定時脈沖源保發送方和接收方準確同步。這種通信方式的效率較高,但是對時鐘同步要求非常嚴格,成本較高。
2.異步串行通信方式:異步串行通信以字符為信息單位傳送。雙方需要遵守異步通信協議,以字符為數據單位,發送方傳送字符的時間間隔不確定。每個字符傳輸都以起始位開始,以停止位結束。通信雙方所指定的字符的數據位數,奇偶校驗方法和停止位數必須相同。其傳輸效率比同步通信方式低,但是成本較低。
異步通信是在以起始位開始、停止位結束的一個字符內按約定的頻率進行同步接收。各個字符之間允許有間隙,而且兩個字符之間的間隔是不固定的。在同步通信方式中,不僅同一字符中的相鄰兩位間的時間間隔要相等,而且相鄰字符間的時間間隔也要求相等,這也是同步通信和異步通信方式的主要差別所在。
因此,異步串行通信一般用在數據傳送時間不能確知,發送數據不連續,數據量較少和數據傳輸速率較低的場合;而同步串行通信則用在要求快速、連續傳輸大批量數據的場合。
1.1.2串行通信接口標準
在串行通信時,要求通信雙方都采用一個標準接口,使不同的設備可以方便地連接起來進行通信。在設計通信接口時,一般都采用標準接口以提高其通用性。本系統中,上、下位機進行通信首先面臨的問題就是通信標準的選擇問題。
1、RS-232C接口標準
RS-232C接口標準(全稱EIA-RS-232C標準)是在1969年由美國電子工業聯合會(EIA,Electronic Industrial Associate-Recommended Standard-232C)與Bell公司、調制解調器廠家及計算機終端生產廠家共同開發的用于串行接口的通信協議。它最初是為遠程通信連接數據終端設備DTE(Data Terminal Equipment)和數據通信設備DCE(Data Communication Equipment)而制定的[46]。雖然這個標準的制定沒有考慮計算機系統的應用要求,但是廣泛的用于計算機與終端或外設之間的連接。
RS-232C標準規定了在串行通信時,數據終端設備和數據通信設備之間的接口信號。其中常用信號的名稱、引腳號以及功能如表4-1所示。
表4-1 RS-232C常用信號定義
引腳號 | 信號名稱 | 簡稱 | 信號功能說明 |
2 | 發送數據 | TxD | DTE向DCE發送串行數據 |
3 | 接收數據 | RxD | DTE從DCE接收串行數據 |
4 | 請求發送 | RTS | 請求通信設備切換到發送方向 |
5 | 清除發送 | CTS | 響應DTE請求,提示DCE開始發送 |
6 | 數據設備就緒 | DSR | DCE通信設備就緒 |
7 | 信號地 | SG | 整個電路的公共信號地 |
8 | 數據載波檢測 | DCD | DCE收到載波 |
20 | 數據終端就緒 | DTR | DTE終端設備就緒 |
22 | 振鈴 | RI | 通信線路上有振鈴 |
RS-232C的電氣特性:RS-232C采用的是負邏輯工作,即邏輯“1”用負電壓(-3~-15V)表示,邏輯“0”用正電壓(+3~+15V)表示。介于-3V和+3V之間以及低于-15V或高于+15V的電壓沒有意義。實際工作時,應保證電平在±(5~15)V之間。由于RS232C是用正負電壓來表示邏輯狀態,與以高低電平表示邏輯狀態的TTL不同。為了能夠同計算機接口或終端的TTL器件連接,必須進行電平和邏輯關系的轉換。目前使用較為廣泛的是集成電路轉換器件,如MC1488和MC1489。
RS-232C的機械特性:雖然RS-232標準定義了25個信號,但進行異步通信時實際只用到了9個信號:2個數據信號、6個控制信號和1個信號地線。因此RS-232的連接器主要有DB25和DB9兩種類型。現在微型計算機上均采用DB9型連接器作為主板上COM1和COM2兩個串行口的連接器,其引腳及信號分配如圖4-2所示。
3、RS-485接口標準
RS-485標準也是一種平衡傳輸方式的串行接口標準,它和RS-422A兼容并且擴展了RS-422A的功能。
RS-485的電氣特性:邏輯“1”以兩線間的電壓差為+(2-6)V表示;邏輯“0”以兩線間的電壓差為-(2-6)V表示。接口信號電平比RS-232C降低了,就不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL電路連接。數據最高傳輸速率為10Mbps。RS-485接口是采用平衡驅動器和差分接收器的組合,抗共模干擾能力增強,即抗干擾性好。RS-485接口的最大傳輸距離標準值為4000英尺,實際上可達3000米。RS-485接口在總線上是允許連接多達128個收發器,具有多站能力,用戶可以利用它建立起設備網絡。RS-485接口由于具有良好的抗干擾性、傳輸距離長和多站能力等優點使其成為首選的串行接口。
本系統中,上位機和下位機的通信運用了以上標準中的RS485和RS232C兩種通信標準。計算機具有標準RS232C接口,而PLC具有標準RS485接口,兩者通過電纜和RS485/RS232C轉換模塊連接(如圖所示4-3)。
1.2通訊參數設置和通訊測試界面
在供水自動化監控系統中,信息管理及監控軟件作為處理、顯示和存儲數據的核心,主要負責對各個電動機的轉速和各處管道壓力的查詢、監控以及報警的處理。運行信息管理及監控軟件的計算機與PLC之間的通訊主要是通過RS-232C串行接口(PC機一般提供了COM1和COM2兩個串行口)進行通訊,實現系統的監測控制和信息管理功能。
本系統中上位機的信息管理及監控軟件運行在Windows2000/NT操作系統下,串行通訊程序運用Inprise公司推出的快速開發工具Delphi 6.0開發。PPI通信協議是西門子專為S7-200系列PLC開發的一個通信協議,物理上采用RS485信號電平,PLC默認處于該方式。使用PPI方式對PLC編程及調試監控,其硬件連接只需通過編程(PC/PPI)電纜即可實現。軟件編程采用中文環境、內部系統協議,設計人員只需通過軟件設置一下參數,數據如交換不需要考慮,用NETR和NETW兩條語句即可進行數據的傳遞。
1.2.1通訊參數設置
為了進行串口通信,實現系統的監測控制和信息管理功能,必須對通訊參數加以設置。
通信設置:
串口:COM1、COM2
波特率:300、600、1200...
校驗方法:N、E、M、O、S
數據位數
停止位數:
Setting:
緩沖區設置
接收緩沖區:字節
發送緩沖區:字節
數據傳送方式
文本形式和二進制形式
流控制
不握手(默認)、XON/XOFF方式、
RTS/CTS方式、 XON/XOFF AND RTS/CTS方式
1.2.2通訊測試界面
通信測試界面如圖4-5所示。
通訊設置
Setting屬性值
commport屬性值
通訊狀態
串口狀態
發送字節數
接收字節數
數據顯示
接收數據顯示
發送數據顯示
1.3 PLC通信程序設計
1.3.1 PLC網絡通信協議[19]
本系統采用的PLC是德國SIEMENS公司生產的S7-200系列,主模塊采用CPU226,擴展模塊采用數字量擴展模塊EM222和模擬量擴展模塊EM235。
S7-200系列CPU具有強大的通信能力。主要支持以下幾種協議:
1.PI(Point-to-Point)協議,即點到點接口協議。PPI是一個主/從協議,主站(其它CPU或SIMATIC編程器)給從站發送申請,從站進行響應。從站不初始化信息,只響應主站的申請或查詢。如果在用戶程序中允許PPI主站模式,S7-200 CPU在RUN模式下可以作為主站,還可以利用網絡讀(NETR)和網絡寫(NETW)指令讀寫其他CPU,同時也能夠作為從站響應來自其它主站的申請。采用PPI協議的網絡中最多只能有32個主站。該協議主要是用來編程、PPI組網等
2.MPI(Multi-Point)協議,即多點接口協議。MPI可以是主/主協議或主/從協議,協議如何操作依賴于設備類型(設備是S7-200系列CPU時建立主/從連接)。MPI總在兩個相互通信的設備之間建立連接,其它主站不能干涉兩個設備之間已建立的連接。由于S7-200的連接是非公用的,并且需要CPU中的資源,每個S7-200 CPU只能支持4個連接,每個EM277模塊支持6個連接。在使用時,每個S7-200 CPU和EM277模塊保留兩個連接,分別用于連接SIMATIC編程器(或計算機)以及操作面板。這些保留連接不能被其它類型的主站使用。
3.ROFIBUS協議。PROFIBUS協議設計用于分布式I/O設備(遠程I/O)的高速通信。PROFIBUS網絡通常有一個主站和幾個I/O從站,主站配置成知道所連接的I/O從站的型號和地址。主站初始化網絡并核對網絡上的從站設備和配置中的是否匹配。主站連續的把輸出數據寫到從站并從它們讀取輸入數據。
4.戶自定義協議(自由口協議)。自由口協議可以由用戶定義通訊協議,通過用戶程序控制S7-200通信口的操作模式,將CPU與任意通訊協議公開的設備聯網,如上位計算機、打印機、變頻器等。用戶程序通過使用接收中斷、發送中斷、發送指令(XMT)和接收指令(RCV)來控制通信口的操作。在自由口模式下,通信協議完全由用戶程序控制。用戶程序通過設置SMB30(0口)允許自由口模式,而且只有在CPU處于RUN模式時才能允許。當CPU處于STOP模式時,自由口通信停止,通信口轉換成正常的PPI協議操作。
可以利用PC/PPI電纜和自由口通信功能把S7-200 CPU連接到許多和RS-232標準兼容的設備。PC/PPI電纜支持波特率設置,利用PC/PPI電纜盒上的DIP開關可以配置所需的波特率。波特率和開關位置的對應關系如表4-6所示:
表4-6波特率和開關位置對應表
波特率 | 38400 | 19200 | 9600 | 4800 | 2400 | 1200 | 600 | 300 |
開關(1=上) | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
當數據從RS-232傳送到RS-485口時,PC/PPI電纜是發送模式。當數據從RS-485傳送到RS-232口時,PC/PPI電纜是接收模式。當檢測到RS-232的發送線有字符時,電纜立即從接收模式轉換到發送模式。當RS-232發送線處于閑置的時間超過電纜切換時間時,電纜又切換到接收模式。這個時間與電纜上的DIP開關設定的波特率選擇有關,如表4-7所示:
表4-7 PC/PPI電纜轉換時間(發送模式到接收模式)
波 特 率 | 38400 | 19200 | 9600 | 4800 | 2400 | 1200 | 600 |
轉換時間(ms) | 0.5 | 1 | 2 | 4 | 7 | 14 | 28 |
在使用自由口的系統中使用PC/PPI電纜時,必須在S7-200 CPU的用戶程序中包含轉換時間。S7-200 CPU在接收到RS-232設備的申請信息后,S7-200 CPU的發送信息響應必須延遲超過或等于電纜的切換時間。RS-232設備在接收到RS-232設備的申請信息后,S7-200 CPU的下一次申請信息的發出必須延遲超過或等于電纜的切換時間。在以上兩種情況中,需要通過延遲使PC/PPI電纜有足夠的時間從發送模式切換到接收模式,以便于數據從RS-485口傳送到RS-232口。
1.3.2 PLC通信程序設計
PLC作為控制系統中的下位機,不主動發送數據而是被動的響應上位機的命令,根據上位機的指令進行數據發送和接收。PLC中的通信程序由主程序、三個子程序和三個中斷組成,通信程序的流程如圖4-4所示。
1、主程序
PLC在第一次掃描時執行初始化子程序,對端口及RCV指令進行初始化。初始化完成后,使端口處于接收狀態。RCV指令將接收到的數據保存到接收緩沖區,同時產生接收完成中斷。PLC每接收到一條指令后都會發送一條反饋信息,發送完成后產生發送完成中斷。程序中使用的標志位含義約定如下:
M0.0:BCC校驗正確則置位;
M0.1:Verify子程序的觸發條件,被置位表示進行BCC校驗。
//主程序
LD SM0.1
CALL Init
LDB= VB117, VB150 //接收數據
AB= VB103, 16#05
A M0.0
CALL Recv
LDB= VB117, VB150 //發送數據
AB= VB103, 16#06
A M0.0
CALL Send
LD M0.1 //校驗
CALL Verify
LD SM4.5
RCV VB100, 0
2、通信初始化子程序(Init)
本系統采用自由口通信,通信協議為自定義的。用戶可以通過設置PLC中相應的特殊寄存器SMB30等的參數改變485口的波特率、數據格式(數據位數、停止位、校驗),以適應不同的通訊協議。PLC采用了特殊存儲器(SM)標志位,提供大量的狀態和控制功能,并且能夠使CPU和用戶程序之間交換信息。
SMB30和SMB130是自由端口控制寄存器。SMB30控制自由端口0的通信方式,SMB130控制自由端口1的通信方式。這兩個寄存器是用來設置自由端口通信的操作方式,并提供自由端口或者系統所支持的協議之間的選擇。Pp用于校驗選擇,00和10表示不校驗,01表示奇校驗,11表示偶校驗。d用于指定每個字符的數據位,0表示8位字符,1表示7位字符。bbb用于選擇自由口通信的波特率,其含義同表4-2。mm用于協議選擇,00表示PPI/從站模式,01表示自由口協議,10表示PPI/主站模式,11保留不用。
SMB87或SMB187用于控制接收信息的標志;SMB88或SMB188用于指定開始的信息字符;SMB88或SMB188用于指定
文章版權歸西部工控xbgk所有,未經許可不得轉載。