第一篇:三菱PLC與PC上位機(jī)VB通訊
三菱PLC通訊
三菱PLC與PC上位機(jī)VB通訊
三菱PLC:FX1N + FX1N-232-BD
FX2N + FX2N-232-BD 計(jì)算機(jī):Windows XP中文企業(yè)版 + Visual Basic 6.0中文企業(yè)版
Windows 98中文版 + Visual Basic 6.0 中文企業(yè)版
兩者之間連接使用的是FX-232CAB-1電纜線(2-3,3-2,4-6(8),5-5)
一.三菱PLC的設(shè)置
三菱FX PLC在進(jìn)行計(jì)算機(jī)鏈接(專用協(xié)議)和無(wú)協(xié)議通訊(RS指令)時(shí)均須對(duì)通訊格式(D8120)進(jìn)行設(shè)定。其中包含有波特率、數(shù)據(jù)長(zhǎng)度、奇偶校驗(yàn)、停止位和協(xié)議格式等。在修改了D8120的設(shè)置后,確保關(guān)掉PLC的電源,然后再打開(kāi)。
此外,對(duì)于采用RS485形式1:N計(jì)算機(jī)鏈接的還必須對(duì)站點(diǎn)號(hào)(D8121)進(jìn)行設(shè)定。設(shè)定的范圍從00H到0FH(即0到15)。在這里對(duì)D8120采用下述設(shè)置: b15 b0 0110 1000 1000 1110 6 8 8 E 即數(shù)據(jù)長(zhǎng)度為7位,偶校驗(yàn),2位停止位,波特率為9600bps,無(wú)標(biāo)題符和終結(jié)符,采用計(jì)算機(jī)鏈接(RS-232C),自動(dòng)添加和校驗(yàn)碼,采用專用協(xié)議格式1。同時(shí)設(shè)定站號(hào)為0。具體設(shè)定如下所示:
FX PLC進(jìn)行計(jì)算機(jī)鏈接時(shí)可用的專用協(xié)議有兩種:格式1和格式4。兩種格式的差別在于是否在每一個(gè)塊上添加了CR + LF,其中添加了CR + LF的是格式4。在這里采用格式1。
二.上位機(jī)程序的編制
這里采用Microsoft公司的Visual Basic 6.0中文企業(yè)版編制上位機(jī)程序。Visual Basic中提供了一個(gè)名為MSComm的通信控件便于設(shè)計(jì)串行通信的程序。MSComm控件的主要屬性有: 1. CommPort屬性
CommPort屬性用于指定所要使用的串行端口的號(hào)碼。雖然Windows操作系統(tǒng)可以容納最多256個(gè)串行通信端口,不過(guò)Visual Basic的MSComm控件則僅限于16個(gè)端口。2. Settings屬性
Settings屬性用于設(shè)置初始化參數(shù)。以字符串的形式設(shè)置波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位等4個(gè)參數(shù)。其格式為“BBBB,P,D,S”,其中BBBB表示波特率,P表示奇偶校驗(yàn)位檢查方式,D表示數(shù)據(jù)位數(shù),S表示停止位數(shù)。一般情況下,歐美儀器習(xí)慣使用“9600,n,8,1”當(dāng)成設(shè)置值;而日本儀器則習(xí)慣使用“9600,e,7,2”作為設(shè)置值。Settings設(shè)置完成之后,所傳輸及接受的字符串便以此設(shè)置為準(zhǔn),使用RS-232通信的雙方,Settings必須完全一樣,彼此才能順利地通信,否則雙方將無(wú)法正確接收到彼此所傳輸?shù)男盘?hào)。所以,該屬性的設(shè)置必須和三菱PLC中D8120的相關(guān)設(shè)置保持一致。在這里,統(tǒng)一采用“9600,e,7,2”的設(shè)定。
三菱PLC通訊
3. PortOpen屬性
PortOpen屬性用于設(shè)置通信連接端口的狀態(tài)。在使用串行端口之前必須先將要使用的串行端口打開(kāi)。在上位機(jī)程序中應(yīng)進(jìn)行如下設(shè)定: Private Sub Form_Load()'窗體載入事件 MSComm1.CommPort = 1 '選擇端口號(hào) MSComm1.Settings = “9600,e,7,2” '設(shè)置端口屬性 MSComm1.PortOpen = True '打開(kāi)端口 End Sub 4. Output屬性
MSComm控件的Output屬性提供了發(fā)送的功能,當(dāng)從計(jì)算機(jī)向可編程控制器寫入數(shù)據(jù)或從可編程控制器讀取數(shù)據(jù)時(shí),上位機(jī)應(yīng)當(dāng)先發(fā)出以下格式(格式1)的指令字符串: ENQ 站號(hào) PC號(hào) 命令 消息等待時(shí)間 字符區(qū)域A 和校驗(yàn)代碼
其中站號(hào)為在D8121中的設(shè)定值,這里是:00,PC號(hào)對(duì)于FX系列為:FF。
因?yàn)镋NQ,ACK,NAK等通信控制字符是不可見(jiàn)字符,所以先用Chr函數(shù)對(duì)其進(jìn)行賦值: ENQ=Chr(5)ACK=Chr(6)NAK=Chr(&H15)然后在上位機(jī)程序中寫入以下代碼即可發(fā)出指令:
MSComm1.Output=ENQ &“00FF<命令><消息等待時(shí)間><字符區(qū)域A><和校驗(yàn)代碼>” 5. Input屬性
與Output屬性相反,Input屬性提供了接收數(shù)據(jù)的功能。它將對(duì)方傳到輸入緩沖區(qū)中的數(shù)據(jù)讀進(jìn)程序中,并清除緩沖區(qū)中已被讀取的數(shù)據(jù)。
a.如果是從計(jì)算機(jī)向可編程控制器寫入數(shù)據(jù)時(shí),接收到從可編程控制器返回的應(yīng)該是以下格式的字符串:
ACK 站號(hào) PC號(hào)
或者
NAK 站號(hào) PC號(hào) 錯(cuò)誤代碼
前一種表示可編程控制器已經(jīng)正確接收到從計(jì)算機(jī)發(fā)來(lái)的指令,后一種表示可編程控制器未正確接收到從計(jì)算機(jī)發(fā)來(lái)的指令。
b.如果是從計(jì)算機(jī)向可編程控制器讀取數(shù)據(jù)時(shí),接收到從可編程控制器返回的應(yīng)該是以下格式的字符串:
STX 站號(hào) PC號(hào) 字符區(qū)域B ETX 和校驗(yàn)代碼 或者 NAK 站號(hào) PC號(hào) 錯(cuò)誤代碼
如果要連續(xù)讀取數(shù)據(jù)可以利用Timer控件。將Output和Input放在Timer控件的Timer事件中即可。程序會(huì)以Timer控件的Interval屬性中設(shè)置的間隔去發(fā)送指令和接收數(shù)據(jù)。對(duì)于MSComm控件的其他一些屬性使用VB的默認(rèn)值即可。
在串行通信傳輸?shù)膽?yīng)用中,經(jīng)常使用的Visual Basic中的字符串處理函數(shù)如下: Chr函數(shù):返回含有特定ANSI或DBCS字符碼的字符串。Asc函數(shù):返回字符串第一個(gè)字符的ANSI或DBCS字符碼。
Len函數(shù):返回以字符數(shù)為單位的字符串長(zhǎng)度。
Mid函數(shù):取得字符串中特定數(shù)量的字符,可指定開(kāi)始獲取的位置和長(zhǎng)度。Left函數(shù):取得字符串的左邊固定字符數(shù)的字符串。
Right函數(shù):取得字符串的右邊固定字符數(shù)的字符串。
Val函數(shù):把字符串轉(zhuǎn)換為數(shù)值,可以將8進(jìn)制或16進(jìn)制的字符串轉(zhuǎn)換為10進(jìn)制。Hex函數(shù):返回以十六進(jìn)制數(shù)值表示的字符串。
三菱PLC通訊
RS指令應(yīng)用一
三菱PLC與計(jì)算機(jī)利用RS指令進(jìn)行通訊(通訊手冊(cè)9-14例)三菱PLC:FX1N + FX1N-232-BD 計(jì)算機(jī):Windows XP中文企業(yè)版 + Visual Basic 6.0中文企業(yè)版
Windows 98中文版 + Visual Basic 6.0中文企業(yè)版
兩者之間連接使用的是FX-232CAB-1電纜線(2-3,3-2,4-6(8),5-5)
一.三菱PLC的設(shè)置
三菱FX PLC在進(jìn)行計(jì)算機(jī)鏈接(專用協(xié)議)和無(wú)協(xié)議通訊(RS指令)時(shí)均須對(duì)通訊格式(D8120)進(jìn)行設(shè)定。其中包含有波特率、數(shù)據(jù)長(zhǎng)度、奇偶校驗(yàn)、停止位和協(xié)議格式等。在修改了D8120的設(shè)置后,確保關(guān)掉PLC的電源,然后再打開(kāi)。在這里對(duì)D8120采用下述設(shè)置: b15 b0 0000 0100 1000 1111 0 4 8 F 即數(shù)據(jù)長(zhǎng)度為8位,偶校驗(yàn),2位停止位,波特率為9600bps,無(wú)標(biāo)題符和終結(jié)符,沒(méi)有添加和校驗(yàn)碼,采用無(wú)協(xié)議。PLC程序如下:
二.上位機(jī)程序的編制
完整程序代碼及注釋如下:
Private Sub cmd1_Click()
'發(fā)送按鈕
lbl1.Caption = “" If txt1.Text = ”“ Then
'若發(fā)送數(shù)據(jù)欄中未鍵入指令則提示鍵入指令 lbl1.Caption = ”Please input data“ Else MSComm1.Output = txt1.Text
'發(fā)送指令 Timer1.Enabled = True
'觸發(fā)延時(shí)接收 End If
三菱PLC通訊
End Sub Private Sub Form_Load()
'窗體載入事件 MSComm1.CommPort = 1
'選擇端口號(hào) MSComm1.Settings = ”9600,e,8,2“ '設(shè)置端口屬性 MSComm1.PortOpen = True
'打開(kāi)端口 End Sub
Private Sub Timer1_Timer()
'延時(shí)500ms接收 NAK = Chr(&H15)If MSComm1.InBufferCount > 0 Then txt2.Text = ”“ a = MSComm1.Input txt2.Text = a
'在接收數(shù)據(jù)欄中顯示接收到的數(shù)據(jù) Else lbl1.Caption = ”No response" End If Timer1.Enabled = False End Sub
三菱PLC通訊
RS指令應(yīng)用二
三菱PLC與儀表之間通訊
三菱PLC:FX1N + FX1N-232-BD 儀表(稱重器)
兩者之間連線該儀表僅提供3線式的簡(jiǎn)化RS-232C口,即只有:RXD,TXD和GND,于是采用2-3,3-2,5-5的三線接法。
1. 對(duì)D8120進(jìn)行設(shè)置并使其與儀表中的設(shè)置一致,對(duì)其中的控制線設(shè)置成使用無(wú)硬件握手方式,即(b12,b11,b10)=(0,0,0)。根據(jù)儀表說(shuō)明書上對(duì)通訊的要求,設(shè)置如下:
b15
b0 0000 0000 1000 0110
0 0 8 6 2. 根據(jù)儀表說(shuō)明書所述,該種儀表有兩種工作方式:連續(xù)發(fā)送和指令狀態(tài)。這里設(shè)置成指令狀態(tài),即儀表根據(jù)發(fā)來(lái)的指令返回相應(yīng)的數(shù)據(jù)。在此使用READ指令,根據(jù)指令協(xié)議,輸入的指令必須以
注:發(fā)送數(shù)據(jù)點(diǎn)數(shù)和接收數(shù)據(jù)點(diǎn)數(shù)必須按指令協(xié)議進(jìn)行設(shè)置,否則通訊不能正常進(jìn)行。PLC程序如下:
三菱PLC通訊
參考資料
1.三菱FX通訊用戶手冊(cè)(RS-232C,RS485)2.《Visual Basic與RS-232串行通信控制(最新版)》清華大學(xué)出版社
第二篇:三菱PLC通訊
三菱PLC通訊 資料整理——李永彬
三菱PLC與上位機(jī)通訊
三菱PLC:FX1N + FX1N-232-BD
FX2N + FX2N-232-BD 計(jì)算機(jī):Windows XP中文企業(yè)版 + Visual Basic 6.0中文企業(yè)版
Windows 98中文版 + Visual Basic 6.0 中文企業(yè)版
兩者之間連接使用的是FX-232CAB-1電纜線(2-3,3-2,4-6(8),5-5)一.三菱PLC的設(shè)置
三菱FX PLC在進(jìn)行計(jì)算機(jī)鏈接(專用協(xié)議)和無(wú)協(xié)議通訊(RS指令)時(shí)均須對(duì)通訊格式(D8120)進(jìn)行設(shè)定。其中包含有波特率、數(shù)據(jù)長(zhǎng)度、奇偶校驗(yàn)、停止位和協(xié)議格式等。在修改了D8120的設(shè)置后,確保關(guān)掉PLC的電源,然后再打開(kāi)。
此外,對(duì)于采用RS485形式1:N計(jì)算機(jī)鏈接的還必須對(duì)站點(diǎn)號(hào)(D8121)進(jìn)行設(shè)定。設(shè)定的范圍從00H到0FH(即0到15)。在這里對(duì)D8120采用下述設(shè)置: b15 b0 0110 1000 1000 1110 6 8 8 E 即數(shù)據(jù)長(zhǎng)度為7位,偶校驗(yàn),2位停止位,波特率為9600bps,無(wú)標(biāo)題符和終結(jié)符,采用計(jì)算機(jī)鏈接(RS-232C),自動(dòng)添加和校驗(yàn)碼,采用專用協(xié)議格式1。同時(shí)設(shè)定站號(hào)為0。具體設(shè)定如下所示:
FX PLC進(jìn)行計(jì)算機(jī)鏈接時(shí)可用的專用協(xié)議有兩種:格式1和格式4。兩種格式的差別在于是否在每一個(gè)塊上添加了CR + LF,其中添加了CR + LF的是格式4。在這里采用格式1。二.上位機(jī)程序的編制
這里采用Microsoft公司的Visual Basic 6.0中文企業(yè)版編制上位機(jī)程序。Visual Basic中提供了一個(gè)名為MSComm的通信控件便于設(shè)計(jì)串行通信的程序。MSComm控件的主要屬性有: 1. CommPort屬性
CommPort屬性用于指定所要使用的串行端口的號(hào)碼。雖然Windows操作系統(tǒng)可以容納最多256個(gè)串行通信端口,不過(guò)Visual Basic的MSComm控件則僅限于16個(gè)端口。
2. Settings屬性
Settings屬性用于設(shè)置初始化參數(shù)。以字符串的形式設(shè)置波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位等4個(gè)參數(shù)。其格式為“BBBB,P,D,S”,其中BBBB表示波特率,P表示奇偶校驗(yàn)位檢查方式,D表示數(shù)據(jù)位數(shù),S表示停止位數(shù)。一般情況下,歐美儀器習(xí)慣使用“9600,n,8,1”當(dāng)成設(shè)置值;而日本儀器則習(xí)慣使用“9600,e,7,2”作為設(shè)置值。Settings設(shè)置完成之后,所傳輸及接受的字符串便以此設(shè)置為準(zhǔn),使用RS-232通信的雙方,Settings必須完全一樣,彼此才能順利地通信,否則雙方將無(wú)法正確接收到彼此所傳輸?shù)男盘?hào)。所以,該屬性的設(shè)置必須和三菱PLC中D8120的相關(guān)設(shè)置保持一致。在這里,統(tǒng)一采用“9600,e,7,2”的設(shè)定。3. PortOpen屬性
PortOpen屬性用于設(shè)置通信連接端口的狀態(tài)。在使用串行端口之前必須先將要使用的串行端口打開(kāi)。在上位機(jī)程序中應(yīng)進(jìn)行如下設(shè)定: Private Sub Form_Load()'窗體載入事件 MSComm1.CommPort = 1 '選擇端口號(hào)
三菱PLC通訊 資料整理——李永彬MSComm1.Settings = “9600,e,7,2” '設(shè)置端口屬性 MSComm1.PortOpen = True '打開(kāi)端口 End Sub 4. Output屬性
MSComm控件的Output屬性提供了發(fā)送的功能,當(dāng)從計(jì)算機(jī)向可編程控制器寫入數(shù)據(jù)或從可編程控制器讀取數(shù)據(jù)時(shí),上位機(jī)應(yīng)當(dāng)先發(fā)出以下格式(格式1)的指令字符串: ENQ 站號(hào) PC號(hào) 命令 消息等待時(shí)間 字符區(qū)域A 和校驗(yàn)代碼
其中站號(hào)為在D8121中的設(shè)定值,這里是:00,PC號(hào)對(duì)于FX系列為:FF。
因?yàn)镋NQ,ACK,NAK等通信控制字符是不可見(jiàn)字符,所以先用Chr函數(shù)對(duì)其進(jìn)行賦值: ENQ=Chr(5)ACK=Chr(6)NAK=Chr(&H15)
然后在上位機(jī)程序中寫入以下代碼即可發(fā)出指令:
MSComm1.Output=ENQ &“00FF<命令><消息等待時(shí)間><字符區(qū)域A><和校驗(yàn)代碼>” 5. Input屬性
與Output屬性相反,Input屬性提供了接收數(shù)據(jù)的功能。它將對(duì)方傳到輸入緩沖區(qū)中的數(shù)據(jù)讀進(jìn)程序中,并清除緩沖區(qū)中已被讀取的數(shù)據(jù)。
a.如果是從計(jì)算機(jī)向可編程控制器寫入數(shù)據(jù)時(shí),接收到從可編程控制器返回的應(yīng)該是以下格式的字符串:
ACK 站號(hào) PC號(hào)
或者
NAK 站號(hào) PC號(hào) 錯(cuò)誤代碼
前一種表示可編程控制器已經(jīng)正確接收到從計(jì)算機(jī)發(fā)來(lái)的指令,后一種表示可編程控制器未正確接收到從計(jì)算機(jī)發(fā)來(lái)的指令。
b.如果是從計(jì)算機(jī)向可編程控制器讀取數(shù)據(jù)時(shí),接收到從可編程控制器返回的應(yīng)該是以下格式的字符串:
STX 站號(hào) PC號(hào) 字符區(qū)域B ETX 和校驗(yàn)代碼 或者 NAK 站號(hào) PC號(hào) 錯(cuò)誤代碼
如果要連續(xù)讀取數(shù)據(jù)可以利用Timer控件。將Output和Input放在Timer控件的Timer事件中即可。程序會(huì)以Timer控件的Interval屬性中設(shè)置的間隔去發(fā)送指令和接收數(shù)據(jù)。對(duì)于MSComm控件的其他一些屬性使用VB的默認(rèn)值即可。
在串行通信傳輸?shù)膽?yīng)用中,經(jīng)常使用的Visual Basic中的字符串處理函數(shù)如下: Chr函數(shù):返回含有特定ANSI或DBCS字符碼的字符串。Asc函數(shù):返回字符串第一個(gè)字符的ANSI或DBCS字符碼。
Len函數(shù):返回以字符數(shù)為單位的字符串長(zhǎng)度。
Mid函數(shù):取得字符串中特定數(shù)量的字符,可指定開(kāi)始獲取的位置和長(zhǎng)度。Left函數(shù):取得字符串的左邊固定字符數(shù)的字符串。Right函數(shù):取得字符串的右邊固定字符數(shù)的字符串。
Val函數(shù):把字符串轉(zhuǎn)換為數(shù)值,可以將8進(jìn)制或16進(jìn)制的字符串轉(zhuǎn)換為10進(jìn)制。Hex函數(shù):返回以十六進(jìn)制數(shù)值表示的字符串。
RS指令應(yīng)用一
三菱PLC與計(jì)算機(jī)利用RS指令進(jìn)行通訊(通訊手冊(cè)9-14例)三菱PLC:FX1N + FX1N-232-BD 計(jì)算機(jī):Windows XP中文企業(yè)版 + Visual Basic 6.0中文企業(yè)版
Windows 98中文版 + Visual Basic 6.0中文企業(yè)版
兩者之間連接使用的是FX-232CAB-1電纜線(2-3,3-2,4-6(8),5-5)
一.三菱PLC的設(shè)置
三菱FX PLC在進(jìn)行計(jì)算機(jī)鏈接(專用協(xié)議)和無(wú)協(xié)議通訊(RS指令)時(shí)均須對(duì)通訊格式(D8120)進(jìn)行設(shè)定。其中包含有波特率、數(shù)據(jù)長(zhǎng)度、奇偶校驗(yàn)、停止位和協(xié)議格式等。在修改了D8120的設(shè)置后,確保關(guān)掉PLC的電源,然后再打開(kāi)。在這里對(duì)D8120采用下述設(shè)置: b15 b0
三菱PLC通訊 資料整理——李永彬0000 0100 1000 1111 0 4 8 F 即數(shù)據(jù)長(zhǎng)度為8位,偶校驗(yàn),2位停止位,波特率為9600bps,無(wú)標(biāo)題符和終結(jié)符,沒(méi)有添加和校驗(yàn)碼,采用無(wú)協(xié)議。PLC程序如下:
二.上位機(jī)程序的編制
完整程序代碼及注釋如下:
Private Sub cmd1_Click()
'發(fā)送按鈕
lbl1.Caption = “" If txt1.Text = ”“ Then
'若發(fā)送數(shù)據(jù)欄中未鍵入指令則提示鍵入指令 lbl1.Caption = ”Please input data“ Else MSComm1.Output = txt1.Text
'發(fā)送指令 Timer1.Enabled = True
'觸發(fā)延時(shí)接收 End If End Sub Private Sub Form_Load()
'窗體載入事件 MSComm1.CommPort = 1
'選擇端口號(hào) MSComm1.Settings = ”9600,e,8,2“ '設(shè)置端口屬性 MSComm1.PortOpen = True
'打開(kāi)端口 End Sub
Private Sub Timer1_Timer()
'延時(shí)500ms接收 NAK = Chr(&H15)If MSComm1.InBufferCount > 0 Then txt2.Text = ”“ a = MSComm1.Input txt2.Text = a
'在接收數(shù)據(jù)欄中顯示接收到的數(shù)據(jù) Else lbl1.Caption = ”No response" End If Timer1.Enabled = False End Sub
三菱PLC通訊 資料整理——李永彬
RS指令應(yīng)用二
三菱PLC與儀表之間通訊
三菱PLC:FX1N + FX1N-232-BD 儀表(稱重器)
兩者之間連線該儀表僅提供3線式的簡(jiǎn)化RS-232C口,即只有:RXD,TXD和GND,于是采用2-3,3-2,5-5的三線接法。
1. 對(duì)D8120進(jìn)行設(shè)置并使其與儀表中的設(shè)置一致,對(duì)其中的控制線設(shè)置成使用無(wú)硬件握手方式,即(b12,b11,b10)=(0,0,0)。根據(jù)儀表說(shuō)明書上對(duì)通訊的要求,設(shè)置如下: b15
b0
0000 0000 1000 0110
0 0 8 6 2. 根據(jù)儀表說(shuō)明書所述,該種儀表有兩種工作方式:連續(xù)發(fā)送和指令狀態(tài)。這里設(shè)置成指令狀態(tài),即儀表根據(jù)發(fā)來(lái)的指令返回相應(yīng)的數(shù)據(jù)。在此使用READ指令,根據(jù)指令協(xié)議,輸入的指令必須以
注:發(fā)送數(shù)據(jù)點(diǎn)數(shù)和接收數(shù)據(jù)點(diǎn)數(shù)必須按指令協(xié)議進(jìn)行設(shè)置,否則通訊不能正常進(jìn)行。PLC程序如下:
第三篇:VB與三菱PLC通信
VB與三菱PLC通信
VB源代碼下載
http://www.tmdps.cn/download.action?t=40&k=MTQzOTcxMTM=&pcode=LCw1NTkwMzYsNTU5MDM2&rPLC以卓越的可靠性和方便的可編程性廣泛應(yīng)用于工業(yè)控制領(lǐng)域。實(shí)現(xiàn)PC機(jī)與PLC通信的目示、動(dòng)態(tài)數(shù)據(jù)畫面顯示、報(bào)表顯示、窗口技術(shù)等多種功能,為PLC提供良好的人機(jī)界面。本文詳在Windows環(huán)境下,使用VB6.0開(kāi)發(fā)通信程序,實(shí)現(xiàn)了PC機(jī)與FX系列PLC之間的協(xié)議進(jìn)行了詳細(xì)的介紹,并以VB為開(kāi)發(fā)工具實(shí)現(xiàn)了PC機(jī)與FX系列PLC的串行通信。1 前言
PLC以卓越的可靠性和方便的可編程性廣泛應(yīng)用于工業(yè)控制領(lǐng)域。實(shí)現(xiàn)PC機(jī)與PLC通信的目示、動(dòng)態(tài)數(shù)據(jù)畫面顯示、報(bào)表顯示、窗口技術(shù)等多種功能,為PLC提供良好的人機(jī)界面。本文詳在Windows環(huán)境下,使用VB6.0開(kāi)發(fā)通信程序,實(shí)現(xiàn)了PC機(jī)與FX系列PLC之間的2 PC機(jī)與PLC實(shí)現(xiàn)通信的條件
帶異步通信適配器的PC機(jī)與PLC只有滿足如下條件,才能互聯(lián)通信:
(1)帶有異步通信接口的PLC才能與帶異步通信適配器的PC機(jī)互聯(lián)。還要求雙方采用的總線元”變換之后才能互聯(lián)。
(2)雙方的初始化,使波特率、數(shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗(yàn)都相同。
(3)要對(duì)PLC的通信協(xié)議分析清楚,嚴(yán)格地按照協(xié)議的規(guī)定及幀格式編寫PC機(jī)的通信程序。程。
3 PC機(jī)及與FX系列PLC的串行通訊 3.1 硬件連接
PC機(jī)與FX系列PLC不能直接連接,要經(jīng)過(guò)FX-232AW單元進(jìn)行RS232C/RS-接關(guān)系:
3.2 FX系列PLC的通信協(xié)議
在PC機(jī)中必須依據(jù)互聯(lián)的PLC的通信協(xié)議來(lái)編寫通信程序,因此先介紹FX系列PLC的通信(1)數(shù)據(jù)格式
FX系列PLC采用異步格式,由1位起始位、7位數(shù)據(jù)位、1位偶校驗(yàn)位及1位停止位組成,波I碼。(2)通信命令
FX系列PLC有4個(gè)通信命令,它們是讀命令、寫命令、強(qiáng)制通命令、強(qiáng)制斷命令,如下表所示M—輔助繼電器;S—狀態(tài)元件;T—定時(shí)器;C—計(jì)數(shù)器;D—數(shù)據(jù)寄存器。(3)通信控制字符
FX系列PLC采用面向字符的傳輸規(guī)程,用到5個(gè)通信控制字符,如下表所示。*當(dāng)PLC對(duì)PC機(jī)發(fā)來(lái)的ENQ不理解時(shí),用NAK回答。(4)報(bào)文格式
PC機(jī)向PLC發(fā)送的報(bào)文格式如下:
其中STX為開(kāi)始標(biāo)志:02H;ETX為結(jié)束標(biāo)志:03H;CMD為命令的ASCII碼;S字節(jié)求累加和,溢出不計(jì)。由于每字節(jié)十六進(jìn)制數(shù)變?yōu)閮勺止?jié)ASCII代碼,故校驗(yàn)和為SUM數(shù)據(jù)段格式與含義如下:
*寫命令的數(shù)據(jù)段有數(shù)據(jù),讀命令的數(shù)據(jù)段則無(wú)數(shù)據(jù)。讀/寫字節(jié)數(shù)為01H~40H(1~64)個(gè)。PLC向PC機(jī)發(fā)送的應(yīng)答報(bào)文格式如下:
*對(duì)讀命令的應(yīng)答報(bào)文數(shù)據(jù)段為要讀取的數(shù)據(jù),一個(gè)數(shù)據(jù)占兩個(gè)字節(jié),分上位下位: 對(duì)寫命令的應(yīng)答報(bào)文無(wú)數(shù)據(jù)段,而用ACK及NAK作為應(yīng)答內(nèi)容。(5)傳輸過(guò)程
PC機(jī)與FX系列PLC之間采用應(yīng)答方式通信,傳輸出錯(cuò)則組織重發(fā)。其傳輸過(guò)程如下:
PLC根據(jù)PC機(jī)的命令,在每個(gè)循環(huán)掃描結(jié)束處的END語(yǔ)句后組織自動(dòng)應(yīng)答,無(wú)需用戶在PL4 利用VB6.0編寫通信程序
下面以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明編寫通信程序的要點(diǎn)。假設(shè)PC機(jī)要求從PLC中讀入從D123開(kāi)4),其傳輸應(yīng)答過(guò)程及報(bào)文如下(圖略可向作者索取):
命令報(bào)文中10F6H為D123的地址,04H表示要讀入4個(gè)字節(jié)的數(shù)據(jù)。校驗(yàn)和SUM=3+30H+34H+
03H=174H,溢出部分不計(jì),故SUMH為'7',SUML為‘4’,相應(yīng)的ASCII中4個(gè)字節(jié)的十六進(jìn)制數(shù),其相應(yīng)的ASCII碼為8?jìng)€(gè)字節(jié),故應(yīng)答報(bào)文長(zhǎng)度為12個(gè)字節(jié)。根據(jù)PC機(jī)與FX系列PLC的傳輸應(yīng)答過(guò)程編制出如下所示的通信程序流程圖略。
利用VB的MSComm控件,按照流程圖可以編寫如下通信程序?qū)崿F(xiàn)PC機(jī)與FX系列PLC之omm控件可以采用輪詢或事件驅(qū)動(dòng)的方法從端口獲取數(shù)據(jù)。在這個(gè)例子中使用了輪詢方法。(1)通信口初始化
Private Sub Initialize()MSComm1.CommPort = 1
MSComm1.Settings = ″9600,E,7,1″ MSComm1.InBufferSize = 1024 MSComm1.OutBufferSize = 1024 MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText MSComm1.Handshaking = comNone MSComm1.PortOpen = True End Sub(2)請(qǐng)求通信與確認(rèn)
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ā)送命令報(bào)文
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)讀取應(yīng)答報(bào)文
Private Sub ReceiveFrame()Dim InString As String Do
DoEvents
Loop Until MSComm1.InBufferCount = 12 InString = MSComm1.Input End Sub 5 結(jié)束語(yǔ)
以本文所述機(jī)制編寫的通信程序已成功用于以FX2N型PLC作為主控制器的高層建筑玻璃幕墻現(xiàn)了PC機(jī)對(duì)PLC的監(jiān)視和控制。同時(shí),本程序?qū)Γ校脵C(jī)與其它型號(hào)PLC之間的通信也有一定下面是我自己寫的一個(gè)VB與三菱FX系列PLC通訊的軟件,如果想學(xué)習(xí)的可以下下來(lái)看看,下載地要源代碼的留下郵箱!有什么不懂得也可以給我留言。我會(huì)做出解答的。下載地址
http://www.tmdps.cn/download.action?t=40&k=MTMzNDg4MDg=&pcode=LCw1NTkwMzYsNTU5MDM2&r
第四篇:VB實(shí)現(xiàn)PC與歐姆龍PLC通訊的串口編程
Private Sub Form_Load()
Dim i As Integer'OPEN COM1
If ComTrue(1)= 0 Then
If ComOpen(1, 38400, 7, 1, 1, “sjh”)= 1 Then 'MsgBox(“已注冊(cè)”)'sjh為你的注冊(cè)賬號(hào)Call SetDelayNum(64)
End If
End If
jisu
jisu1
jisu2
End Sub
第五篇:51單片機(jī)與三菱PLC通訊實(shí)例
51單片機(jī)與三菱PLC無(wú)協(xié)議通訊成功
我用了兩個(gè)晚上的時(shí)間查閱一些資料,利用三菱PLC的擴(kuò)展RS485通訊板與其51單片機(jī)連接通訊,可寫PLC任意的地址。長(zhǎng)度可達(dá)1000米,看見(jiàn)網(wǎng)上寫的都很煩且對(duì)三菱和單片機(jī)不是很熟的朋友來(lái)說(shuō)有一定的閱讀難度,今天將它與大家分享。希望在此基礎(chǔ)上大家能擴(kuò)展出自己想要的功能,過(guò)些時(shí)間有空我在寫個(gè)半雙工的程序。硬件部分:
我用的是天祥單片機(jī)實(shí)驗(yàn)板,由于沒(méi)有RS485接口,我利用ADM485芯片自制了一個(gè)485接口與三菱PLC的擴(kuò)展RS485通訊如圖,但如果要進(jìn)行半雙工通訊,須將P3.0口到下載程序的RS232芯片的線斷開(kāi)可用一個(gè)跳線,用RS485的時(shí)候斷開(kāi)RS232,用RS232的時(shí)候插上跳線帽。硬件連接如圖
PLC程序:
通訊我用單片機(jī)做主機(jī)(只發(fā)送指令),PLC做從機(jī)(只接收指令),單工單向,以便初學(xué)著掌握。
格式:1位啟始,8位數(shù)據(jù),一位停止。所以PLC寄存器D8120:0C81.plc程序很簡(jiǎn)單不懂的可以看下三菱PLC的通訊手冊(cè)。如下圖:
三:?jiǎn)纹瑱C(jī)程序:
#include
/*單片機(jī)的頭文件*/ unsigned char code tab[]={0x17,0xff};/*PLC輸出的Y點(diǎn)數(shù),PLC輸出Y燈0125678亮*/ sbit led=P1^1;
/*將RS485置為發(fā)送數(shù)據(jù)模式*/ unsigned char i;void init(){ SCON=0x50;
/*串口中斷開(kāi)*/ TMOD=0x20;
/*定時(shí)器設(shè)置*/
TH1=0xfd;
/*定時(shí)時(shí)間的高位*/ TL1=0xfd;
/*定時(shí)時(shí)間的低位,速度為9600BPS*/ TR1=1;
/*定時(shí)器開(kāi)*/ EA=1;
/*開(kāi)總中斷*/ TI=0;
/*復(fù)位串口中斷*/ led=1;
/*將RS485置為發(fā)送數(shù)據(jù)模式*/ } void main(){ init();
/*調(diào)用子程序*/ for(i=0;i<2;i++){ SBUF=tab[i];
/*將數(shù)據(jù)發(fā)送到串口*/ while(!TI);
/*等待串口數(shù)據(jù)發(fā)送結(jié)束*/ TI=0;
/*復(fù)位串口中斷*/ } } 四:注意點(diǎn)。
1:RS485的線不能接反,否則數(shù)據(jù)將不正確。
2:?jiǎn)纹瑱C(jī)的晶振要選擇11.0592MHZ,否則PLC接收到數(shù)據(jù)也不正確。
3:RS485芯片的電源不能接反,否則要燒壞芯片。
今天要去山東調(diào)試機(jī)器,現(xiàn)在正在高鐵上,剛好有空把這篇心得寫好,有錯(cuò)誤的地方還請(qǐng)大家指正,也希望有共同愛(ài)好的一起交流心得。
QQ:79814563 注明時(shí)工控交友
電話:***
姓名:黃輝 2011年12月17日 Saturday