上一篇文章我们介绍了如何获取LCom通信库、如何将其添加到项目中及LCom库文件的介绍,其中详细介绍了函数块LCom_Communication的参数。今天这篇文章,我们主要介绍LCom的使用方法,包括怎样建立通信连接及怎样断开连接,这其中我们会介绍数据类型:typeLCom_Config。关于数据的发送和接收将在下一篇文章介绍。
本文包括两个主题:
- 建立通信连接;
- 断开通信连接;
在介绍之前,我们先记住LCom_Communication的指令初始状态,如下图所示:
1、建立通信连接
要想与通信伙伴建立连接,需要配置参数“configuration”,它的数据类型是LCom库的自定义类型:typeLCom_Config。为此,我们新创建一个全局数据块:DBLCom,在其中添加一个变量,名称为“LComConfiguration”,其数据类型设置为“typeLCom_Config”。如下图所示:
可以看到,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”的值也在不同的过程发生变化,如下图所示:
如果使用LCom协议,不同版本(V1和V2)之间的第一次通信协商会发生错误,之后会从新建立连接,直至“connected”变为TRUE;
2、断开通信连接
“enable”参数的下降沿会将通信连接断开,“connected”变为“FALSE”,“busy”和“status”也会发生变化,如下图所示:
好了,关于LCom通信库使用方法——建立/断开通信连接就先介绍到这里。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/133445.html