【正文】
mod_doc As Longmod_doc = hex_doc(hex4_text)For bit_num = 0 To 15bit_text(15 bit_num) = IIf(mod_doc / 2 ^ (15 bit_num) 1, 0, 1)mod_doc = mod_doc Mod 2 ^ (15 bit_num)hex_bit = hex_bit + bit_text(15 bit_num)Next bit_numEnd Function3) 二進制轉(zhuǎn)十六進制Function bit16_doc(bit16_doc_txt As String) As LongDim i As Byte bit16_doc = 0Select Case Len(bit16_doc_txt) Case 1: bit16_doc_txt = 000000000000000 + bit16_doc_txt Case 2: bit16_doc_txt = 00000000000000 + bit16_doc_txt Case 3: bit16_doc_txt = 0000000000000 + bit16_doc_txt Case 4: bit16_doc_txt = 000000000000 + bit16_doc_txt Case 5: bit16_doc_txt = 00000000000 + bit16_doc_txt Case 6: bit16_doc_txt = 0000000000 + bit16_doc_txt Case 7: bit16_doc_txt = 000000000 + bit16_doc_txt Case 8: bit16_doc_txt = 00000000 + bit16_doc_txt Case 9: bit16_doc_txt = 0000000 + bit16_doc_txt Case 10: bit16_doc_txt = 000000 + bit16_doc_txt Case 11: bit16_doc_txt = 00000 + bit16_doc_txt Case 12: bit16_doc_txt = 0000 + bit16_doc_txt Case 13: bit16_doc_txt = 000 + bit16_doc_txt Case 14: bit16_doc_txt = 00 + bit16_doc_txt Case 15: bit16_doc_txt = + bit16_doc_txt Case 16: bit16_doc_txt = bit16_doc_txt End SelectFor i = 0 To 15 bit16_doc = bit16_doc + (Val(Mid(bit16_doc_txt, 16 i, 1))) * 2 ^ iNext iEnd Function4)和校驗在通信格式中的最后一個字符區(qū)是和校驗,這是PLC或者計算機判斷接收的數(shù)據(jù)的主要依據(jù),如果校驗代碼是固定的就可以人工算出來后直接輸入即可,但在進行D元件寫入的時候,數(shù)據(jù)是不斷變化的,這樣一來,和校驗就不是固定的了,這就需要做一個和校驗的子程序。Public Function chksum(chksum_text As String) As String Dim text_len As ByteDim i As ByteDim sum_doc As LongDim sum_hex As Stringtext_len = Len(chksum_text)For i = 1 To text_lensum_doc = Asc(Mid(chksum_text, i, 1)) + sum_docNext isum_hex = Hex(sum_doc)chksum = Right(sum_hex, 2)End Function5)增加空格及刪除空格在顯示二進制的時候,因為有16位,這樣看起來很難找到所需要的信息,那么按照第4位二進制的對應一位十六進制,這就每隔四位就一個空格,這樣一來尋找所需要的信息也方便。Public Function Space_4(Space_text As String) As StringDim n As ByteFor n = 1 To Len(Close_Space_4(Space_text)) If n Mod 4 = 0 Then Space_4 = Space_4 + Mid(Close_Space_4(Space_text), Len(Close_Space_4(Space_text)) n + 1, 1) + Else Space_4 = Space_4 + Mid(Close_Space_4(Space_text), Len(Close_Space_4(Space_text)) n + 1, 1) End If Next n Space_4 = StrReverse(Space_4) Space_4 = LTrim(Space_4)End Function 在對每四個位進行一個空格后,那么要再把轉(zhuǎn)換別的進制的時候就會出錯了,因為字符串里面有一個空格字符,這樣在進行進制轉(zhuǎn)換之前要把這個空格刪除掉。Public Function Close_Space_4(Close_Space_text As String) As StringDim Close_Space_text_b As StringFor i = 1 To Len(Close_Space_text) If Mid(Close_Space_text, i, 1) Then Close_Space_text_b = Close_Space_text_b amp。 Mid(Close_Space_text, i, 1) End IfNext iClose_Space_4 = Close_Space_text_bEnd Function總結(jié) 我們這次選擇的畢業(yè)設計的題目是“基于Modbus總線控制的上位通信”, 之所以選擇這個題目,是因為我們自己感覺它具有挑戰(zhàn)性,更是對自己能力的提高有很大的幫助。 這次畢業(yè)設計的任務主要是為了實現(xiàn)計算機與PLC、PLC與變頻器兩個方面的通信,設計的過程中使用了RS422協(xié)議和Modbus協(xié)議通信格式,整個設計過程表現(xiàn)出了基于Modbus總線控制的上位機通信在工業(yè)控制系統(tǒng)運用中的實用價值性和優(yōu)越性。在現(xiàn)時多元化的自動控制系統(tǒng)中,基于modbus的上位機控制系統(tǒng)相對于組態(tài)網(wǎng)等一些控制系統(tǒng)而言,也許有著它一些不足之處,但是,對于成本計算方面和功能實現(xiàn)方面,它也擁有著自身的優(yōu)勢。正是,監(jiān)控性強、成本低等優(yōu)點促使它在工業(yè)控制的運用中占有一席之地,使得PLC的運用更加多元化,也加快了工業(yè)的生產(chǎn)效率。 這次的設計斷斷續(xù)續(xù)的花費了我們很長時間,在整個畢業(yè)論文的設計過程中我們學到了做任何事情所要有正確的態(tài)度和良好的心態(tài),首先我們明白了做學問要一絲不茍,對于出現(xiàn)的任何問題和偏差都不要輕視,要通過正確的途徑去解決,在做事情的過程中要有耐心和毅力,不要一遇到困難就打退堂鼓,只要堅持下去就可以找到思路去解決問題的。在工作中要學會與人合作的態(tài)度,認真聽取別人的意見,這樣做起事情來就可以事倍功半。 此次論文的完成既為大學三年劃上了一個完美的句號,也為將來的人生之路做好了一個很好的鋪墊。參考文獻[1] 郭昌榮 FX系列PLC的鏈接通信及VB圖形監(jiān)視 北京航空航天大學出版社,[2] 廖常初 FX系列PLC編程及應用 機械工業(yè)出版社 [3] 三菱FRD700系列變頻器應用篇 中國工控網(wǎng) [4] Modbus通信協(xié)議中文版 豆丁網(wǎng)[5] 劉彬彬、安劍 Visual Basic從入門到精通(第2版)清華大學出版社 致謝這次畢業(yè)論文的完成,很大程度上也要歸功于我的指導老師黃誠老師,黃老師給了我很多意見和啟發(fā),在論文內(nèi)容的選取,架構(gòu),排版及表達上都給了我很多指導,同時黃老師的博學,對學術(shù)的認真,以及對學生平易親和的態(tài)度給我留下了深刻的印象。在這里,我要向他表示最真誠的謝意。 我作為機械工程系的一名畢業(yè)生,到找工作的時候總有“書到用時方恨少”的感慨,也總在告誡及激勵自己“每天進步一點點”,也相信總有一天能有些許收獲,只要心還愿攀登,就沒有到不了的高度!