① 三菱PLC與旋轉編碼器的程序例子
旋轉編碼器是通過光電轉換,將輸出至軸上的機械、幾何位移量轉換成脈沖或數字信號的感測器,
主要用於速度或位置(角度)的檢測。
典型的旋轉編碼器是由光柵盤和光電檢測裝置組成。光柵盤是在一定直徑的圓板上等分地開通若干
個長方形狹縫。
由於光電碼盤與電動機同軸,電動機旋轉時,光柵盤與電動機同速旋轉。
經發光二極體等電子元件組成的檢測裝置檢測輸出若干脈沖信號。
通過計算每秒旋轉編碼器輸出脈沖的個數就能反映當前電動機的轉速。
一般來說,根據旋轉編碼器產生脈沖的方式的不同,可以分為增量式、絕對式以及復合式三大類。
自動線上常採用的是增量式旋轉編碼器。
增量式編碼器是直接利用光電轉換原理輸出三組方波脈沖A、B和Z相;
A、B兩組脈沖相位差90,用於辯向:當A相脈沖超前B相時為正轉方向,而當B相脈沖超前A相時則
為反轉方向。
Z相為每轉一個脈沖,用於基準點定位。
1、三菱PLC的高速計數器
高速計數器是PLC的編程軟元件,相對於普通計數器,高速計數器用於頻率高於機內掃描頻率的機外
脈沖計數。
由於計數信號頻率高,計數以中斷方式進行,計數器的當前值等於設定值時,計數器的輸出接點立
即工作。
三菱PLC內置有21點高速計數器C235~C255,每一個高速計數器都規定了其功能和佔用的輸入點。
⑴
高速計數器的功能分配如下:
C235~C245共11個高速計數器用作一相一計數輸入的高速計數,即每一計數器佔用1點高速計數輸入點。
計數方向可以是增序或者減序計數,取決於對應的特殊輔助繼電器M8□□□的狀態。
例如C245佔用X002作為高速計數輸入點,當對應的特殊輔助繼電器M8245被置位時,作增序計
數。
C245還佔用X003和X007分別作為該計數器的外部復位和置位輸入端。
C246~C250共5個高速計數器用作一相二計數輸入的高速計數。
即每一計數器佔用2點高速計數輸入,其中1點為增計數輸入,另一點為減計數輸入。
例如C250佔用X003作為增計數輸入,佔用X004作為減計數輸入。
另外佔用X005作為外部復位輸入端,佔用X007作為外部置位輸入端。
同樣,計數器的計數方向也可以通過編程對應的特殊輔助繼電器M8□□□狀態指定。
C251~C255共5個高速計數器用作二相二計數輸入的高速計數。
即每一計數器佔用2點高速計數輸入,其中1點為A相計數輸入,另1點為與A相相位差90º的B相計數
輸入。
C251~C255的功能和佔用的輸入點如表5-14所示。
表5-14 高速計數器C251~C255的功能和佔用的輸入點
C251AB
C252ABR
C253ABR
C254ABRS
C255ABRS
如前所述,分揀單元所使用的是具有A、B兩相90º相位差的通用型旋轉編碼器,且Z相脈沖信號沒有
使用。
由表5-14,可選用高速計數器C251。這時編碼器的A、B兩相脈沖輸出應連接到X000和X001點。
⑵
每一個高速計數器都規定了不同的輸入點,但所有的高速計數器的輸入點都在X000~X007范圍內,
並且這些輸入點不能重復使用。
例如,使用了C251,因為X000、X001被佔用,所以規定為佔用這兩個輸入點的其他高速計數器,
例如C252、C254等都不能使用。
2、高速計數器的編程
如果外部高速計數源(旋轉編碼器輸出)已經連接到PLC的輸入端,那末在程序中就可直接使用相對
應的高速計數器進行計數。
例如,在圖5-18中,設定C255的設置值為100,當C255的當前值等於100時,
計數器的輸出接點立即工作。從而控制相應的輸出Y010 ON。
由於中斷方式計數,且當前值=預置值時,計數器會及時動作,但實際輸出信號卻依賴於掃描周
期。
如果希望計數器動作時就立即輸出信號,就要採用中斷工作方式,使用高速計數器的專用指令。
三菱PLC高速處理指令中有3條是關於高速計數器的,都是32位指令。
它們的具體的使用方法,請參考三菱PLC編程手冊。
(1)stm32仿三菱plc源代碼擴展閱讀:
三菱PLC的兩個高速口可以產生脈沖來控制伺服(或步進)電機的轉速。
例如:脈沖頻率為10000HZ,驅動器每2048個脈沖轉一圈,電子齒輪比4/1(可調),
則轉速為10000/(2048*4)*4/1 r/s。
可以利用高速計數器的啊C235~255都是高速計數器的。
然後你可以就是測量脈沖的位置然後給C235一個你要到達的位置的地方就可以定位到你想要的高
度。
脈沖相對於當前位置減少的時候就是電機反轉了你可以在寫一個比較指令與實際位置比較這樣就可
以判斷出電機的正反轉了。
參考資料:網路-旋轉編碼器
② 能給我發個VB與三菱PLC通訊的源代碼實例嗎,非常感謝啊
Abstract: Describes all kinds of basic serial port communication methods using Visual Basic 6.0 and design of free port communication program of MITSUBISH PLC, furthermore set focus on the designing method of serial port communication through dynamic linked library in Visual Basic 6.0
Key Words: Serial port communication, PLC, Visual Basic 6.0一、引言
在工業生產中,人們常常面臨著數據採集與管理。作為工廠自動化的三大支柱可編程式控制制器PLC(Programmable Logic Controller),由於其安全可靠,廣泛的用於數據採集與控制。生產過程中,要監視PLC內部的數據與運行狀況,選用市場上的人機界面或組態軟體,雖然功能豐富,但大都價格昂貴,在一些中小規模的生產場合,人們希望能自己用高級語言開發一個簡易實用的通信程序。微軟公司推出的Visual Basic 6.0,開發串列通信程序時,有兩種方法,一種是用Windows API函數,另一種是用VB支持的通信控制項MSCOMM.OCX。利用Windows API函數是通過調用讀寫等函數來操作串口。兩種比較,使用MSCOMM.OCX控制項編程方便,具有更完善的發送和接收功能。這里採用了MSCOMM.OCX控制項。
本文根據杭州某包裝材料公司原料配料控制系統為背景,簡述實現計算機與三菱FX系列PLC通信的實現過程。二、硬體與選型
日本三菱公司是國際著名的工廠自動化設備製造商,工業可編程式控制制器在國內市場佔有率一直保持前列。項目選用三菱FX2N-64MR型PLC,SC-09電纜作為計算機與PLC通信的連線。連接電纜的9針端連接在計算機串口上,另一端連接在PLC的RS-422編程口。系統框圖如圖一所示:
SC-09電纜
計算機 三菱 PLC
圖一
三、軟體編程
軟體設計主要包括PLC梯形圖設計和計算機VB程序、資料庫設計。計算機操作系統為Windows98,編程語言用Visual Basic 6.0,資料庫選用Access97,梯形圖程序在三菱PLC編程軟體GPPWIN 軟體環境設計。上位機軟體實現計算機對PLC內部數據讀取、寫入參數和保存數據到資料庫。
三菱FX2N型PLC編程口通信協議如下:
命令
命令字
控制元件
備注
讀元件
0
X,Y,M,S,T,C,D
讀字/位元件狀態
寫元件
1
X,Y,M,S,T,C,D
寫字/位元件狀態
置位
7
X,Y,M,S,T,C
位元件置位
復位
8
X,Y,M,S,T,C
位元件復位
通信格式:
起始符
命令字
首地址
數據區
結束符
和校驗
波特率9600,偶校驗,8位數據位,一位停止位。
在新建工程的表單上添加MSCOMM.OCX控制項,初始化程序:
Private Sub Form_Load()
MSComm1.CommPort = 1 '選擇COM1口
MSComm1.Settings = "9600,e,7,1"
End Sub
系統參數主畫面如下圖所示:
圖二
數據讀取子程序:
Public Function GetData(ByVal StartAddress As String, ByVal GetBytes As Integer, ByVal Hex_Bytes As String) As String
MSComm1.InputLen = GetBytes * 2 + 4
MSComm1.Output = STX + CMD_Read + StartAddress + Hex_Bytes + ETX + GetSumChk(CMD_Read + StartAddress + Hex_Bytes + ETX)
『傳送數據組成:起始符+命令+首地址+數據位+結束符+和檢驗碼
GetData = MSComm1.Input
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0
End Function
如需讀取數據,通過調用GetData子程序。
參數設置程序可參考讀取子程序,只是改變命令而已。
Access97資料庫中包含三個表單,包括參數表、記錄表、報警記錄表。
通過如下子程序是將實際稱量值(記錄表)更新到資料庫:Private Sub SaveData()
Dim i As Integer
Dim valid As Boolean
On Error Resume Next
valid = True
Data1.Recordset.AddNew
Data1.Recordset.Fields("dtime") = TimeSerial(OnHour, OnMinute, OnSecond)
Data1.Recordset.Fields("systime") = Time 『系統時間
Data1.Recordset.Fields("get_xl") = LF(1) 『小料當前稱量值
Data1.Recordset.Fields("get_fjs") = LF(2) 『方解石當前稱量值
Data1.Recordset.Fields("get_cs") = LF(3) 『長石當前稱量值
Data1.Recordset.Fields("get_sys") = LF(4) 『石英砂當前稱量值
Data1.Recordset.Fields("get_cj") = LF(5) 『純鹼當前稱量值
On Error Resume Next
Data1.Recordset.Update 『更新資料庫記錄
Data1.Recordset.MovePrevious
End Sub
程序中,LF(i)變數對應為圖二系統參數表單中實稱值。
保存參數子程序只是對資料庫操作,程序結構可參考以上子程序。
上位機與PLC通信質量的好壞,對系統的安全可靠運行影響極大,因此,編寫程序時,除了在兩者之間的通信協議上保持絕對一致和採取相應的容錯技術外,還要考慮系統的整體容錯技術,防止系統的不正常。
四、結束語
串列通信是目前計算機與其他設備之間通信廣泛採用的方式之一,傳送數據准確,程序穩定運行是系統開發的主要目的。本設計中充分利用計算機和PLC的資源,在幾乎不增加設備開支的情況下成功的實現上位機與PLC之間的通信。