西门子SIMATIC S7系列串行通信模块,包括CP340、CP341、CP440-1、CP441-1/2、CPU313C/314C-2PtP和ET200S的1SI 3964/ASCII,均支持ASCII驱动协议通信,可广泛用于与支持ASCII协议的第三方仪器、设备、系统等进行点对点连接和通信。它具有应用简单、灵活、易用的优点。
本专栏通过一个具体的例子来给出多个西门子串行通信模块(CP340/CP341)之间通过ASCII驱动协议进行轮询通信的应用。其具体实现方法和轮询原理具有普遍指导意义,可以作为西门子串行通信模块与支持ASCII协议的仪器、设备、系统等之间的串行通信的参考。
1. 系统组成
如下图所示,系统包括三个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接口接口并连接到网络。
2.电缆和硬件连接
详细硬件连接如图
3.组态主站
CP341模块起始地址256,ASCII协议模式;
消息帧结束标准:字符延迟时间4ms;
波特率:9600bps,8位数据位,1位停止位,无奇偶校验;
接口类型:RS485半双工;
其他采用默认值。
4. 组态从站
对于从站CP341/CP340模块,参数分配应与主站一致。特别注意波特率、数据位、停止位和奇偶校验位设置与主站相同。
5. 轮询原理
与MODBUS协议轮询不同,由于每个从站本身没有唯一的设备标识信息(从站地址),无法直接区分和识别网络上的数据帧属于哪个站以及哪个站需要响应,因此通过ASCII协议驱动实现多站轮询,需要手动识别各个站,并在主站发送轮询命令时给出相应的命令标识,以便从站识别是否有数据发送对自己以及是否回应。
在利用ASCII协议驱动实现多站点轮询的过程中,主要考虑以下几个方面:
基本模式:主站主动请求,从站根据请求响应;
数据帧:发送或响应数据帧中必须包含站点标识信息;
实现方式:定期轮询、完成后直接开始下一个作业、完成后延迟开始下一个作业等;
验证和错误处理机制:CRC、等待、丢弃、重试等。
6. 轮询机制
数据帧格式
为了区分1#从站和2#从站,在报文帧中添加一字地址标识字符。主站通过发送具有不同地址标识字符的帧来轮询不同的从站。同时从站根据地址字符判断是否。这是给你自己的一个信息,你应该相应地处理它。从站向主站发送的响应帧中还包含有自己的地址标识字符,主站用该地址标识字符来判断是哪个从站返回了数据。字符帧格式如下:
时序图
流程图
初始化过程
初始化主要是针对主站点。在初始化阶段,主要完成CP模块的参数化、初始化轮询计数器、重置接收缓冲区以及根据轮询计数器生成和发送数据帧。
主站轮询流程
如下图所示,系统初始化完成后,手动启动第一个轮询作业。本例中首先轮询1#从站。向1#从站发送查询请求后,等待1#从站的响应。如果在指定的延迟时间内收到从站1# 返回的数据,则向从站2# 发送查询请求,并等待从站2#。从站的响应,同样如果在指定的延时时间内收到2#从站返回的数据,则一次完整的轮询结束,自动开始新一轮的轮询。
如果在指定的延迟时间内无法接收到从站的返回数据或接收到错误,则将跳过当前站并轮询下一个站。
从机响应流程
从站根据主站的请求进行响应,主要是接收到网络上的数据后,判断是否是自己的数据。如果是,则将数据接收到指定的数据区,同时启动发送函数,将相应的返回数据发送给主站;如果没有,则直接删除接收到的数据,不做任何反应。
7. 主站程序
初始化
为了实现多个从站的轮询,程序构造了一个轮询计数器,通过修改轮询计数器的值来修改主站发送的数据帧中的站地址标识字符。
MW2 在此被定义为轮询计数器。当程序启动时,首先操作轮询计数器。默认情况下,首先轮询1#从站,并将值1分配给MW2。
在程序执行过程中,轮询计数器的值将会被修改。通过判断轮询计数器的值,相应修改发送数据块的地址标识字,完成对响应从站的轮询。这里的具体实现如下所示,其中DB13作为发送数据块,DB13.DBW0为地址标识字。
开始发送
初始化完成后,即可启动发送功能。这里的第一次发送是手动完成的,通过触发手动启动标志M30.1,调用FB8 P_SND_RK向从站发送数据。完成第一次发送后,可以通过程序自动修改自动轮询标志M30.0,实现自动向从站发送数据的功能。
启动发送功能块FB8后,通过FB8返回状态信息来判断发送是否完成。如果发送出错,则重新启动发送功能。
发送完成:开始接收工作,准备接收从站返回的数据。同时,启动超时定时器T11。如果超时时间到,还没有收到数据,则放弃等待,开始轮询下一个站。
接收从站返回的数据
发送完成后,启动接收作业,准备接收从站返回的数据,并将接收到的数据先放入接收缓冲区,其中DB14数据块为接收缓冲区。
接待完成
接收完成后,进行以下处理。如果发生接收错误或超时,则跳过对该站的轮询。
根据接收到的数据的地址标识判断数据来自哪个从机,将数据从接收缓冲区传输到指定的从机数据存储区域,同时清空接收缓冲区;
重置接收标志并修改轮询计数器的值,准备轮询下一个从站;
重置超时定时器;
启动一个延时定时器,延时时间到后开始轮询下一个从站。
8. 从站程序
接收数据
从站总是启动接收函数FB2 P_RCV来接收来自网络的数据。如果收到数据,则根据地址标识符判断是否是本站的数据:
如果是本地数据,则将接收缓冲区(DB17)中的数据移动到指定地址区域(DB18),并清空接收缓冲区。同时触发发送标志并向主站发送返回数据;
如果不是本站数据,则直接清除接收缓冲区(DB17)。
发送返回数据
接收完成后,调用发送函数将DB19的数据发送给主站。
9. 实验结果
设置网络,将程序下载到各自的CPU,并启动CPU运行。通过设置手动启动轮询标志M30.0,可以启动轮询程序的运行。通过变量表可以监控系统的运行状态。可以看到,主站会循环向两个从站发送数据,同时循环接收从站返回的数据,如下图所示。