<menuitem id="vn1x5"></menuitem>
<menuitem id="vn1x5"><strike id="vn1x5"><listing id="vn1x5"></listing></strike></menuitem>
<var id="vn1x5"><video id="vn1x5"></video></var>
<cite id="vn1x5"></cite><cite id="vn1x5"></cite>
<del id="vn1x5"></del>
<cite id="vn1x5"></cite>
<ins id="vn1x5"></ins>
<cite id="vn1x5"><video id="vn1x5"></video></cite>
<var id="vn1x5"><video id="vn1x5"></video></var><cite id="vn1x5"></cite><ins id="vn1x5"><span id="vn1x5"></span></ins>
<var id="vn1x5"></var>
<var id="vn1x5"><video id="vn1x5"></video></var>
<ins id="vn1x5"></ins>
<cite id="vn1x5"></cite>
<var id="vn1x5"></var>
<cite id="vn1x5"><video id="vn1x5"><menuitem id="vn1x5"></menuitem></video></cite>
<cite id="vn1x5"></cite><cite id="vn1x5"><video id="vn1x5"></video></cite>
<cite id="vn1x5"><span id="vn1x5"></span></cite><cite id="vn1x5"></cite><cite id="vn1x5"><span id="vn1x5"></span></cite>
<ins id="vn1x5"></ins>
<del id="vn1x5"></del>
<ins id="vn1x5"></ins>
<ins id="vn1x5"></ins>
<menuitem id="vn1x5"><span id="vn1x5"></span></menuitem>
<cite id="vn1x5"><video id="vn1x5"><var id="vn1x5"></var></video></cite>
<var id="vn1x5"><video id="vn1x5"></video></var>
<ins id="vn1x5"></ins>
<ins id="vn1x5"><video id="vn1x5"></video></ins>
<cite id="vn1x5"></cite>
<cite id="vn1x5"><span id="vn1x5"><menuitem id="vn1x5"></menuitem></span></cite>
<cite id="vn1x5"></cite><cite id="vn1x5"><span id="vn1x5"><menuitem id="vn1x5"></menuitem></span></cite>
<thead id="vn1x5"><video id="vn1x5"><listing id="vn1x5"></listing></video></thead>
<cite id="vn1x5"></cite>
<var id="vn1x5"></var>
<menuitem id="vn1x5"></menuitem>
開課地點:
當前位置:主頁 > 培訓資料 > 技術資料 >

用VB實現PLC與計算機間的串行通信

1通訊原理與方法
    上位機要能夠通過PLC監控下層設備的狀態,就要實現上位機與PLC間的通信,一般工業控制中都是采用RS232C實現。上位機首先向PLC發送查詢數據的指令(實際上是查詢PLC中端子的狀態和DM區的值等)PLC接收了上位的指令后,進行校驗(FCS校驗碼),看其是否正確,如果正確,則向上位機傳送數據(包含首尾校驗字節)。否則,PLC拒絕向上位機傳送數據。上位接收到PLC傳送的數據,也要判斷正確與否,如果正確,則接收,否則,拒絕接收。
   
由于CPM1A沒有提供串行通信口,我們利用其提供的外設端口實現通信。PLC與計算機之間的
連接是通過OMRON提供的專用電纜CQM1-CIF01來實現的,其硬件連接圖如圖1所示。


 
                       
                        
 

 


2  PLC與計算機間的通信規約
   
計算機與PLC間的通信是以為單位進行的,并且在通信的過程中,計算機具有更高的優先級。首先,計算機向PLC發出命令幀,然后,PLC作出響應,向計算機發送回響應幀。其中命令幀和響應幀的格式如下:
    (1)
命令幀格式。為了方便計算機和PLC的通訊,CPM1A對在計算機連接通信中交換的命令和響應規定了相應的格式。當計算機發送一個命令時,命令數據主準備格式如圖2所示。

                      
 


其中@放在首位,表示以@開始,設備號為上位機識別所連接的PLC的設備號。識別碼為命令代碼,用來設置用戶希望上位機完成的操作,FCS為幀檢驗代碼,一旦通信出錯,通過計算FCS可以及時發現。結束符為“*”CR回車符,表示命令結束。
     (2)
響應幀格式。由PLC發出的對應于命令格式的響應幀格式如圖3所示。

                             
 


其中,異常碼可以確定計算機發送的命令是否正確執行。其它的與正文中的含義相同。正文僅在有讀出數據時有返回。

