S7-1200/1500支持使用自由口协议的点对点(Point-to-Point,PtP)通信,可以通过用户程序定义和实现选择的协议。PtP通信具有很大的自由度和灵活性,可以将信息直接发送给外部设备(例如打印机),也可以接收外部设备(例如条形码阅读器)的信息。
S7-1200的PtP通信使用CM 1241通信模块和CB 1241通信板。它们支持ASCⅡ、USS驱动、Modbus RTU主站协议和Modbus RTU从站协议。CPU模块的左边最多可以安装3块通信模块。串行通信模块的电源由CPU提供,不需要外接的电源。
S7-1500的点对点通信模块可以在主机架或ET 200MP I/O系统中使用。可以使用3964(R)、Modbus RTU(仅高性能型)或USS协议,以及基于自由口的ASCⅡ协议。有CMPtP RS422/485基本型和高性能型、CM PtP RS232基本型和高性能型这4种模块。
ET 200SP的CM PtP串行通信模块支持RS-232/RS-422/RS-485接口,以及自由口、3964(R)、Modbus RTU主/从、USS多种协议。
可以用设备视图组态接口参数,组态的参数永久保存在CPU中,CPU进入STOP模式时不会丢失组态参数。也可以用指令PORT_CFG来组态通信接口,用SEND_CFG和RCV_CFG指令来分别组态发送和接收数据的属性。设置的参数仅在CPU处于RUN模式时有效。切换到STOP模式或断电后又上电,这些参数恢复为设备组态时设置的参数。
2.组态通信模块
在STEP7中生成一个名为“点对点通信”的新项目(见随书光盘中的同名例程),PLC_1和PLC_2均为CPU 1214C。打开PLC_1的设备视图,将右边的硬件目录窗口的文件夹“\通信模块\点到点”中的CM 1241(RS422/485)模块拖放到CPU左边的101号槽。选中该模块后,选中下面的巡视窗口的“属性>常规>RS422/485接口>端口组态”(见图6-49),在右边的窗口中设置通信接口的参数。设置“操作模式”为“半双工(RS485)”。除了波特率,其他参数均采用默认值。
图6-49 串行通信模块端口组态
奇偶校验的默认值是无奇偶校验,还可以选偶校验、奇校验、Mark校验(将奇偶校验位置位为1)和Space校验(将奇偶校验位复位为0)。
选中左边窗口的“组态传送消息”和“组态所接收的消息”,可以组态发送报文和接收报文的属性,本例均采用默认的设置。
用同样的方法和参数,为PLC_2组态一块RS-485模块,波特率为38.4kbit/s。
流量控制仅用于RS-232模块,它是为了不丢失数据,用来平衡数据发送和接收的一种机制。流量控制可以确保发送设备发送的信息量不会超出接收设备所能处理的信息量。
3.设计用户程序
在点对点通信中,PLC_1作主站,PLC_2作从站。通信任务如下:在起动信号M2.0为1状态时,主站发送100个字的数据,从站接收到后返回100个字的数据。以后不停地重复上述过程。
在点对点通信中,用Send_P2P指令发送报文,用Receive_P2P指令接收报文。它们的操作是异步的,用户程序使用轮询方式确定发送和接收的状态,这两条指令可以同时执行。通信模块发送和接收报文的缓冲区最大为1024B。
双击打开主站的OB1,将右边的“指令”窗口的“通信”窗格的文件夹“\通信处理器\PtP Communication”中的Send_P2P、Receive_P2P指令拖拽到梯形图中(见图6-50)。自动生成它们的背景数据块DB3和DB4。S7-1200也可以使用文件夹“\通信处理器\点到点”中的SEND_PTP和RCV_PTP指令。
图6-50中两条指令的输入参数PORT为通信接口的标识符(常数),可以在PLC变量表的“系统常数”选项卡中查到它,也可以在通信接口的属性对话框中找到它。BUFFER是发送缓冲区的起始地址,LENGTH是发送缓冲区的长度。
(www.xing528.com)
图6-50 主站的OB1中的程序
发送结束时输出位DONE为1状态。指令执行出错时,输出位ERROR为1状态,错误代码在STATUS中。
接收完成时Receive_P2P的输出位NDR为1状态,LENGTH中是接收到的报文的字节数。
为主站生成符号地址为BF_OUT和BF_IN的共享数据块DB1和DB2,在它们中间分别生成有100个字元素的数组“TO从站”和“FROM从站”。
在OB100中给数组“TO从站”要发送的所有元素赋初值,将保存接收到的数据的数组“FROM从站”的所有元素清零。在OB1中用周期为0.5s的时钟存储器位M0.3的上升沿,将要发送的第一个字“‘BF_OUT’.TO主站[1]”的值加1。
下面是主站的轮询顺序:
1)在Send_P2P指令的REQ信号M2.0的上升沿,启动发送过程(见图6-50),发送DB1中的100个整数。在多个扫描周期内继续执行Send_P2P指令,完成报文的发送。
2)Send_P2P的输出位DONE(M2.1)为1状态时,表示发送完成,将M2.4置位。用M2.4作为Receive_P2P的接收使能信号EN的实参,反复执行Receive_P2P。模块接收到响应报文后,Receive_P2P指令的输出位NDR(M2.5)为1状态,表示已接收到新数据。
3)在M2.5的下降沿将M2.7置位,重新启动发送过程,返回第1步。同时将接收使能信号M2.4复位。在发送完成时,将M2.7复位。
从站接收和发送数据的程序见图6-51,DB1和DB2中的100个字元素的数组符号名分别为“TO主站”和“FROM主站”,其他程序与PLC_1的基本上相同。
图6-51 从站的OB1中的程序
从站的轮询顺序如下:
1)在OB1中调用Receive_P2P指令,开始时它的使能信号EN为1状态。
2)从站接收到请求报文后,Receive_P2P指令的输出位NDR(M2.5)变为1状态。在M2.5的下降沿将M2.4置位,启动Send_P2P指令,将DB1中的响应报文发送给主站。M2.4的常闭触点断开,Receive_P2P指令停止接收数据。
3)在响应报文发送完成时,Send_P2P的输出位DONE(M2.1)变为1状态,将M2.4复位,停止发送报文。Receive_P2P的EN输入变为1状态,又开始准备接收主站发送的报文。
4.点对点通信的实验
硬件接线图如图6-52所示。在主站和从站的监控表中监控DB2的DBW0、DBW2和DBW198。用监控表将M2.0置为1状态后马上置为0状态,启动主站向从站发送数据。观察双方接收到的第一个字DB2.DBW0的值是否不断增大,DB2的DBW2和DBW198的值是否与对方在OB100中预置的值相同。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。