北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章530 浏览8075874

西门子博途S7-1200/1500通信库LCom的使用(1)——建立/断开连接

上一篇文章我们介绍了如何获取LCom通信库、如何将其添加到项目中及LCom库文件的介绍,其中详细介绍了函数块LCom_Communication的参数。今天这篇文章,我们主要介绍LCom的使用方法,包括怎样建立通信连接及怎样断开连接,这其中我们会介绍数据类型:typeLCom_Config。关于数据的发送和接收将在下一篇文章介绍。

本文包括两个主题:

  • 建立通信连接;

  • 断开通信连接;

cover.png

在介绍之前,我们先记住LCom_Communication的指令初始状态,如下图所示:

overview.png

1、建立通信连接

要想与通信伙伴建立连接,需要配置参数“configuration”,它的数据类型是LCom库的自定义类型:typeLCom_Config。为此,我们新创建一个全局数据块:DBLCom,在其中添加一个变量,名称为“LComConfiguration”,其数据类型设置为“typeLCom_Config”。如下图所示:

typeLCom_Configuration.png

可以看到,typeLCom_Config由三部分组成:connection、sender和timeSync,我们来分别介绍下:

1.1、typeLCom_Config的connection

connection的各元素的含义如下面的表格所示:

名称
数据类型
说明
interfaceID
HW_ANY
通信接口的硬件标识符
connectionID
CONN_ANY
通信连接的标识
comService
USInt
通信协议配置,详见注解①
isClient
BOOL
是否作为客户端,详见注解②
localPort
UInt
本地端口号
partnerPort
UInt
远程(通信伙伴)端口号
partnerIP
IP_V4
远程(通信伙伴)IP地址
acceptUnknownPartner
BOOL
是否接受未知对象的连接请求,详见注解③
lifeSignCycleTime
Time
心跳信号周期,详见注解④

注解①:上一篇文章我们介绍过,LCom通信库可用标准的开放式TCP通信协议,同时它又自定义了一个称为“LCom”的协议。我们在使用函数块时,通过参数comService来确定采用哪种通信协议。comService有两种取值:1=LCOM_TCP_CONNECTION,即使用开放式TCP通信协议;2=LCOM_LCOM_CONNECTION,即使用LCom协议;默认设置为后者。 

注解②:用来设置通信的角色。我们知道,TCP通信协议有两种角色:服务器(Server)和客户端(Client)。服务器总是被动等待连接,而客户端则主动进行连接。如果作为服务器,则只需要设置本地IP和端口号,上表中的参数partnerPort(通信伙伴端口号)和partnerIP(通信伙伴IP)可以不设置的;如果作为客户端,则需要主动连接服务器。因此,必须设置通信伙伴的端口号和IP地址(当然,本地的也要设置);

注解③:当IsClient设置为FALSE,即作为服务器的角色时,用来设置是否允许任何通信同伙的连接。默认为TRUE,即任何通信伙伴的连接请求都接受。如果设置为FALSE,则同时还需要设置“partnerIP”参数,这种情况下服务器仅接受该IP地址的通信连接请求;

注解④:仅在LCom协议下使用,用来设置心跳信号的周期。在LCom协议下,如果通信伙伴之间没有启动数据传输,则以该周期发送心跳信号,用于判断通信是否正常;

1.2、typeLCom_Config的sender

sender包括cycleTime和ackTimeout,具体含义见下面的表格:

名称
数据类型
说明
cycleTime
Time
用来设置发送数据的周期,详见注解⑤
ackTimeout
Time
用来设置超时时间,详见注解⑥

注解⑤:当启动数据发送后,通过该参数设置周期性发送数据的时间间隔。取值范围:T#0ms...T#24d20h31m23s647ms,默认T#1s;

注解⑥:该参数仅在LCom协议下使用,用来设置确认超时的时间。当在该时间内没有收到通信伙伴的确认信号,则关闭当前连接,并尝试重新建立连接;

关于数据发送我们将在下一篇文章详细介绍;

1.3、typeLCom_Config的timeSync

timeSync用来与通信伙伴进行时间同步,仅在LCom协议下使用。各元素的含义如下表所示:

名称
数据类型
说明
usePartnerTimestamps
Bool
是否使用接收到的时间戳同步本地时间,默认FALSE
sendMode
USInt
发送模式,详见注解⑦
cycleTime
Time
周期时间,详见注解⑧
sendAtTimeOfDay
Time_Of_Day
发送时钟,详见注解⑨

注解⑦:发送模式包括三种:

  • 0=LCOM_NO_TIME_SYNC,即不发送,这是默认设置;

  • 1=LCOM_CYCLE_TIME_SYNC,以周期性方式发送同步时间戳,同步周期在参数“cycleTime”中设置;

  • 2=LCOM_TIME_OF_DAY_TIME_SYNC,以时钟方式发送同步时间戳,时钟设置在参数“sendAtTimeOfDay”;

注解⑧:当发送模式设置为“1”(LCOM_CYCLE_TIME_SYNC)时,用来设置循环发送的周期,取值范围:T#1ms .. T#24d20h31m23s647ms,默认T#1s;

注解⑨:当发送模式设置为“2”(LCOM_TIME_OF_DAY_TIME_SYNC)时,用来设置发送的时钟,默认为:TOD#05:00:00.000;

到这里,我们详细介绍了configuration的结构。当参数已经正确配置好后,给“enable”参数一个上升沿,将会尝试与通信伙伴建立连接。此时“busy”输出位TRUE,表示正在建立连接;当成功建立连接后,“connected”变为TRUE;“status”的值也在不同的过程发生变化,如下图所示:

connect.png

如果使用LCom协议,不同版本(V1和V2)之间的第一次通信协商会发生错误,之后会从新建立连接,直至“connected”变为TRUE;

2、断开通信连接

“enable”参数的下降沿会将通信连接断开,“connected”变为“FALSE”,“busy”和“status”也会发生变化,如下图所示:

disconnect.png

好了,关于LCom通信库使用方法——建立/断开通信连接就先介绍到这里。

我的微信视频号分享一些工控小知识,欢迎扫描下面的二维码观看。

founderchip.png

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论