首页 理论教育 OUC通信示例:实现联网设备互操作性

OUC通信示例:实现联网设备互操作性

时间:2023-07-01 理论教育 版权反馈
【摘要】:CPU1为CPU1215C,其IP地址为192.168.0.215;CPU 2为CPU 1217C,其IP地址为192.168.0.217。CPU2作为TCP通信服务器,调用“TRCV”指令接收CPU1发送过来的数据。图7-31 组态TCP连接③在“连接类型”中选择为“TCP”。通信状态测试 将两个CPU站点组态配置和程序分别下载到CPU1和CPU2后,即可开始对通信状态进行测试。

OUC通信示例:实现联网设备互操作性

1.TCP通信示例

本示例中使用了两个S7-1200CPU,CPU之间采用TCP通信。CPU1为CPU1215C,其IP地址为192.168.0.215;CPU 2为CPU 1217C,其IP地址为192.168.0.217。通信任务是CPU1作为TCP通信客户端,调用“TSEND”指令将CPU1实时时钟数据传送到CPU2。CPU2作为TCP通信服务器,调用“TRCV”指令接收CPU1发送过来的数据。同一项目中两个CPU之间TCP通信与不同项目中两个CPU之间通信相比组态步骤更为简单,因此本文只介绍不同项目中两个CPU之间TCP的通信。

(1)CPU1编程组态

1)设备组态:使用TIA博途软件创建新项目,并将CPU 1215C作为新设备添加到项目中。在设备视图的巡视窗口中,将CPU属性作如下修改:

•在“PROFINET接口”属性中为CPU“添加新子网”,并设置IP地址(192.168.0.215)和子网掩码(255.255.255.0)。

•在“系统和时钟存储器”属性中激活“启用时钟存储器字节”,并设置“时钟存储器字节的地址(MBx)”。

•在“时间”属性中,将“本地时间”设置为“(UTC+08:00)北京、重庆、中国香港特别行政区和乌鲁木齐”。

2)程序编程:

步骤一:在程序块添加一个数据块“MyTcp”,并在数据块中定义一个数据类型为DTL变量“LocalTime”,该变量用于存储本地CPU的实时时钟,建议数据块“MyTcp”为标准访问的数据块。在主程序OB1中调用“RD_LOC_T”指令,读取CPU本地时间并存储在“MyTcp”.LocalTime变量中。

步骤二:在主程序OB1中调用“TCON”指令,建立TCP连接。单击“TCON”指令右上角“开始组态”按钮,在巡视窗口中选择“TCON”指令的“属性>组态>连接参数”,并配置TCP连接属性,如图7-29所示。

①如果通信伙伴非在同一项目,则选择“未指定”。

②在“连接参数”中选择“新建”时,系统将自动创建一个连接数据块。

③在“连接类型”中选择为“TCP”。

④设置伙伴方IP地址。

⑤选择TCP客户端,本例中CPU1为客户端。

⑥本地CPU为客户端时,则需要设置服务器侧端口。

本例中,在“连接参数”的组态窗口中,通信“伙伴”处选择“未指定”,如果通信双方是同一项目中同一子网下的两个设备,则通信“伙伴”处可以选择指定的通信伙伴。

注意:

TCP通信时,如果本地CPU为客户端则需要指定服务器侧通信端口,本地端口无需指定;如果本地CPU为服务器则需要指定本地通信端口,无需指定伙伴端口,如果指定伙伴端口,则只接受该指定端口发送的连接请求。

步骤三:在主程序OB1中,调用“TSEND”指令,将CPU本地时钟发送出去,如图7-30所示。

图7-30中,①如果“LEN”=0,则将发送参数DATA指定的所有数据。

3)下载组态和程序:CPU1的组态配置与编程已经完成,只需将其下载到CPU即可。

978-7-111-58391-2-Chapter07-38.jpg

图7-29 组态TCP连接

(2)CPU2编程组态

1)设备组态:使用TIA博途软件创建新项目,并将CPU1217C作为新设备添加到项目中。在设备视图的巡视窗口中,将CPU属性作如下修改:

•在“PROFINET接口”属性中,为CPU“添加新子网”,并设置IP地址(192.168.0.217)和子网掩码(255.255.255.0)。

•在“时间”属性中,将“本地时间”设置为“(UTC+08:00)北京、重庆、中国香港特别行政区和乌鲁木齐”。

978-7-111-58391-2-Chapter07-39.jpg

图7-30 调用TSEND指令

2)程序编程:

