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

西门子博途S7-1200/1500通信库LCom的使用(2)——发送/接收数据

前一篇文章我们介绍了LCom通信库如何建立通信连接及如何断开连接,详细介绍了用于配置通信参数的typeLCom_Config数据类型。今天这篇文章,我们来介绍下如何发送数据及如何接收数据。

cover.jpg

在介绍发送和接收数据之前,我们还是先记住LCom_Communication的指令初始状态,如下图所示:

overview.png

1、数据发送

当成功与通信伙伴建立通信连接之后,就可以开始发送或接收数据了。

在发送数据之前,我们要先设置两个参数:

①通过参数“sendDataLength”来设置发送数据的长度,以字节为单位;

②通过参数“sendBuffer”来设置要发送数据的缓冲区。数据发送缓冲区是字节类型的数组;

如果数据发送缓冲区小于sendDataLength设置的长度,则发送数据的长度将被限制到缓存区的大小,同时状态字“status”输出16#7600;

“send”参数的上升沿信号会启动发送任务。

在发送过程中,输出参数“sending”变为“TRUE”,表示正在发送数据;发送完成后“sending”变为FALSE,如下图所示:

sending_single.png

一般情况下,数据的发送是周期性的。

可以通过参数typeLCom_Config.sender的cycleTime来配置循环发送的周期,默认为1秒。当cycleTime=0时,表示不周期性发送(仅发送一次)。

在数据的发送过程中(即sending=TRUE时),用户不能修改发送缓冲区的数据。因此,程序中修改发送缓冲区的条件最好配合sending值一起,并且建议循环发送的周期不要太短;

数据循环发送时各参数的状态如下图所示:

sending_cyclic.png

2、数据接收

关于数据接收的两个参数:readDataLength和receiveBuffer。

①参数“readDataLength”用来设置接收数据的长度,以字节为单位,它能在很大程度上影响数据接收的行为,我们将详细介绍;

②参数“receiveBuffer”用来设置接收数据的缓冲区,它是一个字节数组;

2.1、采用标准TCP通信协议

参数“readDataLength”可以有三种不同情况的设置:

  • readDataLength=0。这种情况下,收到的数据存放在TCP接收缓冲区,但函数块LCom_Communication不从缓冲区读取任何数据。放在缓冲区的数据会被覆盖丢失;

  • 16#FFFF FFFF >readDataLength≥1。这种情况下,当TCP接收缓冲区的数据长度大于等于readDataLength设置的值时,函数块从TCP接收缓冲区读取readDataLength个字节的数据;如果发送数据的长度不是readDataLength的倍数,会有一部分数据滞留在TCP接收缓冲区;

  • readDataLength=16#FFFF FFFF。这是默认情况,TCP接收缓冲区的数据会立刻被全部读取;

无论哪种情况,只要数据读取后,都会将输出参数dataReceived设置为TRUE并保持一个扫描周期, receivedDataLength输出为读取的字节长度。

2.2、采用LCom通信协议

参数“readDataLength”分两种情况:

  • readDataLength=0,不接收数据,与上述类似;

  • readDataLength取值在1~16#FFFF FFFF,数据读取不受该值影响;

好了,关于LCom通信库的内容介绍就先到这里了。后续我们使用该通信库进行实际通信演示。

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

founderchip.png

取消

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

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

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

发表评论