摘 要:本文介紹了松下公司PLC通信協議MEWTOCOL-COM,并在Windows下編程實現了松下FP1系列PLC與計算機的通信。
關鍵詞:通信協議 RS232 PLC
AbstractThe paper introduces the MEWTOCOL-COM communication protocol of NASI PLC.A small program in Windows is written to complete the communication between computer with NASI FP1 series PLC.
Key wordsCommunication Protocol RS232 PLC
分類號TN919 文獻標識碼A 文章編號1606-51232002 06-0048-0
1 引 言
可編程控制器以下簡稱PLC 由于其高可靠性、編程簡單、通用性強、體積小、結構緊湊、安裝維護方便等特點,而在工業控制中得到了廣泛應用。由于計算機在圖形顯示、數據處理、打印報表、中文顯示等方面有很強的功能,因此在諸如柔性制造系統的現代化大型控制系統中常常將多臺PLC與計算機聯接起來構成多級分布控制系統。在此類系統的構成中,關鍵問題之一是如何實現PLC與計算機之間的通信。不同系列的PLC與計算機通信方式各不相同,本文以松下公司的FP1系列PLC為對象,分析了通信接口及通信協議,并在Windows 98Se中用Borland C++Bulider 5.0編制了一個簡單的通信程序。
2 松下FP1系列PLC與計算機之間的通信接口及通信協議
2.1 通信接口
FP1系列的通信接口采用標準9芯RS232接口,接線如圖1所示。
1 PC的RXD端與PLC的TXD端聯接,使PC接收到PLC發出的數據。
2 PC的TXD端與PLC的RXD端聯接,使PC發出的數據被PLC接收到。
3 PC與PLC的SG端互聯,使兩者的工作基準地電平相同。
4 PC與PLC的RTS端互聯,PC在此引腳發出訊號, 通知
PLC可以向PC發送數據。
5 PC與PLC的CTS端互聯,PLC在此引腳發出訊號,通知PLC可以向PC發送數據。
2.2 通信協議
松下FP1系列PLC與計算機之間的通信協議為松下公司的MEWTOCOL-COM協議。該協議采用異步通信方式,其波特率有1200、2400、4800、9600、19200、38400、57600、115200bps等多種可選,且報文長度可變可固定。該協議格式分為命令消息Command Message ,正常響應消息Response Message-normal ,出錯響應消息Response Message-error 三種。
其中,%為起始符,標記每一幀報文的開始,CR為結束符,標記每一幀報文的結束。
AD為PLC的站地址,為兩位16進制數,如00則表示*臺PLC。
#、$、標注該幀報文為何種類型。
Command code為命令代碼,如后文的例1中的“RD”,表示讀數據區。Response code為響應代碼一般返回接收到的命令消息中的命令代碼。ErrorH 和ErrorL 為出錯代碼,是兩位16進制數,可根據其值在協議中查出錯誤的描述。
Text code為命令參數,如例1命令消息中“D0110501107”,“D”表示數據寄存器,“01105 01107”表示第1105號至1107號,而在例1響應消息中,“6300 4433 0A00”則表示DT1105至DT1107中數據分別為6300、4433、0A00。
BCCH 和BCCL 為前面字符串的BCC校驗碼的高、低位,為兩位16進制數。其初值為0,然后從起始符開始與該幀報文中每一字節按位進行異或運算得到。
例1:讀取DT1105至DT1107中的數據的命令消息如下:
% 01 # RD D01105 01107 57 CR
若DT1105至DT1107中數據分別為6300、4433和0A00,PLC返回的響應消息如下:
% 01 $ RD 6300 4433 0A00 62 CR
3 PC與松下FP1系列PLC通信的WINDOWS編程實現
在本程序中用到了MSCOMM32.OCX控件,該控件可在MS Visual Basic 6.0的光盤中找到,但需注冊,安裝一遍VB即可解決。
*步:C++Builder 5.0中導入MSCOMM32.OCX控件,新建一個Application。在其主窗體中添加一個MSComm控件,命名為MSComm1,并設置其屬性值。注意波特率及校驗方式要與PLC的設置一致。再添加一個Label控件和一個Button控件,分別命名為Labell和Buttonl。
第二步:在Buttonl的OnClick事件中添加如下代碼。
int i
AnsiString outs
Ole Variant buf
outs=″%01#RDD011050110757\r″∥設置命令消息
ifMSComml->PortOpen==false MSComml->PortOpen=true∥打開端口
buf=outs
MSComml->Output=buf
i=0
whilei<=10000000 i++∥延時,等待PLC發回響應消息
outs=″″
buf=MSComml->Input∥接收響應消息
outs=WideStringbuf
ifouts=″″ Labell->Caption=outs
else Labell->Cabell->"接收不到";
若想采用其它命令消息,則必須計算其BCC校驗碼,可采用如下函數實現。
AnsiString BCCProAnsiString ComdMesg
unsigned char bcc
unsigned char*tempc
char ab
AnsiString BccH
AnsiString BccL
AnsiString temp
int bcc-int
int i
temp=ComdMesg
tempc=ComdMesg.c-str
bcc=0
fori=0i< temp.Length i++ bcc^=tempci
bcc-int=bcc
BccH=bcc-int/16
BccL=bcc-int%16
BccH=IntToHexBccH
BccL=IntToHexBccL
temp=ComdMesg+BccH+BccL+″\r″
return temp
使用這個函數便可將所有你要發送的命令消息自動加上兩位16進制BCC碼和結束符。
4 結 論
本文所有程序均在Windows 98SeBorland C++Bulider 5.0環境中調試通過,并多次長時間運行測試,以驗證其準確性與穩定性,收到了令人滿意的效果,通信十分穩定可靠。讀者可在本文的基礎上,參考松下公司的MEWTOCOL-COM協議,便可輕松實現PC與松下FP1系列PLC的通信,以完成上位機對PLC的監視與控制。
關鍵詞:通信協議 RS232 PLC
AbstractThe paper introduces the MEWTOCOL-COM communication protocol of NASI PLC.A small program in Windows is written to complete the communication between computer with NASI FP1 series PLC.
Key wordsCommunication Protocol RS232 PLC
分類號TN919 文獻標識碼A 文章編號1606-51232002 06-0048-0
1 引 言
可編程控制器以下簡稱PLC 由于其高可靠性、編程簡單、通用性強、體積小、結構緊湊、安裝維護方便等特點,而在工業控制中得到了廣泛應用。由于計算機在圖形顯示、數據處理、打印報表、中文顯示等方面有很強的功能,因此在諸如柔性制造系統的現代化大型控制系統中常常將多臺PLC與計算機聯接起來構成多級分布控制系統。在此類系統的構成中,關鍵問題之一是如何實現PLC與計算機之間的通信。不同系列的PLC與計算機通信方式各不相同,本文以松下公司的FP1系列PLC為對象,分析了通信接口及通信協議,并在Windows 98Se中用Borland C++Bulider 5.0編制了一個簡單的通信程序。
2 松下FP1系列PLC與計算機之間的通信接口及通信協議
2.1 通信接口
FP1系列的通信接口采用標準9芯RS232接口,接線如圖1所示。
1 PC的RXD端與PLC的TXD端聯接,使PC接收到PLC發出的數據。
2 PC的TXD端與PLC的RXD端聯接,使PC發出的數據被PLC接收到。
3 PC與PLC的SG端互聯,使兩者的工作基準地電平相同。
4 PC與PLC的RTS端互聯,PC在此引腳發出訊號, 通知
PLC可以向PC發送數據。
5 PC與PLC的CTS端互聯,PLC在此引腳發出訊號,通知PLC可以向PC發送數據。
2.2 通信協議
松下FP1系列PLC與計算機之間的通信協議為松下公司的MEWTOCOL-COM協議。該協議采用異步通信方式,其波特率有1200、2400、4800、9600、19200、38400、57600、115200bps等多種可選,且報文長度可變可固定。該協議格式分為命令消息Command Message ,正常響應消息Response Message-normal ,出錯響應消息Response Message-error 三種。
其中,%為起始符,標記每一幀報文的開始,CR為結束符,標記每一幀報文的結束。
AD為PLC的站地址,為兩位16進制數,如00則表示*臺PLC。
#、$、標注該幀報文為何種類型。
Command code為命令代碼,如后文的例1中的“RD”,表示讀數據區。Response code為響應代碼一般返回接收到的命令消息中的命令代碼。ErrorH 和ErrorL 為出錯代碼,是兩位16進制數,可根據其值在協議中查出錯誤的描述。
Text code為命令參數,如例1命令消息中“D0110501107”,“D”表示數據寄存器,“01105 01107”表示第1105號至1107號,而在例1響應消息中,“6300 4433 0A00”則表示DT1105至DT1107中數據分別為6300、4433、0A00。
BCCH 和BCCL 為前面字符串的BCC校驗碼的高、低位,為兩位16進制數。其初值為0,然后從起始符開始與該幀報文中每一字節按位進行異或運算得到。
例1:讀取DT1105至DT1107中的數據的命令消息如下:
% 01 # RD D01105 01107 57 CR
若DT1105至DT1107中數據分別為6300、4433和0A00,PLC返回的響應消息如下:
% 01 $ RD 6300 4433 0A00 62 CR
3 PC與松下FP1系列PLC通信的WINDOWS編程實現
在本程序中用到了MSCOMM32.OCX控件,該控件可在MS Visual Basic 6.0的光盤中找到,但需注冊,安裝一遍VB即可解決。
*步:C++Builder 5.0中導入MSCOMM32.OCX控件,新建一個Application。在其主窗體中添加一個MSComm控件,命名為MSComm1,并設置其屬性值。注意波特率及校驗方式要與PLC的設置一致。再添加一個Label控件和一個Button控件,分別命名為Labell和Buttonl。
第二步:在Buttonl的OnClick事件中添加如下代碼。
int i
AnsiString outs
Ole Variant buf
outs=″%01#RDD011050110757\r″∥設置命令消息
ifMSComml->PortOpen==false MSComml->PortOpen=true∥打開端口
buf=outs
MSComml->Output=buf
i=0
whilei<=10000000 i++∥延時,等待PLC發回響應消息
outs=″″
buf=MSComml->Input∥接收響應消息
outs=WideStringbuf
ifouts=″″ Labell->Caption=outs
else Labell->Cabell->"接收不到";
若想采用其它命令消息,則必須計算其BCC校驗碼,可采用如下函數實現。
AnsiString BCCProAnsiString ComdMesg
unsigned char bcc
unsigned char*tempc
char ab
AnsiString BccH
AnsiString BccL
AnsiString temp
int bcc-int
int i
temp=ComdMesg
tempc=ComdMesg.c-str
bcc=0
fori=0i< temp.Length i++ bcc^=tempci
bcc-int=bcc
BccH=bcc-int/16
BccL=bcc-int%16
BccH=IntToHexBccH
BccL=IntToHexBccL
temp=ComdMesg+BccH+BccL+″\r″
return temp
使用這個函數便可將所有你要發送的命令消息自動加上兩位16進制BCC碼和結束符。
4 結 論
本文所有程序均在Windows 98SeBorland C++Bulider 5.0環境中調試通過,并多次長時間運行測試,以驗證其準確性與穩定性,收到了令人滿意的效果,通信十分穩定可靠。讀者可在本文的基礎上,參考松下公司的MEWTOCOL-COM協議,便可輕松實現PC與松下FP1系列PLC的通信,以完成上位機對PLC的監視與控制。
下一篇:氣焊工的操作規程
全年征稿/資訊合作
聯系郵箱:1271141964@qq.com
免責聲明
- 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
- 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
- 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
- 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
2025中國鄭州衡器與計量技術設備展覽會
展會城市:鄭州市展會時間:2025-11-07