The Communication Between PC and NASI FP1 Series PLC
武汉科技大学信息科学与工程学院 甘朝辉 张 震
Gan Zhaohui Zhang Zhe
摘 要:本文介绍了松下公司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-5123200206-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==falseMSComml->PortOpen=true∥打开端口
buf=outs
MSComml->Output=buf
i=0
whilei<=10000000i++∥延时,等待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.Lengthi++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的监视与控制。
参 考 文 献
1NASI可编程控制器FP系列FP1硬件技术手册.松下电工株式会社,1999
2松下PLC MEWTOCOL-COM通信协议.松下电工株式会社,1999
3范逸之. Visual Basic与RS232串行通讯控制. 中国青
年出版社,2000