您的位置:控制工程论坛网论坛 » 工业以太网 » 如何对基于TCP连接的以太网开放式通信编程?

chenwh78

chenwh78   |   当前状态:在线

总积分:6174  2024年可用积分:0

注册时间: 2008-10-10

最后登录时间: 2019-06-16

空间 发短消息加为好友

如何对基于TCP连接的以太网开放式通信编程?

chenwh78  发表于 2008/10/20 10:46:45      1254 查看 0 回复  [上一主题]  [下一主题]

手机阅读

描述:
可以通过CPU集成的工业以太网接口使用基于工业以太网的开放式通信进行数据交换.下列的协议都支持开放式通信:

  • TCP
  • ISO-on-TCP
  • UDP

下列通信块可以用于基于TCP 协议的开放式通信:

  • FB65 "TCON" 建立连接
  • FB66 "TDISCON" 结束连接
  • FB63 "TSEND" 发送数据
  • FB64 "TRCV"  接收数据

可以在Standard Library -> Communication Blocks下找到这些通信块. 建立TCP连接的连接参数保存在一个数据结构中.本例中,用到 UDT65 "TCON_PAR" 这个数据结构,它是由用户来完成参数化的, TCP连接不在 NetPro 中组态.

注意:
关于基于工业以太网的开放式通信的详细内容请参见条目:1214574 中的名为"System software for S7-300/400 system and standard functions" 的手册.

例程描述:
S7 程序中包含了对 FB65 "TCON"的调用和带有建立TCP连接的连接参数数据结构 UDT65 "TCON_PAR". 也包含了来自于Standard Library -> Communication Blocks下的FB63 "TSEND" 和 FB64 "TRCV"的调用.FB63 "TSEND"用于发送数据到 S7站或 S5站, 以及到PC站或到第三方系统. FB64 "TRCV" 用于接收来自其他S7站,S5站,PC站和第三方系统的数据.

首先为S7-300站创建硬件组态.注意配置MB10作为时钟存储器.发送请求有该时钟存储器触发.保存编译S7-300站的硬件组态,下载到CPU.

STEP 7 程序由OB100, OB1, FB300, DB300, FC97, UDT65 和 FB63, FB64, FB65 以及 FB66 组成.

OB100:
OB100 是重启OB块,当CPU重新启动时(暖启动)执行一次.在 OB100中,第一次通信由M0.3 "START-UP"触发.

OB1:
OB1 被循环调用. FB300 在OB1中被调用 (背景数据块: DB300) , M0.3 "START-UP" 作为INIT_COM参数. OB1结束时M0.3"START-UP"被复位.


图. 01: OB1 

FB300:
在OB1中调用 FB300 .该FB中调用了 FC97 "SET_TCP_ENDPOINTx" 和  FB65 "TCON", FB63 "TSEND", FB64 "TRCV" 以及 FB66 "TDISCON".

TCP连接的本地和远程参数通过FC97 "SET_TCP_ENDPOINTx"来设置. 下列参数需要考虑:

  • ID: 连接ID
  • DEV_ID
    DEV_ID = B#16#2 对与CPU31x-2PN/DP 或
    DEV_ID = B#16#3 对于 CPU319-3PN/DP 或
    DEV_ID = B#16#5 对于CPU41x-3PN/DP
  • ACTIVE: 主动或是被动建立连接
  • LOC_PORT: CPU本地端口
  • REM_PORT: 通信伙伴的远程端口
  • IP_ADDR1 ... IP_ADDR4: 通信伙伴的IP地址


图. 02: 调用FC97

通过FB65"TCON" 的输入参数 "REQ" 的上升沿触发来建立连接. FB300的背景数据块中包含了带有连接参数的数据结构 UDT65 "TCON_PAR".FB65 "TCON"的输入参数"CONNECT"需要指定一个含有连接参数的存储区. 在系统启动时连接建立并保持,直到调用FB66 "TDISCON"结束连接,或CPU进入停止模式,或关闭电源.


图. 03: 调用FB65 "T_CON"

在 "FB63 "TSEND"的输入参数"REQ"上施加上升沿以触发发送请求.发送请求的触发是由时钟标志 M10.6 和变量"C1.SEND_BUSY"来控制的. 如果发送请求运行, "C1.SEND_BUSY" 则被置位.无法再触发新的发送请求. (见图. 05).
可以为输入参数"DATA"指定包含要发送数据的存储区.并在输入参数"LEN"填写要发送的字节数.输出参数"DONE", "ERROR" 和"STATUS"用于查询请求状态.


图. 04: 调用 FB63 "TSEND"

如果发送请求成功完成, "C1.SEND_BUSY" 被复位. 新的发送请求可以现在触发.

如果发送请求带错完成,那么 "C1.SEND_BUSY" 同样被复位,FB63的输出参数 "STATUS" 被保存用于错误分析.


图. 05: 上升沿触发发送请求/ 复位 "C1.SEND_BUSY"


图. 06: 保存FB63 "TSEND"的输出参数STATUS

只要TCP连接建立了,就能接收数据.为输入参数 "DATA" 指定接收到的数据存储的地址和长度.


图. 07: 调用FB64 "TRECV"

输出参数 "NDR"用于显示接收到新数据.输出参数 "LEN" 表明接收数据的长度.
如果数据未成功接收,那么输出参数 "STATUS" 被保存.


图. 08: 保存FB64 "TRECV"的输出参数STATUS

可以调用FB66 "TDISCON"结束 TCP 连接. 在 FB66 "TDISCON" 的输入参数上施加上升沿以请求结束 TCP 连接.


图. 09: 调用 FB66 "TDISCON"

1楼 0 0 回复