首页 理论教育 使用TSEND_C/TRCV

使用TSEND_C/TRCV

时间:2023-06-30 理论教育 版权反馈
【摘要】:在开放式用户通信中,S7-300/400/1200/1500可以用指令TCON来建立连接,用指令TDISCON来断开连接。指令TSEND和TRCV用于通过TCP和ISO-on-TCP协议发送和接收数据;指令TUSEND和TURCV用于通过UDP协议发送和接收数据。S7-1200/1500除了使用上述指令实现开放式用户通信,还可以使用指令TSEND_C和TRCV_C,通过TCP和ISO-on-TCP协议发送和接收数据。上述指令均为函数块。图6-15 TSEND_C和TRCV_C指令6.组态连接参数打开PLC_1的OB1,单击选中指令TSEND_C,然后选中下面的巡视窗口的“属性>组态>连接参数”。

使用TSEND_C/TRCV_C指令在S7-1200/S7-1500之间进行通信

1.开放式用户通信

基于CPU集成的PN接口的开放式用户通信(Open User Communication)是一种程序控制的通信方式,这种通信只受用户程序的控制,可以用程序建立和断开事件驱动的通信连接,在运行期间也可以修改连接。

在开放式用户通信中,S7-300/400/1200/1500可以用指令TCON来建立连接,用指令TDISCON来断开连接。指令TSEND和TRCV用于通过TCP和ISO-on-TCP协议发送和接收数据;指令TUSEND和TURCV用于通过UDP协议发送和接收数据。

S7-1200/1500除了使用上述指令实现开放式用户通信,还可以使用指令TSEND_C和TRCV_C,通过TCP和ISO-on-TCP协议发送和接收数据。这两条指令有建立和断开连接的功能,使用它们以后不需要调用TCON和TDISCON指令。上述指令均为函数块。

2.组态CPU的硬件

生成一个名为“1200_1200ISO_C”的项目(见随书光盘中的同名例程),单击项目树中的“添加新设备”,添加一块CPU 1215C,默认的名称为PLC_1。双击项目树的“PLC_1”文件夹中的“设备组态”,打开设备视图。选中CPU左下角表示以太网接口的绿色小方框,然后选中巡视窗口的“属性>常规>以太网地址”,采用PN接口默认的IP地址192.168.0.1,和默认的子网掩码255.255.255.0。选中CPU后选中巡视窗口的“属性>常规>系统和时钟存储器”,启用MB0为时钟存储器字节(见图1-28)。

用同样的方法添加一块CPU 1215C,默认的名称为PLC_2。设置PN接口的IP地址为192.168.0.2,启用它的时钟存储器字节。

3.组态CPU之间的通信连接

双击项目树中的“设备和网络”,打开网络视图(图6-12)。选中PLC_1的以太网接口,按住鼠标左键不放,“拖拽”出一条线,光标移动到PLC_2的以太网接口上,松开鼠标,将会出现图6-12所示的绿色的以太网线,以及名为“PN/IE_1”的连接。

4.验证通信是否实现的典型程序结构

978-7-111-58719-4-Chapter06-15.jpg

图6-12 网络组态

本书的通信程序只是用来验证通信是否成功,没有什么工程意义。所有的通信程序基本上采用下述的典型结构。

(1)生成保存发送和接收数据的数据块

本例要求通信双方发送和接收100个整数。双击项目树的文件夹“\PLC_1\程序块”中的“添加新块”,生成全局数据块DB1,将它的符号地址改为SendData。用右键单击它,选中快捷菜单中的“属性”,再选中打开的对话框左边窗口中的“属性”。去掉复选框优化的块访问”中的钩,允许使用绝对地址。在DB1中生成有100个整数元素的数组ToPLC_2(见图6-13上面的图),用来保存要发送的数据。再生成没有“优化的块访问”属性的全局数据块DB2,符号地址为RcvData,在DB2中生成有100个整数元素的数组FromPLC_2,用来保存接收到的数据。

用同样的方法生成PLC_2的数据块DB1和DB2,在其中分别生成有100个整数元素的数组ToPLC_1和FromPLC_1。

(2)初始化保存发送和接收数据的数组

在OB100中用指令FILL_BLK(填充块)将两块CPU的DB1(SendData)中要发送的100个整数分别初始化为16#1111(见图6-13下面的图)和16#2222,将保存接收数据的DB2(RcvData)中的100个整数清零。