步骤一:在程序块添加一个数据块“MyRcvTcp”,并在数据块中定义一个数据类型为DTL变量“RemoteTime”,该变量用于接收CPU1发送过来的实时时钟。

步骤二:在主程序OB1中,调用“TCON”指令,建立TCP连接。单击TCON指令右上角“开始组态”按钮,在巡视窗口中选择“TCON”指令的“属性>组态>连接参数”,并配置TCP连接属性,如图7-31所示。

①如果通信伙伴非在同一项目,则选择“未指定”。

②在“连接参数”中选择“新建”时,系统将自动创建一个连接数据块。

978-7-111-58391-2-Chapter07-40.jpg

图7-31 组态TCP连接

③在“连接类型”中选择为“TCP”。

④设置伙伴方IP地址。

⑤选择TCP客户端,本例中伙伴CPU为客户端。

⑥本地CPU为服务器时,则需要指定本地端口。

步骤三:在主程序OB1中,调用“TRCV”指令用于接收CPU1发送过来的实时时钟,如图7-32所示。

①Ad-hoc模式用于接收动态长度的数据。

②采用Ad-hoc模式接收数据且接收数据区“MyRcvTcp”.RemoteTime非ARRAY类型时,需要将数据块“MyRcvTcp”设置为标准访问。

当发送方发送数据类型、长度与接收方相同时,也可采用定长模式接收,只需将图7-32中参数ADHOC设置为FALSE即可,此时数据块“MyRcvTcp”也可设置为优化访问。

978-7-111-58391-2-Chapter07-41.jpg

图7-32 调用TRCV指令

3)下载组态和程序 CPU2的组态配置与编程已经完成,只需将其下载到CPU即可。

(3)通信状态测试 将两个CPU站点组态配置和程序分别下载到CPU1和CPU2后,即可开始对通信状态进行测试。先后上升沿信号触发服务器和客户端的“TCON”指令的输入参数REQ,用于建立TCP连接。TCP不能成功建立连接时,可以通过监控“TCON”指令输出参数ERROR和STATUS,查找故障原因。由于STATUS只在ERROR为TRUE那一个扫描周期时有效,为了有效读取错误代码,可参考图7-19方式读取错误代码。

在网络视图中,选择相应的CPU,并“转至在线”模式,在“连接”选项卡中可以对开放式用户通信连接进行诊断,操作步骤参考图7-15。成功建立的TCP连接,是调用TSEND/TRCV指令的先决条件。连接建立后,就可以通过“TSEND”发送数据,调用“TRCV”接收数据。

示例程序请参见随书光盘中的例程目录《TCP_Communication》。

2.UDP通信示例

本示例中使用了两个S7-1200 CPU,CPU之间采用UDP通信。CPU 1为CPU 1215C,其IP地址为192.168.0.215;CPU 2为CPU 1217C,其IP地址为192.168.0.217。通信任务是CPU1将本地CPU实时时钟数据通过UDP通信传送到CPU 2。CPU 2接收UDP数据,判断接收到的数据是否来自CPU1,如果数据来自CPU 1,则将接收到的时钟数据写入到本地CPU的本地时间。

注意:

如果CPU1采用UDP广播通信,则可以将本地CPU的实时时钟信号同时发送到整个网络中其他设备,UDP通信方式就可以实现精度要求不高的时间同步。(www.xing528.com)

(1)CPU1编程组态

1)设备组态:使用TIA博途软件创建新项目,并将CPU 1215C作为新设备添加到项目中。在设备视图的巡视窗口中,将CPU属性作如下修改:

•在“PROFINET接口”属性中,为CPU“添加新子网”,并设置IP地址(192.168.0.215)和子网掩码(255.255.255.0);

•在“系统和时钟存储器”属性中,激活“启用时钟存储器字节”,并设置“时钟存储器字节的地址(MBx)”;

•在“时间”属性中,将“本地时间”设置为“(UTC+08:00)北京、重庆、中国香港特别行政区和乌鲁木齐”。

2)程序编程:

步骤一:在程序块添加一个数据块“MyUdp”,并在数据块中定义一个数据类型为DTL变量“LocalTime”,该变量用于存储本地CPU的实时时钟。在主程序OB1中调用“RD_LOC_T”指令读取CPU本地时间并存储在“MyUdp”.LocalTime变量中。

步骤二:在主程序OB1中调用“TCON”指令,定义UDP通信服务。单击“TCON”指令右上角“开始组态”按钮,在巡视窗口中选择“TCON”指令的“属性>组态>连接参数”,并配置UDP属性,如图7-33所示。

