在西门子PLC的开放式以太网通信(Open User Communication)中,无论是使用TCP协议还是UDP协议,首先都需要使用函数TCON来建立连接。善于思考的小伙伴们肯定会提出一个问题:UDP协议不是面向非连接的协议吗?为什么还需要使用TCON来建立通信连接呢?今天这篇文章,我们就来回答这个问题。
我们把TCP协议和UDP协议做个对比,首先明确结论:TCP是面向连接的协议;UDP是面向非连接的协议。这里的“连接”,是指通信双方在协议层上建立的一条专用的数据传输通道。
TCP协议是有真实的数据传输通道的,它的执行跟打电话的过程很类似。一个人要想给另一个人打电话,首先要拨号,一旦对方接起电话,两人之间就建立了一条专用的通信信道。如果出现断线,则需要重新拨号,再次建立连接才能继续通话。TCP的传输过程也是类似的,通信的发起方必须和接收方建立连接,才能进行通信。一旦连接中断,则需要重新请求建立连接。TCP的传输具有确认机制,是可靠的、安全的。当然,相对慢些。
UDP协议则不同,它不需要在两个通信伙伴之间建立真实的通信信道,其执行过程跟写信很类似。寄信人将收信人的名称和地址写到信封上,然后把信投到邮箱。至于这封信是顺利到达收信人的手中还是在中途遗失了,它完全不管。UDP协议没有确认重传机制,不需要在通信伙伴之间建立通信连接,因此把它称作是“面向非连接”的协议。其优点是传输速度较快。
好了,那么问题来了。既然UDP是面向非连接的协议,为什么在西门子PLC的开放式以太网通信(Open User Communication)中,在使用UDP传输前,要调用TCON函数来建立“连接”?
其实,TCON函数即可用于TCP传输的连接,也可用于UDP传输的连接。用于TCP通信时,它是真实在通信伙伴之间建立连接;而用于UDP通信时,它只是用来配置通信的参数(比如,通信伙伴的IP地址和端口号)。用户程序通过调用TCON函数把UDP的通信参数交给PLC的操作系统,之后它就不管了。操作系统负责把这些信息以UDP报文的形式发送出去。因此,在UDP通信时,TCON函数是在用户程序和操作系统之间建立了“连接”,而不是与通信伙伴建立连接,此“连接”非彼“连接”。
下面这张图,是博途(Portal)环境下TCON函数的方框图:
好了,关于西门子PLC开放式以太网通信的连接函数TCON就介绍到这里,欢迎扫描下面的二维码关注我们的微信公众号。
发表评论
内容无法显示?
小程序内部Bug,已经修复,稍后试下。