978-7-111-58719-4-Chapter06-16.jpg

图6-13 数据块SendData与OB100中的程序

(3)将双方要发送的第一个字周期性地加1

双击打开项目树的“\PLC_1\程序块”文件夹中的主程序OB1,用周期为0.5s的时钟存储器位M0.3的上升沿,将要发送的第一个字DB1.DBW0加1(见图6-14)。

978-7-111-58719-4-Chapter06-17.jpg

图6-14 OB1中的梯形

5.调用TSEND_C和TRCV_C

在开放式用户通信中,发送方调用TSEND_C指令发送数据,接收方调用TRCV_C指令接收数据。

双击打开OB1(见图6-15),将右边的指令列表中的“通信”窗格的“开放式用户通信”文件夹中的TSEND_C拖拽到梯形图中。单击自动出现的“调用选项”对话框中的“确定”按钮,自动生成TSEND_C的背景数据块TSEND_C_DB(DB3)。用同样的方法调用TRCV_C,自动生成它的背景数据块TRCV_C_DB(DB4)。在项目树的“PLC_1\程序块\系统块\系统资源”文件夹中,可以看到这两条指令和自动生成的它们的背景数据块。

用同样的方法生成PLC_2的程序,两台PLC的用户程序基本上相同。

978-7-111-58719-4-Chapter06-18.jpg

图6-15 TSEND_C和TRCV_C指令

6.组态连接参数

打开PLC_1的OB1,单击选中指令TSEND_C,然后选中下面的巡视窗口的“属性>组态>连接参数”(见图6-16)。

在右边窗口中,单击“伙伴”的“端点”选择框右边的978-7-111-58719-4-Chapter06-19.jpg按钮,用出现的下拉式列表选择通信伙伴为PLC_2,两台PLC图标之间出现绿色连线。“连接ID”(连接标识符,即连接的编号)的默认值为1。

用“连接类型”选择框设置连接类型为ISO-on-TCP。单击“本地”的“连接数据”选择框右边的978-7-111-58719-4-Chapter06-20.jpg按钮,单击出现的“<新建>”,自动生成连接描述数据块“PLC_1_Send_DB”(DB5)。用同样的方法生成PLC_2的接描述数据块“PLC_2_Send_DB”(DB5)。

通信的一方作为主动的伙伴,启动通信连接的建立。另一方作为被动的伙伴,对启动的连接作出响应。图6-16用单选框设置由PLC_1主动建立连接。

PLC_1设置的连接参数将自动用于PLC_2,PLC_2组态“连接参数”的对话框与图6-16的结构相同,“本地”与“伙伴”列的内容互相交换。

TSAP(Transport Service Access Point)是传输服务访问点。设置连接参数时,并不检查各连接的连接ID、TCP连接的端口编号和ISO-on-TCP连接的TSAP是否分别重叠。应保证这些参数在网络中是唯一的。(www.xing528.com)

978-7-111-58719-4-Chapter06-21.jpg

图6-16 组态ISO-on-TCP连接

开放式用户通信的连接参数用连接描述数据块PLC_1_Send_DB和PLC_2_Send_DB保存。可以通过删除连接描述数据块来删除连接。在删除它们时,应同时删除调用时使用它们作为输入参数的通信指令TSEND_C、TRCV_C及其背景数据块,这样才能保证程序的一致性。

选中巡视窗口中的“属性>组态>块参数”,可以在右边窗口设置指令的输入参数和输出参数。

7.TSEND_C和TRCV_C的参数

图6-15中TSEND_C的参数的意义如下:

在请求信号REQ的上升沿,根据参数CONNECT指定的连接描述数据块(DB5)中的连接描述,启动数据发送任务。发送成功后,参数DONE在一个扫描周期内为1状态。

CONT(Bool)为1状态时建立和保持连接;为0状态时断开连接,接收缓冲区中的数据将会消失。连接被成功建立时,参数DONE在一个扫描周期内为1状态。CPU进入STOP模式时,已有的连接被断开。

LEN是TSEND_C要发送或TRCV_C要接收的数据的字节数,它为默认值0时,发送或接收用参数DATA定义的所有的数据。

图6-15中TSEND_C的参数DATA的实参P#DB1.DBX0.0 INT 100是数据块SendData(DB1)中的数组ToPLC_2的绝对地址。TRCV_C的参数DATA的实参P#DB2.DBX0.0INT 100是数据块RcvData(DB2)中的数组FromPLC_2的绝对地址。

