西门子6ES7214-2AD23-0XB8诚信经营
PC与S7-200的自定义通信协议实现
1)协议功能
实现读/写I,Q,VR,M区功能,读大数据量为246(255-9)个字节,写数据量大为255字节,帧格式为16进制形式,对于其他功能可以在SBR3中添加相应实现代码。
注:a)写数据量受PLC的VB区大小和指令限制,协议可以实现1个字的操作
b)写IB区后实际上输入的是脉冲信号,不能保持
C)地址/数据都是高位在前,低位在后
2)帧格式(fig1)
错误代码定义
写命令成功 ―― 00
帧格式错误 ―― 01
帧校验错误 ―― 02
超时错误 ―― 03
3)协议流程
实现以上协议的程序流程(fig2)。
4)变量说明
M 31.0 帧头标志(一帧的起始)
M 31.1 接收到一帧标志
T 37 通信超时计时器(5秒)
VB 1401-1699 接收到的命令帧
VB 1700- 发送缓冲区(VB1700为响应帧的大小,VB1701-1955为发送数据)
VD 2000(vb 2000-2003)接收缓冲区的指针(指向VB1401开始的数据区域)
VW 2004 接收字符计数器
VB 2006 接收到的命令帧的BCC值
VW 2007 命令帧长度
VD 2010 (vb 2010-2013) 响应帧的指针变量 (指向VB1701开始的数据区域)
VB 2014 响应帧的校验值
VB 2015 错误代码
VD 2020 (vb 2020-2023) I/Q/VB/M 源地址
VD 2024 (vb 2024-2027) 读/写操作地址
VD 2030(vb2030-2033) 偏移地址中间变量
VW 2034 循环指令的Index变量
VW 2036 求校验数据大小变量(帧长度减去2 即bcc校验和结束符)
5)程序模块说明
MAIN 主程序
SBR 0 通信初始化(调用子程序1)
SBR 1 缓冲区初始化
SBR 2 命令帧分析(命令帧无错,调用子程序3,否则调用SBR4)
SBR 3 组织响应帧并发送到串口
SBR 4 发送错误响应帧(错误代码为00时表示写操作成功)
INT 0 接收中断程序(在缓冲区存放命令帧,要求前一命令帧已经处理完)
INT 1 发送完中断程序(调用SBR1清空缓冲区)
6)调试界面
作者写的一个与S7-200 PLC调试工具的界面(fig3)。在参数设置中可以设定发送间隔和发送次数,显示可设置为16进制或ASCII码方式。
作者写的一个与串口调试工具的界面(fig4),可以发送16进制字符串和ASCII码字符串。在参数设置中可以设定发送间隔和发送次数。
7)结束语
上位机软件用了通信控件:spcomm(免费控件,很好注册),在DELPHI下非常好用(用它进行文件传输的结果也比较满意)。试验表明本协议的实现在可靠性、实时性和通信数据量上基本满足了上位机数据采集的需要。
一、引言
某生产电容机械的厂家,每套生产线有3台设备,可独立运行。原来用1台PLC进行集中控制,不仅布线不方便,且PLC故障,3台设备都无法运行。为了将风险分散,易于维护和布线。采用艾默生ECBUS网络分散控制系统,每台设备配置1台PLC,PLC之间数据可共享,以实现联锁和集中传到文本显示器中显示。
系统配置如下:
RS485/ECBUS网络
这里重点介绍ECBUS网络的概念、设置和应用,其他与文本和伺服驱动器的通讯不一一叙述。
二、 ECBUS网络通讯
1、 ECBUS协议
ECBUS是Emerson公司开发的一种小型PLC网络。ECBUS在物理层使用RS485,PLC可以通过通讯口1直接接入或者通过通讯口0经过RS232/RS485转换器接入。接入ECBUS的PLC可以自动的互相交换部分D元件和M元件的数值,这使得网络中其它PLC的元件访问,变得如同访问自身元件那样简单方便。ECBUS中,PLC间的数据访问是完全对等的(N:N)。
单层网络:多32台PLC。
多层网络:每层多支持16台PLC。
2、共享元件地址
ECBUS交换的D元件和M元件称为共享元件区。M元件共512个,从M1400-M1911,D元件64个,从D7700-7763。一旦PLC使用了ECBUS,这些元件地址被占用,共享区的值会自动的不停的刷新,网络中每台PLC的共享区元件的值保持相等。
对于每台PLC都可以读共享区元件,但只能对属于自己的可写元件值进行改写。由于共享元件个数是固定的,接入PLC数量越多,每个PLC分配的元件可写个数越少,且元件地址是连续平均分配的。这种对应关系用刷新模式来定义,根据网络上PLC的数量共分5种模式。
3、ECBUS设置
本应用中ECBUS网络共3台PLC,单层网络,选模式4。每台PLC分配的地址如下:
0#:M1400-M1527,D7700-D7715
1#:M1528-M1655,D7716-D7731
2#:M1656-M1783,D7732-D7747
ECBUS网络设置非常简单,通过系统块进行参数设置。站号的设置从0开始,0号站是网络的启动和设置站点,网络大巡检站数、附件延迟时间、重试次数、模式设置只需对0号站进行设置。
1#、2#号站的站点除了波特率和奇偶校验和0号站一致外,只需设置自己的站号。
4、程序
为了说明简单,假设每台PLC共享的数据如下:
0#号站:M0、M1;D0、D1
1#号站:M2、M3;D2、D3
2#号站:M4、M5;;D4、D5
对于每台PLC,无需编通讯程序,只需要将传送给其他PLC的元件值放到自己的共享元件中即可,数据会自动刷新,其他PLC只要读取相应的共享区元件值。
0#站程序:
1#站程序:
2#站程序:
二、
1、 利用EC10的串口1,ECBUS网络在不增加任何硬件的情况下,实现简易PLC间链接。
2、 ECBUS物理层采用RS485,简单方便,只要2根线即可,好用屏蔽双绞线。
3、 ECBUS窗口设置简单,用户只需做简单的赋值、MOV指令,无需编复杂的通讯程序。
4、 ECBUS通讯速度大到115.2KBPS,能满足大多数应用场合。
5、 ECBUS特别适合分散控制系统,比如楼宇自控、产品生产线中。
单片机应用简单灵活,使用非常广泛,但存在无法实时保存大量的数据、实时更新数据等缺点,经常需要把单片机和PC机的优势相结合组成系统。本文以卡式电话管理系统(非通用型电话系统)为例,从硬件和软件两方面分析PC和单片机之间的通信方法和注意事项,并给出相关系统的结构框图。
现在的卡式电话系统一般都采用单片机实现读卡、计费等功能,但单片机操作相对固定,无法根据外界条件变化作出相应改变。比如当计费的单价发生变化时,必须重新更新整个计费程序,再烧录到每个单片机中,这就使得维护非常复杂。如果把这些经常改变的量写入到一个类似服务器的PC机中,单片机只要到PC中读取相应的数据,就可以实现数据更新了。实现此功能,要解决PC和多个单片机之间的连接,以及协调PC和多个单片机之间的通信,使之不出现冲突。
PC和单片机之间的连接方式有多种,如利用微机的串口、并口或通过专门的I/O板进行数据传送,单片机通过共享通道的方法挂在上述总线上。附表列出以上三种连接方式的特点。
应用时应根据实际需要进行选择。在我们的卡式电话系统中,通信数据量很小、传输距离很近,选择了串口通信方式。
由于每个单片机都是通过串口线和PC连接的,也就是说其总线是共享的,必须避免冲突。其方法有:各单片机通过中断向PC申请数据总线、PC轮询各单片机、单片机进行数据总线检测等。单片机通过中断向PC申请数据总线的方式可以实现实时的通信,但控制比较复杂,需要PC具有中断排队的能力,并且要求很多的中断线,只适合一台PC带少量的单片机的情况。PC轮询单片机则相对简单,成本也很低,实时性较差,握手时延很长。第三种方法若要完全避免冲突则非常复杂。
在卡式电话系统中,我们采用了由PC机轮询方式,在轮询时采用PC中断单片机的方法。这是、二种方法的折衷。由于中断线是共享的,还为每个单片机设定了地址码。
卡式电话系统的硬件系统框图如图1所示。此系统共需要4根信号线,即收、发、地和中断线,收、发和地可以从串口中找到相应的线,而中断线采用串口中的RTS信号,可以直接编程。
软件工作流程是:PC先发送一个中断信号,使所有的单片机转入中断程序,发送一个地址码,各单片机读此地址码以后和自己的实际地址相比较,若相同,则转入相应的动作,比如读取单价或上报本机信息等,否则从中断程序中跳出。软件需要解决的是设定PC串口的工作方式,包括串口的通讯速率、奇偶校验位、停止位等。经测试,此系统可以在288kbit/s速率下稳定工作,比较理想。在此工作速率下,一台PC可以带64台单片机。图2为通信程序流程图。