联系人:钟涛(小钟)
24小时销售及维修热线:18221357245
电 话:021-31668773 传 真:021-67226033
手 机:18221357245 Q Q : 1824547528
微信:15162594181
邮箱:1824547528@qq.com
地址:上海市金山区枫湾路500号
公司主营:西门子数控系统,S7-200PLC S7-300PLC S7-400PLC S7-1200PLC 6ES5 ET200 人机界面,变频器,DP总线,MM420 变频器MM430 变频器MM440 6SE70交流工程调速变频器6RA70直流调速装置 SITOP电源,电线电缆,数控备件,伺服电机等工控产品。电话:021-31668773 手机:18221357245 商务QQ:1824547528
描述:
使用以下库可以实现过多的边沿评价。通常CPU仅支持256个边沿评价 - 见条目号:8804150。本程序例程也可以用于子程序中。通常CPU不支持此程序例程 - 见条目号:7115899。
这个库包含两个例行程序:分别适用于上升沿和下降沿。
图1:库文件夹
上升沿
图2:上升沿子程序调用
参数 | 变量类型 | 说明 |
EN | BOOL | 必须始终高(1) |
Input | BOOL | 信号输入,当发生(0 -> 1)改变时,激 活输出1个循环周期. |
Memory | BOOL | 临时存储区 |
Output | BOOL | 信号输出 |
功能:
如果信号输入(input)的状态发生变化0 -> 1(上升沿),那么信号输出(output)将被置位一个循环周期。
存储位保留该状态。为了识别另一个边沿,信号输入(input)必须运行一个零循环。这样存储位将被复位。
图3:上升沿的时序图
下降沿
图4:下降沿子程序调用
参数 | 变量类型 | 说明 |
EN | BOOL | 必须始终高(1) |
Input | BOOL | 信号输入,当发生(0 -> 1)改变时,激活输出1个循环周期 |
Memory | BOOL | 临时存储区 |
Output | BOOL | 信号输出 |
功能:
如果信号输入 (input) 的状态发生1 -> 0 (下降沿)变化,那么信号输出 (output) 将被置位一个循环周期.
存储位保留该状态。为了识别另一个边沿,信号输入 (input) 必须被复位为 High 1个循环周期。这样存储位将被复位。
图5:下降沿的时序图
上升沿与下降沿(块: Edge_detect)
图6:子程序调用块Edge_detect
参数 | 变量类型 | 说明 |
EN | [BOOL] | 使能: 使能功能,必须一直为TRUE (1) |
IN | [BOOL] | 信号输入,在上升沿(0->1)或下降沿(1->0),将被设置为“ OUT”一个循环周期。 |
Memory | [BOOL] | 临时存储区 |
OUT | [BOOL] | 信号输出 |
功能:
如果信号输入“IN”出现上升沿(0->1)或下降沿 (1->0)变化,那么信号输出“OUT2”将被置位一个循环周期。存储位保存“IN”信号的当前状态。
西门子SIMATIC S7系列串行通信模块,包括CP340、CP341、CP440-1、CP441-1/2、CPU313C/314C-2PtP以及ET200S的1SI 3964/ASCII等,都支持ASCII驱动协议的通信,可以广泛地用于与第三方支持ASCII协议的仪表、设备、系统等进行点对点连接通信,具有应用简单、灵活,使用方便等优点。
本文通过一个具体的示例,给出了在多个西门子串口通信模块(CP340/CP341)之间通过ASCII驱动协议进行轮询通信的应用。其具体的实现方法和轮询原理具有普遍的指导意义,可以作为西门子串行通信模块与支持ASCII协议的仪表、设备、系统等进行串行通信的参考。
1 网络搭建和硬件组态
1.1 网络搭建
1.1.1 系统组成
如下图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 系统组成结构图
系统涉及的主要硬件设备及版本信息如表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 |
|
表1 系统主要硬件设备及版本信息
1.1.2 软件环境
Ø 操作系统:Windows XP Professional SP2;
Ø 编程软件:STEP7 V5.4 SP4;
Ø PTP协议软件包:SIMATIC S7-CP PtP Param V5.1+SP11
下载链接:/cs/document/27013524?caller=view&lc=zh-CN。
1.1.3 电缆和硬件连接
根据具体情况可以自己制作通信电缆,也可以选择西门子提供的定制电缆。在通信距离可以满足要求的情况下,建议选择西门子提供的串行通信电缆,电缆订货号如表2。
表2 连接电缆订货号
详细的硬件连接如图2所示。
图2 实际硬件连接图
1.2 参数分配
1.2.1 组态主站
Ø CP341模块起始地址256,ASCII协议模式;
Ø 消息帧结束标准:字符延迟时间4ms;
Ø 波特率:9600bps,8位数据位,1位停止位,无校验;
Ø 接口类型:RS485半双工;
Ø 其他采用默认值。
图3 主站CP341模块协议参数分配图
图4 主站CP341模块接口参数分配图
1.2.2 组态从站
对于从站CP341/CP340模块的参数分配与主站保持一致,特别注意波特率、数据位、停止位和奇偶校验位设置要与主站相同。
说明:详细的接口参数设置请参考CP341/CP340手册及相关文档。
下载链接:http://www.ad.siemens.com.cn/download/
图5 2#从站CP340模块协议参数分配图
2 轮询原理
2.1原理说明
与MODBUS协议轮询不同,由于每个从站自身不具有**的设备标识信息(从站地址),无法直接区分和识别网络上的数据帧是哪个站的、需要哪个站做出响应,所以要通过ASCII协议驱动实现多站点轮询,需要人为地对每个站做出标识,并在主站发送轮询指令时给出相应的指令标识,以便从站能够识别是否是发送给自己的数据以及是否做出响应。
在ASCII协议驱动实现多站点轮询的过程中,应主要考虑以下几个方面:
Ø 基本模式:主站主动请求,从站根据请求作出响应;
Ø 数据帧:在发送或响应数据帧中要包含有站点标识的信息;
Ø 实现方法:定时轮询,完成后直接启动下一个作业,完成后延时启动下一个作业等实现方法;
Ø 校验、错误处理机制:CRC、等待、丢弃、重试等。
本应用实例在以上几个方面都采用了相对简单的处理方式,在实际的应用中,针对不同的通信对象,可以具体分析并作出相应的处理。
2.2 轮询机制
2.2.1数据帧格式
为了区别1#从站和2#从站,在消息帧中增加一个字的地址标识字符,主站通过发送不同地址标识字符的帧来轮询不同从站,同时从站根据地址字符来判断是否是给自己的消息,并据此做出相应的处理。从站发送给主站的响应帧也包含有自己的地址标识字符,用于主站判断是哪个从站返回的数据。字符帧格式如下:
图6 定义的主从站数据帧格式
2.2.2 时序图
如下图所示,主站按顺序轮询1#从站和2#从站。
图7 轮询时序图
2.2.3 流程图
Ø 初始化流程
初始化主要针对主站而言。在初始化阶段主要完成CP模块的参数化、初始化轮询计数器,复位接收缓冲区以及根据轮询计数器生成发送数据帧等方面的工作。
Ø 主站轮询流程
如下图所示,在系统初始化完成后,手动启动**次轮询作业,本实例先轮询1#从站。给1#从站发送查询请求后,等待1#从站的响应,如果在指定的延时时间内接收到1#从站返回的数据,则给2#从站发送查询请求,并等待2#从站的响应,同样如果在指定的延时时间内接收到2#从站返回的数据,则一次完整的轮询结束,自动启动新一轮的轮询。
如果在指定的延时时间内不能接收到从站的返回数据或接收错误,则跳过本站,开始轮询下一个站点。
图8 主站轮询流程图
Ø 从站响应流程
从站根据主站的请求做出响应,主要是在接收到网络上的数据后,判断是否是给自己的数据。如果是,则将数据接收到指定的数据区,同时启动发送功能,发送相应的返回数据给主站;如果不是,则直接删除收到的数据,并不做任何响应。
图9 从站响应流程图
3 程序实现
接下来我们就可以根据上述轮询思想,通过编写STEP7程序具体实现主站轮询从站的功能。由于主站、从站任务的不同,所以在程序上的实现上也有所不同,下面针对主站和从站的程序实现做个简要描述。具体的例程可以参考本文附带的样例程序。
3.1 主站程序
3.1.1 初始化
为了实现对多个从站的轮询,程序构造了一个轮询计数器,通过修改轮询计数器的值,来修改主站发送数据帧中的站地址标识字符。
本例中定义MW2作为轮询计数器,程序开始,先对轮询计数器进行操作,默认先轮询1#从站,将值1赋值给MW2。
图10 初始化轮询计数器程序段
在程序执行过程中,会修改轮询计数器的值,通过判断轮询计数器的值对发送数据块的地址标识符字作相应的修改,以完成对响应从站的轮询。本例中具体的实现如下图,其中DB13作为发送数据块,DB13.DBW0为地址标识符字。
图11 生成地址标识符程序段
3.1.2 启动发送
初始化完成后,可以启动发送功能。本例**次发送采用手动方式,通过触发手动启动标志位M30.1,并调用FB8 P_SND_RK发送数据到从站。完成**次发送后,可以通过程序自动修改自动轮询标志位M30.0来实现自动发送数据到从站的功能,具体的FB8 P_SND_RK功能块使用参考CP341手册。
启动发送功能块FB8后,通过FB8返回状态信息,判断是否发送完成,如果发送错误,则重新启动发送功能。
Ø 发送完成:启动接收作业,准备接收从站返回数据。同时启动一个超时定时器T11,如果超时定时时间到,还没有接收到数据,则放弃等待,开始轮询下一个站。
图12 发送功能块程序段
3.1.3 接收从站返回数据
发送完成后,启动接收作业,准备接收从站返回数据,并将接收到的数据先放到接收缓冲区中,本例DB14数据块为接收缓冲区。
图13 接收功能块程序段
3.1.4 接收完成
接收完成后,做如下几方面处理。如果接收错误或超时,则跳过此站的轮询。
Ø 根据接收到数据的地址标识符判断是来自哪个从站的数据,并将数据从接收缓冲区转移到指定的从站数据存储区中,同时清空接收缓冲区;
Ø 复位接收标志,同时修改轮询计数器的值,准备轮询下一个从站;
Ø 复位超时定时器;
Ø 启动一个延时定时器,延时时间到后开始轮询下一个从站。
图14 接收完成处理程序段
图15 准备轮询下一个站程序段
3.2 从站程序
相对于主站,从站的处理程序相对简单。下面以2#从站为例做个说明,1#从站除了调用FB不同外,都与2#从站相同。
3.2.1 接收数据
从站一直启动接收功能FB2 P_RCV,接收来自网络上的数据,如果接收到数据则根据地址标识符判断是否是本站的数据:
Ø 是本站数据,则将接收缓冲区(DB17)中的数据移到指定的地址区(DB18)中,并清空接收缓冲区。同时,触发发送标志,发送返回数据给主站;
Ø 不是本站数据,直接清空接收缓冲区(DB17)。
图16 从站接收程序段
图17 从站接收完处理程序段
3.2.1 发送返回数据
接收完成后,调用发送功能,将DB19的数据发送给主站。
图18 从站发送响应程序段
3.3 实验结果
搭建好网络,并将程序分别下载到各自的CPU中,启动CPU的运行。通过置位手动启动轮询标志位M30.0即可启动轮询程序的运行。通过变量表可以监视到系统的运行情况,可以看到,主站会循环地将数据发送到两个从站,同时也循环地接收来自从站的返回数据,如下图所示。