zcb198814
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 15 個
工控威望: 156 點
下載積分: 1211 分
在線時間: 23(小時)
注冊時間: 2011-06-19
最后登錄: 2024-11-26
查看zcb198814的 主題 / 回貼
樓主  發(fā)表于: 2011-07-03 10:50
PLC以卓越的可靠性和方便的可編程性廣泛應用于工業(yè)控制領(lǐng)域。實現(xiàn)PC機與PLC通信的目的是為了向用戶提供諸如工藝流程圖顯示、動態(tài)數(shù)據(jù)畫面顯示、報表顯示、窗口技術(shù)等多種功能,為PLC提供良好的人機界面。本文詳細介紹了FX系列PLC的通信協(xié)議,并在Windows環(huán)境下,使用易語言開發(fā)通信程序,實現(xiàn)了PC機與FX系列PLC之間的串行通信。本文對FX系列PLC的通信協(xié)議進行了詳細的介紹,并以易語言為開發(fā)工具實現(xiàn)了PC機與FX系列PLC的串行通信。

1 前言

PLC以卓越的可靠性和方便的可編程性廣泛應用于工業(yè)控制領(lǐng)域。實現(xiàn)PC機與PLC通信的目的是為了向用戶提供諸如工藝流程圖顯示、動態(tài)數(shù)據(jù)畫面顯示、報表顯示、窗口技術(shù)等多種功能,為PLC提供良好的人機界面。本文詳細介紹了FX系列PLC的通信協(xié)議,并在Windows環(huán)境下,使用易語言開發(fā)通信程序,實現(xiàn)了PC機與FX系列PLC之間的串行通信。

2 PC機與PLC實現(xiàn)通信的條件

帶異步通信適配器的PC機與PLC只有滿足如下條件,才能互聯(lián)通信:

(1)帶有異步通信接口的PLC才能與帶異步通信適配器的PC機互聯(lián)。還要求雙方采用的總線標準一致,否則要通過“總線標準變換單元”變換之后才能互聯(lián)。

(2)雙方的初始化,使波特率、數(shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗都相同。

(3)要對PLC的通信協(xié)議分析清楚,嚴格地按照協(xié)議的規(guī)定及幀格式編寫PC機的通信程序。PLC中配有通信機制,一般不需用戶編程。

3 PC機及與FX系列PLC的串行通訊

3.1 硬件連接

PC機與FX系列PLC不能直接連接,要經(jīng)過FX-232AW單元進行RS232C/RS-422的變換,下圖表示了它們之間的連接關(guān)系:

3.2 FX系列PLC的通信協(xié)議

在PC機中必須依據(jù)互聯(lián)的PLC的通信協(xié)議來編寫通信程序,因此先介紹FX系列PLC的通信協(xié)議。

(1)數(shù)據(jù)格式

FX系列PLC采用異步格式,由1位起始位、7位數(shù)據(jù)位、1位偶校驗位及1位停止位組成,波特率為9600bps,字符為ASCII碼。格式如下:

(2)通信命令

FX系列PLC有4個通信命令,它們是讀命令、寫命令、強制通命令、強制斷命令,如下表所示。表中X—輸入繼電器;Y—輸出繼電器;M—輔助繼電器;S—狀態(tài)元件;T—定時器;C—計數(shù)器;D—數(shù)據(jù)寄存器。

(3)通信控制字符

FX系列PLC采用面向字符的傳輸規(guī)程,用到5個通信控制字符,如下表所示。

*當PLC對PC機發(fā)來的ENQ不理解時,用NAK回答。

(4)報文格式

PC機向PLC發(fā)送的報文格式如下:

其中STX為開始標志:02H;ETX為結(jié)束標志:03H;CMD為命令的ASCII碼;SUMH,SUML為從CMD到ETX按字節(jié)求累加和,溢出不計。由于每字節(jié)十六進制數(shù)變?yōu)閮勺止?jié)ASCII代碼,故校驗和為SUMH與SUML。

數(shù)據(jù)段格式與含義如下:

*寫命令的數(shù)據(jù)段有數(shù)據(jù),讀命令的數(shù)據(jù)段則無數(shù)據(jù)。