通信程序的設計
    為了充分利用計算機數據處理的強大功能,我們可以采用計算機有優先權的方式,在計算機上編寫程序來實現計算機與PLC的通信, 計算機向PLC發出命令發起通信,PLC自動返回響應。本文中采用VB來編寫計算機與PLC間的通訊程序。在VB中提供了通信控件應用通信控件(MSCOMM),實現通過串行端口傳送和接受的功能。
下面介紹MSCOMM控件的屬性:
    *CommPort:
設定通信連接端口代號,程序必須指定所要使用的串行端口號,Windows系統使用所設定的端口與外界通信。

    *PortOpen:
設定通信口狀態,若為真,通信端口打開,否則關閉。
    *Settings:
設定通信口參數,其格式是"bbbb,p
      ,d,s"
,其中bbbb為通信速率(波特率)p為通信檢查方式(奇偶校驗)  d     為數據位數,s為停止位數,其設定應與PLC的設定一致。

    *Input:
將對方傳送至輸入緩沖區的字符讀入到程序。
    *Output:
將字符寫入輸出緩沖區。
    *InBufferCount:
傳回接收緩沖區中的字符數。
    *OutBufferCount:
傳回輸出緩沖區中的字符數。
    *InputLen:
設定串行端口讀入字符串的長度。
    *InputMode:
設定接收數據的方式。
    *Rthreshold:
設定引發接收事件的字符數。
    *CommEvent:
傳回OnComm事件發生時的數值碼
    *OnComm
事件:無論是錯誤或事件發生,都會觸發此事件。
    (1)
控件參數的初始化。
   
初始化程序如下:
Mscomm.ComPort=2 '
使用串口
Com2
Mscomm.Settings="9600, E, 7, 2" '
波特率9600,偶校驗,7位數據位,2位停止位

Mscomm.PortOpen=True '
打開通信端口,準備通信
    (2)
計算校驗碼FCS,計算FCSVB自定義函數如下:
    Function FCS(ByVal InputStr As String) As String
Dim Slen, i, Xorresult As Integer
Dim Tempfes As String
Slen=Len(InputStr)      '
求輸入字符串長度

Xorresult = 0
For i = 1 To Slen
Xorresult = Xorresult Xor Asc(Mid$(InputStr, i, 1))     '
按位異或
Next i
Tempfes=Hex$(Xorresult)     '
轉化為16進制
If Len(Tempfes)=1Then Tempfes =“0”+Tempfes
FCS = Tempfes
End Function
    (3)
計算機與PLC通信程序。
   
主要是一個自定義函數。
Function ReadData(ByVal InputStr As String, ByVal Num As Integer) As String
Dim OutputStr As String
Dim InString As String
Dim ReturnStr As String
Dim EndString As String
Dim FCSString As String
Dim ReturnFCSString As String)
MSComm.InBufferCount=0
OutputStr=InputStr+FCS(InputStr)+“*”   '
給出命令幀
MSComm.Output=OutputStr+Chr$(13)      '
PLC傳送命令幀
Do
DoEvents
Loop While MSComm.InBufferCount < 15
InString=MSComm.Input    '
獲取PLC的響應幀

'結束碼判斷
EndString = Mid$(InString, Len(InString) -
  Num- 5, 2)
If EndString = "13" Then
     ReadData = "Error"
     Exit Function
ElseIf EndString = "14" Then
     ReadData = "Error"
     Exit Function
ElseIf EndString = "15" Then
     ReadData = "Error"
     Exit Function
ElseIf EndString = "18" Then
     ReadData = "Error"
     Exit Function
ElseIf EndString = "A3" Then
     ReadData = "Error"
     Exit Function
ElseIf EndString = "A8" Then
     ReadData = "Error"
     Exit Function
End If

'響應幀校驗
EndString = Mid$(InString, 1, Len(InString) - 4)
ReturnFCSString = Mid$(InString,Len(InString) -     3, 2)
FCSString = FCS(EndString)
If FCSString <> ReturnFCSString Then
     ReadData = "Error"
     Exit Function
End If

ReturnStr = Mid$(InString,
      Len(InString) - Num - 3, Num)
ReadData = ReturnStr
End Function
從上面程序可以看到,計算機對PLC返回的響應幀要進行FCS校驗,并利用異常碼排除返回的異常數據,這樣不但可以提高計算機獲取信息的正確性,而且提高了計算機監控的實時性。

 

 

 

 

 

 

 

 

聯系方式: 
   聯系人:王老師                     郵箱:[email protected]
  聯系電話:18999183549、0991-7799165、010-63866300
  中國工業自動化培訓網址:www.qpiy.tw

 

歡迎咨詢企業內訓,企業內訓更具針對性,"對癥下藥"效果佳!

山西十一选五