关键词:通信协议 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的监视与控制。
下一篇:气焊工的操作规程
免责声明
- 凡本网注明"来源:智能制造网"的所有作品,版权均属于智能制造网,转载请必须注明智能制造网,https://www.gkzhan.com。违反者本网将追究相关法律责任。
- 企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
- 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
- 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
2025第十一届中国国际机电产品交易会 暨先进制造业博览会
展会城市:合肥市展会时间:2025-09-20