PLC是三菱FX1S-20MR,变频器是台达VFD007M23A在变频器上设置 P88=1 P89=9600 P92=03(8 N 2) P0=03PLC D8120=H0C89想实现对变频器修改运行频率,即P66项LD M8000OUT M8161MOV H0C89 D8120 通讯格式MOV K5 D8129 等待时间MOV H02 D0起始符MOV H30 D1地址MOV H31 D2地址MOV H30 D3写入参数MOV H37 D4写入参数MOV H36 D5第66项MOV H36 D6第66项MOV H30 D7 频率值MOV H35 D8 频率值 MOV H35 D9 频率值MOV H35 D10 频率值MOV H03 D11 停止MOV H30 D12 校验MOV H36 D13 校验LD M8000RS D0 K12 D20 K0LDP M8013 每秒写一次SET M8122RST M8123END经验不足不知哪错了,各位帮我查查吧,谢了
VB實現電腦與台達PLC的串列通信 ───────PLC產品處 王乃全 摘要:本文介紹了Visual Basic6編程語言,MODBUS ASCII通信協定及通過VB如何實現與台達DVP PLC的通信 關鍵字:Visual Basic MODBUS ASCII PLC 前言: 現代的世界是一個高度自動化的世界,各式各樣的設備都可以和電腦連線,而最簡單的自動化連線方式就是使用串列通信。 VB提供了串列通信控制項可以讓開發者開發串列通信的系統程式,功能上也提供了不少為用戶著想的簡便之處。 PLC是現在控制領域不可缺少的部分,已經非常普及,如何簡便的與PLC交互已經成為眾多廠商新的競爭戰場。由此產生了人機界面、組態軟體等產品。這些產品的產生大大簡化了對PLC的控制,操作,使用更方便。但也有共同的缺點:價格過高和開發性較差。VB作為“原始"的編程語言在這兩方面無疑有著明顯的優勢。 本文結合一個簡單的案例,用比較基礎的概念為大家展示如何通過VB實現PC-PLC的通信,對於初涉這個領域的工程師,也會受益與本文提供的基本概念。 一、串列通信基本概念 1、 通信的種類:通常通信的形式可以分為兩種,並行通信(Parallel Communication)和串列通信(Serial Communication)。所謂並行,既是一次傳輸量為8位;而串列一次只傳1位元。這兩種不同的通信模式如圖 平行傳輸 串列傳輸 2、 串列通信 文本框: 12345678文本框: 12345678文本框: 并行设备如打印机文本框: 设 备文本框: 设 备文本框: 并行设备如打印机文本框: 8 7 6 5 4 3 2 1常用的串列通信也有兩種。分別位RS-232和RS-485 2-1 RS-232 RS-232的信號准位元乃是參考地線而來的,如圖,傳輸端參考接地端1來傳送資料;接收端則參考接地端2還原出傳送端的信號準備。 傳送端 接收端 地電壓 接地端1 接地端2 由圖可知,由於兩個接地端准位不一定一樣,而且很容易受到干擾,所以信號在RS-232線路傳輸時,很容易產生錯誤。 2-2 RS-485 RS-485的信號傳輸方式如圖。 傳送端 接收端 地電壓 接地點1 接地點2 RS-485的信號將被傳送出去時會分成正負兩條線路,當到達接收端後,在將信號相減還原成原來的信號;如果將原始的信號表示成(DT),而被分成的信號分別標示成(D+)及(D-),則DT= (D+)-(D-) 同樣地,接收端在接收到信號後,也依據上式還原成原來的樣子。如果線路受到干擾,兩條線路的信號分別為(D+)+Noise (D-)+Noise。接收端還原信號為 (DT)= [(D+)+Noise]-[ (D-)+Noise] 與先前結果一樣,所以RS-485可以有效的防止雜訊的干擾。 二、Visual Basic基本概念 1、 VB是微軟的視窗軟體,提供了很多介面成員。物件、屬性、事件、方法就是四個重要的介面。 2、 VB常用控制項。 2-1標籤控制項 此控制項專用於顯示文字,數位用,顯示如圖 2-2 按鈕控制項 此控制項使用率很高,提供一個供系統用戶操作用的按鈕 2-3 計時器控制項 此控制項的最大作用在於固定的時間內會執行所設置的程式碼一次。 VB提供了大量的控制項,在此不一一敍述。 三、MScomm控制項 要完成VB與PLC等串列設備的通信,MScomm控制項是一個很好用的控制項。所以在此有必要對MScomm控制項做一個較為詳細的說明 1、 MScomm非標準控制項,要手動添加,步驟如下: 1-1選擇功能表的【工程】 1-2 選擇【部件】 1-3 在彈出的對話方塊中做如圖選擇 1-4在部件選項卡就會出現MScomm控制項 2、基本屬性 電腦通信口選擇 通信參數設置 PortOpen 通信口是否打開 Input 收到的字元 Output 發送的字元 文本框: 文本框: 格式 例子 (十六进制)字头 3A站号 01功能码 01起始地址 06 14读取数目 00 25LRC 码 BF 四、MODBUS ASCII。 Modbus 分為ASCII和RTU兩種,ASCII採用的格式和校驗相對簡單,本文採用ASCII格式,並僅對使用的功能碼進行說明,更多的資訊,請參看協定的詳細說明 1、通信格式 STX 起始字元 “:"(3AH) ADR 1 通信地址(站號)採用2個字元 ADR 0 CMD 1 功能碼。採用2個字元 CMD 0 DATA(0) 資料項目 DATA(1) ………. DATA(n-1) LRC CHK 1 LRC 校驗碼。採用2個字元 LRC CHK 0 END 1 結束字元。採用2個字元。 END 1 = CR(0DH),END 0 = LF(0AH) END 0 2、 LRC演算法 ADR H+CMD H+DATA H,然後取2的補數 3、功能碼 05, 寫入線圈 01, 讀線圈狀態 格式 例子(十六進位)字頭 3A 站號 01 功能碼 05 地址 05 00 寫入狀態 FF 00 LRC 碼 F6 06, 寫入單個字寄存器 格式 例子(十六進位) 字頭 3A 站號 01 功能碼 06 寄存器位址 06 00 寫入的資料 12 34 LRC 校驗碼 AD 五、VB與PLC通信的實現 1、控制要求 a、控制PLC的啟動、停止,並顯示運行狀態(綠色為運行,紅色為停止) b、能夠用交替型按鈕控制Y0,Y1。並用指示燈顯示Y0,Y1狀態。(綠色為運行,紅色為停止) c、能夠對D256,D512兩個寄存器進行數值寫入的操作 2、思路: a、PLC啟動停止的標誌位元為M1072,查DVP協議,知道位址為H0C30。按功能碼01操作 b、同樣Y0,Y1的地址分別為H0500,H0501。寫入FF00為ON,0000為OFF,按功能碼05操作 c、D256,D512位址分別為H1100,H1200,按功能碼06操作即可 3、VB介面的設計如圖 用按鈕控制PLC的啟動停止,Y0,Y1的ON/OFF以及D256,D512寫完資料的發送 用Shape元件做指示燈,表示PLC的運行狀態和Y的狀態。 用timer元件不停的讀取M1072的狀態,以判斷PLC的運行情況 用MScomm控制項實現PC與PLC的通信 4、代碼構成 1)、LRC演算法校驗的實現 Public Function LRC(str As String) As String c = 0 l = Len(str) For c = c + 1 To l c_data = Mid$(str, c, 2) d_lrc = d_lrc + Val("&H" + c_data) c = c + 1 Next c If d_lrc > &HFF Then d_lrc = d_lrc Mod &H100 End If h_lrc = Hex(&HFF - d_lrc + 1) If Len(h_lrc) > 2 Then h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2) End If LRC = h_lrc End Function 2)、運行的一開始就判斷PLC的狀態,並設置標誌位元 '初次運行打開串口,並顯示PLC運行狀態 Private Sub Form_Load() Dim s1 As String Dim s2 As String Dim s22 As String Dim s3 As String Dim s4 As String MSComm1.PortOpen = True s2 = "01010C300001" s22 = LRC(s2) s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10) MSComm1.Output = s1 s3 = MSComm1.Input s4 = Mid$(s, 6, 8) If s4 = "0C30FF00" Then plc = 1 'PLC為運行標誌 Else plc = 0 'PLC為停止標誌 End If End Sub 3)、下面一段為用指示燈表示PLC的運行狀態 Private Sub Timer5_Timer() Dim s1 As String Dim s2 As String Dim s22 Dim s3 As String Dim s4 As String s2 = "01010C300001" s22 = LRC(s2) s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10) MSComm1.Output = s1 s3 = MSComm1.Input s4 = Mid$(s3, 8, 2) If s4 = "31" Then plc = 1 'PLC為運行標誌 Else: If s4 = "30" Then plc = 0 'PLC為停止標誌 End If If plc = 1 Then Label2.Caption = "PLC正在運行......" Shape1.FillColor = RGB(0, 255, 0) 'green Else Label2.Caption = "PLC已經停止" Shape1.FillColor = RGB(255, 0, 0) 'red End If End Sub 4)、PLC的啟動與停止 '啟動PLC Private Sub start_Click() Dim strout As String Timer5.Enabled = False str = "00050C30FF00" 'M1072 為PLC啟動停止標誌位元。查地址表,M1072為OC30.FF00為置ON,0000為置OFF '以上都是固定格式,要牢記 LRCC = LRC(str) '計算 str的lrc校驗碼 strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲傳送之資料。13為D,10為A MSComm1.Output = strout Timer5.Enabled = True End Sub '停止PLC Private Sub stop_Click() Dim strout As String Timer5.Enabled = False str = "00050C300000" LRCC = LRC(str) strout = ":" + str + LRCC + Chr$(13) + Chr$(10) MSComm1.Output = strout Timer5.Enabled = True End Sub Y0,Y1的ON/OFF與PLC啟動/停止的控制方式相同,指示燈的表示方式也相同。D256,D512資料寫入的操作類似,此處由於篇幅的關係,就不把代碼全部列出。 六、總結 由於VB語言使用的簡易型,為眾多工程技術人員與串列設備的通信提供了很大的方便。 台達PLC採用標準的MODBUS協定,這一協定目前廣為流行,為大家所熟知,也為大家最終實現通信提供了簡化的平臺。 由於台達所有的機電產品都支援MODBUS協定,所以,掌握了VB與PLC通信過程,也就等於掌握了PC與台達所有機電產品的通信。 本文的形成由於時間的關係,也由於筆者的能力所限,難免有不祥之處,也希望大家能夠不吝指出。 參考文獻 《VB與RS-232通信實例》 《VB6從入門到精通》 《DVP-PLC應用技術手冊》 《DVP-Protocal》 2005-12-18 回复
[color=#FF0000]好消息:三菱GX8.26中文PLC软件已通过工控网审核,以下为下载路径:文件地址:[/color][color=#0000FF]http://download.gongkong.com/file/2007/2/7/MITSUBISHIGX8.26PLC.rar[/color] 回复
回复内容:您 好,请问您 的程序能给我一份吗。我做个参考,我搞了1个月了,都不行,我的510757054@qq.com 驶 对:hanjiang-snow 关于你把这段程序与台达VFD007M23A的通讯资料发到hanjiang-snow@163.com,我帮你看看.我们刚做了三菱fx1n与台达vfd-b变频器之间的通讯 内容的回复: 回复