①在“伙伴”中选择“未指定”。

②在“连接参数”中选择“新建”时,系统将自动创建一个连接数据块。

③在“连接类型”中选择“UDP”;

④指定本地CPU的通信端口。

978-7-111-58391-2-Chapter07-42.jpg

图7-33 组态UDP通信

步骤三:在程序块中,再次添加一个数据块“AddrTusend”,数据块类型选择为TADDR_Param,如图7-34所示。

①选择“添加新块”的类型为“数据块”。

②在类型下拉菜单中,选择“TADDR_Param”。

③单击“确定”按钮,创建数据块。

978-7-111-58391-2-Chapter07-43.jpg

图7-34 添加类型“TADDR_Param”数据块

978-7-111-58391-2-Chapter07-44.jpg

图7-35 初始化数据块“AddrTusend”

需要在数1据块“AddrTusend”中定义发送数据时,接收方IP地址和端口地址(如果需要发送UDP广播报文,则需要将目的方IP地址设置为广播地址,例如192.168.0.255),数据块内容定义如图7-35所示。

①设置目的方IP地址。

②设置目的方通信端口。

步骤四:在主程序OB1中,调用“TUSEND”指令,将CPU本地时钟通过UDP通信发送出去,“TUSEND”指令的输入参数ADDR需要连接到数据块“AddrTusend”,“TUSEND”指令调用如图7-36所示。

978-7-111-58391-2-Chapter07-45.jpg

图7-36 调用TUSEND指令

3)下载组态和程序:CPU1的组态配置与编程已经完成,只需将其下载到CPU即可。

(2)CPU2编程组态

1)设备组态:使用TIA博途软件创建新项目,并将CPU1217C作为新设备添加到项目中。在设备视图的巡视窗口中,将CPU属性作如下修改:

•在“PROFINET接口”属性中,为CPU“添加新子网”,并设置IP地址(192.168.0.217)和子网掩码(255.255.255.0)。

•在“时间”属性中,将“本地时间”设置为“(UTC+08:00)北京、重庆、中国香港特别行政区和乌鲁木齐”。

2)程序编程:

步骤一:在程序块添加一个数据块“MyRcvUdp”,并在数据块中定义一个数据类型为DTL变量“RemoteTime”,该变量将用于接收CPU1发送过来的实时时钟。在程序块中,需要再次添加两个类型为TADDR_Param的数据块“AddrTurcv”和“AddrSource”。其中数据块“AddrTurcv”用于存储UDP通信伙伴方的IP地址和端口信息,无需为其分配初始值;数据块“AddrSource”用于判断通信是否来自于特定的IP地址和端口,需要为其分配初始值,如图7-37所示。

978-7-111-58391-2-Chapter07-46.jpg

图7-37 初始化数据块“AddrSource”

①判断发送方的IP地址是否为“192.168.0.215”。

②判断发送方端口是否为“2000”,该值需要与图7-33中CPU1的本地端口设置相同。

步骤二:在主程序OB1中,调用“TCON”指令,定义UDP通信服务。单击“TCON”指令右上角“开始组态”按钮,在巡视窗口中选择“TCON”指令的“属性>组态>连接参数”,并配置UDP属性,如图7-38所示。

978-7-111-58391-2-Chapter07-47.jpg

图7-38 组态UDP通信

①在“伙伴”中选择“未指定”。

②在“连接参数”中选择“新建”时,系统将自动创建一个连接数据块。

③在“连接类型”中选择“UDP”。

④指定本地CPU的通信端口。

步骤三:在主程序OB1中,调用“TURCV”指令,接收UDP数据。当新的通信数据被接收时,判断数据发送方是否来自CPU1,如果是,则将接收到数据写入到本地CPU的本地时钟。如图7-39所示。

3)下载组态和程序:

CPU2的组态配置与编程已经完成,只需将其下载到CPU即可。

(3)通信状态测试

将两个CPU站点组态配置和程序分别下载到CPU1和CPU2后,即可开始对通信状态进行测试。分别上升沿信号触发CPU1和CPU2“TCON”指令的输入参数REQ,用于创建UDP通信服务。

通信双方创建完UDP通信后,即可监控CPU2的UDP接收数据块“MyRcvUdp”和本地时钟观察其是否跟随CPU1时钟变化。

示例程序请参见随书光盘中的例程目录《UDP_Communication》。

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

我要反馈