1、系统组成
如下图所示,系统包括3个SIMATIC S7-300站,其中一个作为串行通信的主站,通过ASCII驱动协议轮询采集另外两个从站的数据。系统主站和1#从站各配置了一个串行通信模块CP341(6ES7341-1CH01-0AE0)(RS422/485接口),2#从站配置了一个串行通信模块CP340(6ES7340-1AH02-0AE0)(RS232C接口),为了将它们连接到一个网络中,在本例中选择了西门子的PC/PPI电缆(6ES7901-3CB30-0XA0)将2#从站的RS232C接口转换为RS485接口连接到网络中。图1
系统涉及的主要硬件设备及版本信息如表。
设备名称 | 订货号 | 版本 |
主站 | ||
CPU模块 | 6ES7315-2AG10-0AB0 | V2.6 |
CP341 | 6ES7341-1CH01-0XE0 | V1.02 |
1#从站 | ||
CPU模块 | 6ES7315-2AG10-0AB0 | V2.6 |
CP341 | 6ES7341-1CH01-0XE0 | V1.02 |
2#从站 | ||
CPU模块 | 6ES7315-2AG10-0AB0 | V2.6 |
CP340 | 6ES7340-1AH02-0XE0 | V1.04 |
PC/PPI电缆 | 6ES7901-3CB30-0XA0 |
2、软件环境
STEP7 5.x软件上,必须先安装PTP协议软件包,才可进行组态配置
3、电缆和硬件连接
根据具体情况可以自己制作通信电缆,也可以选择西门子提供的定制电缆。在通信距离可以满足要求的情况下,建议选择西门子提供的串行通信电缆,电缆订货号如表。
详细的硬件连接如图所示。
图2
1、组态主站
图3
图4
2、组态从站
对于从站CP341/CP340模块的参数分配与主站保持一致,特别注意波特率、数据位、停止位和奇偶校验位设置要与主站相同。
详细的接口参数设置请参考:
图5
与MODBUS协议轮询不同,由于每个从站自身不具有唯一的设备标识信息(从站地址),无法直接区分和识别网络上的数据帧是哪个站的、需要哪个站做出响应,所以要通过ASCII协议驱动实现多站点轮询,需要人为地对每个站做出标识,并在主站发送轮询指令时给出相应的指令标识,以便从站能够识别是否是发送给自己的数据以及是否做出响应。
在ASCII协议驱动实现多站点轮询的过程中,应主要考虑以下几个方面。
1、数据帧格式
为了区别1#从站和2#从站,在消息帧中增加一个字的地址标识字符,主站通过发送不同地址标识字符的帧来轮询不同从站,同时从站根据地址字符来判断是否是给自己的消息,并据此做出相应的处理。从站发送给主站的响应帧也包含有自己的地址标识字符,用于主站判断是哪个从站返回的数据。字符帧格式如下:
图6
2、时序图
如图所示,主站按顺序轮询1#从站和2#从站。
图7
3、流程图
初始化主要针对主站而言。在初始化阶段主要完成CP模块的参数化、初始化轮询计数器,复位接收缓冲区以及根据轮询计数器生成发送数据帧等方面的工作。
如图所示,在系统初始化完成后,手动启动第一次轮询作业,本实例先轮询1#从站。给1#从站发送查询请求后,等待1#从站的响应,如果在指定的延时时间内接收到1#从站返回的数据,则给2#从站发送查询请求,并等待2#从站的响应,同样如果在指定的延时时间内接收到2#从站返回的数据,则一次完整的轮询结束,自动启动新一轮的轮询。如果在指定的延时时间内不能接收到从站的返回数据或接收错误,则跳过本站,开始轮询下一个站点。
图8
从站根据主站的请求做出响应,主要是在接收到网络上的数据后,判断是否是给自己的数据。如果是,则将数据接收到指定的数据区,同时启动发送功能,发送相应的返回数据给主站;如果不是,则直接删除收到的数据,并不做任何响应。
图9
接下来我们就可以根据上述轮询思想,通过编写STEP7程序具体实现主站轮询从站的功能。由于主站、从站任务的不同,所以在程序上的实现上也有所不同,下面针对主站和从站的程序实现做个简要描述。具体的例程可以参考本文附带的样例程序。
1、初始化
为了实现对多个从站的轮询,程序构造了一个轮询计数器,通过修改轮询计数器的值,来修改主站发送数据帧中的站地址标识字符。本例中定义MW2作为轮询计数器,程序开始,先对轮询计数器进行操作,默认先轮询1#从站,将值1赋值给MW2。
图10
在程序执行过程中,会修改轮询计数器的值,通过判断轮询计数器的值对发送数据块的地址标识符字作相应的修改,以完成对响应从站的轮询。本例中具体的实现如下图,其中DB13作为发送数据块,DB13.DBW0为地址标识符字。
图11
2、启动发送
初始化完成后,可以启动发送功能。本例第一次发送采用手动方式,通过触发手动启动标志位M30.1,并调用FB8 P_SND_RK发送数据到从站。完成第一次发送后,可以通过程序自动修改自动轮询标志位M30.0来实现自动发送数据到从站的功能,具体的FB8 P_SND_RK功能块使用参考CP341手册。
启动发送功能块FB8后,通过FB8返回状态信息,判断是否发送完成,如果发送错误,则重新启动发送功能。
图12
3、接收从站返回数据
发送完成后,启动接收作业,准备接收从站返回数据,并将接收到的数据先放到接收缓冲区中,本例DB14数据块为接收缓冲区。
图13
4、接收完成
接收完成后,做如下几方面处理。如果接收错误或超时,则跳过此站的轮询。
图14
图15
相对于主站,从站的处理程序相对简单。下面以2#从站为例做个说明,1#从站除了调用FB不同外,都与2#从站相同。
1、接收数据
从站一直启动接收功能FB2 P_RCV,接收来自网络上的数据,如果接收到数据则根据地址标识符判断是否是本站的数据。
图16
图17
2、发送返回数据
接收完成后,调用发送功能,将DB19的数据发送给主站。
图18
搭建好网络,并将程序分别下载到各自的CPU中,启动CPU的运行。通过置位手动启动轮询标志位M30.0即可启动轮询程序的运行。通过变量表可以监视到系统的运行情况,可以看到,主站会循环地将数据发送到两个从站,同时也循环地接收来自从站的返回数据,如图所示。
图19
通过本应用实例,可以看到基于ASCII驱动协议的多站点轮询原理比较简单。同时因为其较大的灵活性,所以可以与各种满足ASCII协议的设备进行通信。西门子串行通信模块CP340、CP341、CP440-1、CP441-1/2、CPU313C/314C-2PtP以及ET200S的1SI 3964/ASCII等都集成有ASCII驱动协议功能,可以根据需求灵活地选择这些产品。
本文所述应用和提供例程只作为相关应用的参考,在实际的应用中,应该充分考虑通信伙伴的特点和实际需求,结合不同的轮询方式、错误处理机制、校验方法、数据处理方法等手段达到通信目的。
郑重声明:本文的虚拟工程与真实工程实例有重大差别,示例中并未遵循规范的工程设计流程进行编程,请读者切勿将其与工程实例相混淆;由于此例子是免费的,任何用户可以免费复制或传播此程序例子。程序的作者对此程序不承担任何功能性或兼容性的责任,使用者风险自负;西门子不提供此程序例子的错误更改或者热线支持;为了更好的使用这些模板,建议用户仔细阅读相关模板的使用手册。