讀/寫字節(jié)數(shù)為01H~40H(1~64)個。

PLC向PC機發(fā)送的應答報文格式如下:

*對讀命令的應答報文數(shù)據(jù)段為要讀取的數(shù)據(jù),一個數(shù)據(jù)占兩個字節(jié),分上位下位:

對寫命令的應答報文無數(shù)據(jù)段,而用ACK及NAK作為應答內(nèi)容。

(5)傳輸過程

PC機與FX系列PLC之間采用應答方式通信,傳輸出錯則組織重發(fā)。其傳輸過程如下:

PLC根據(jù)PC機的命令,在每個循環(huán)掃描結(jié)束處的END語句后組織自動應答,無需用戶在PLC一方編寫程序。

4 利用易語言編寫通信程序

下面以一個簡單的例子來說明編寫通信程序的要點。假設(shè)PC機要求從PLC中讀入從D123開始的4個字節(jié)的數(shù)據(jù)(D123,D124),其傳輸應答過程及報文如下(圖略可向作者索。

命令報文中10F6H為D123的地址,04H表示要讀入4個字節(jié)的數(shù)據(jù)。校驗和SUM=30H+31H+30H+46H+36H+30H+34H+

03H=174H,溢出部分不計,故SUMH為'7',SUML為‘4’,相應的ASCII碼為“37H”,“34H”。應答報文中4個字節(jié)的十六進制數(shù),其相應的ASCII碼為8個字節(jié),故應答報文長度為12個字節(jié)。

根據(jù)PC機與FX系列PLC的傳輸應答過程編制出如下所示的通信程序流程圖略。

利用VB的MSComm控件,按照流程圖可以編寫如下通信程序?qū)崿F(xiàn)PC機與FX系列PLC之間的串行通信以完成數(shù)據(jù)的讀取。MSComm控件可以采用輪詢或事件驅(qū)動的方法從端口獲取數(shù)據(jù)。在這個例子中使用了輪詢方法。

(1)通信口初始化

端口1.端口號=1

端口1.波特率=9600

端口1.數(shù)據(jù)位數(shù)=7

端口1.奇偶校檢方案=2

端口1.停止位=1

端口1.啟動()


(2)請求通信與確認

Private Function MakeHandShaking() As Boolean

Dim InPackage As String

MSComm1.OutBufferCount = 0

MSComm1.InBufferCount = 0

MSComm1.Output = Chr(&H5)

Do

DoEvents

Loop Until MSComm1.InBufferCount = 1

InPackage = MSComm1.Input

If InPackage = Chr(&H6) Then

MakeHandShaking = True

Else

MakeHandShaking = FalseEnd If

End Function

(3)發(fā)送命令報文

Private Sub SendFrame()

Dim OutString As String

MSComm1.OutBufferCount = 0

MSComm1.InBufferCount = 0

OutStrin = Chr(&H2)+″0″+″10F604″+Chr(&H3)+″74″

MSComm1.Output = OutString

End Sub

(4)讀取應答報文

Private Sub ReceiveFrame()

Dim InString As String

Do

DoEvents

Loop Until MSComm1.InBufferCount = 12

InString = MSComm1.Input

End Sub

5 結(jié)束語

以本文所述機制編寫的通信程序已成功用于以FX2N型PLC作為主控制器的高層建筑玻璃幕墻清洗機器人系統(tǒng)中,通過該通信程序,實現(xiàn)了PC機對PLC的監(jiān)視和控制。同時,本程序?qū)Γ校脵C與其它型號PLC之間的通信也有一定的借鑒意義。



本帖最近評分記錄:
  • 下載積分:+1(ccyan2014) 好貼好貼!
  • 下載積分:+2(ykykkhor) 優(yōu)秀文章
    yf183442
    級別: *
    精華主題: * 篇
    發(fā)帖數(shù)量: * 個
    工控威望: * 點
    下載積分: * 分
    在線時間: (小時)
    注冊時間: *
    最后登錄: *
    查看yf183442的 主題 / 回貼
    1樓  發(fā)表于: 2011-07-03 14:40
    學習了。。。。。