COM_RST(Bool)为1状态时,断开现有的通信连接,新的连接被建立。如果此时数据正在传送,可能导致丢失数据。

DONE(Bool)为1状态时表示任务执行成功;为0状态时任务未启动或正在运行。

BUSY(Bool)为0状态时任务完成;为1状态时任务尚未完成,不能触发新的任务。

ERROR(Bool)为1状态时执行任务出错,字变量STATUS中是错误的详细信息。

指令TRCV_C的参数的意义如下:

EN_R(Bool)为1状态时,准备好接收数据。

CONT和EN_R(Bool)均为1状态时,连续地接收数据。

DATA(Variant)是接收区的起始地址和最大数据长度

RCVD_LEN是实际接收的数据的字节数。其余的参数与TSEND_C的相同。

8.硬件通信实验的典型方法

用以太网电缆通过交换机(或路由器)连接计算机和两块CPU的以太网接口,将用户程序和组态信息分别下载到两块CPU,并令它们处于运行模式。

同时打开两块CPU的监控表,用工具栏978-7-111-58719-4-Chapter06-22.jpg按钮垂直拆分工作区,同时监视两块CPU的DB2中接收到的部分数据(见图6-17)。将两块CPU的TSEND_C和TRCV_C的参数CONT(M10.1和M11.1)均置位为TRUE,建立起通信连接。由于双方的发送请求信号REQ(时钟存储器位M0.3)的作用,TSEND_C每0.5s发送100个字的数据。可以看到,双方接收到的第一个字DB2.DBW0的值每0.5s加1,DB2中第二个字DBW2和最后一个字DBW198是通信伙伴在OB100中预置的值。

978-7-111-58719-4-Chapter06-23.jpg

图6-17 PLC_1与PLC_2的监控表

通信正常时令M10.1或M11.1为0状态,建立的连接被断开,CPU将停止发送或接收数据。接收方的DB2.DBW0停止变化。

也可以在通信正常时双击打开PLC_1的数据块DB2,然后打开数组FromPLC_2。单击“全部监视”按钮978-7-111-58719-4-Chapter06-24.jpg,在“监视值”列可以看到接收到的100个整数数据。双方接收到的第1个字的值不断增大,其余99个字的值相同,是对方CPU在OB100中预置的值。

9.仿真实验

S7-1200可以对开放式用户通信的指令TSEND/TRCV和TSEND_C/TRCV_C仿真。从TIA博途V14开始,可以对S7-1500的上述指令仿真。

打开项目“1200_1200_ISO_C”,选中PLC_1,单击工具栏上的“开始仿真”按钮978-7-111-58719-4-Chapter06-25.jpg,出现仿真软件的精简视图(见图2-39)和“扩展的下载到设备”对话框(见图2-40),设置“PG/PC接口的类型”为“PN/IE”,“PG/PC接口”为“PLCSIM S7-1200/S7-1500”,“接口/子网的连接”为“PN/IE_1”或“插槽‘1×1’处的方向”。

单击“开始搜索”按钮,搜索到IP地址为192.168.0.1的PLC_1。单击“下载”按钮,将程序和组态数据下载到仿真PLC,后者被切换到RUN模式,RUNLED变为绿色。

选中PLC_2,单击工具栏上的“开始仿真”按钮978-7-111-58719-4-Chapter06-26.jpg,出现仿真软件的精简视图,上面显示“PLC_1(SIM-1200)”,IP地址为192.168.0.1。单击工具栏上的978-7-111-58719-4-Chapter06-27.jpg按钮,将程序和组态数据下载到仿真PLC,后者被切换到RUN模式,仿真软件上显示“PLC_2”,IP地址变为192.168.0.2。

双击打开两台PLC的监控表(见图6-17),调试的方法和观察到的现象与硬件PLC实验相同。

10.其他开放式用户通信项目简介

将项目“1200_1200ISO_C”另存为名为“1200_1200TCP_C”的项目(见随书光盘中的同名例程)。将图6-16中的“连接类型”改为“TCP”,“伙伴端口”为默认的2000,用户程序和其他组态数据不变。

S7-1500之间和S7-1200、S7-1500之间的开放式用户通信的组态和编程方法,与上述的S7-1200之间的开放式用户通信的相同。具体情况见随书光盘中的项目“1500_1500TCP_C”“1500_1500ISO_C”和“1500_1200TCP_C”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