[西门子/博途]关于FC5/50,FC6/60的一些经验坑

news/2024/11/24 6:49:15/

首先简单了解一下AG_SEND/AG_LSEND,AG_RECV/AG_LRECV(AG_SSEND我没用过,不做解释)

首先AG_SEND****和TSEND不一样,这是一个硬限制。

AG_SEND用于CP组态,而TSEND/TRCV适用于局域网内通讯(同网段)本次主要介绍CP组态的方式。

AG_SEND/AG_LSEND/AG_SSEND用于发送消息,一般发送指针,如下图:

上图中,ACT检测到上升沿后,会调用AG_SEND发送SEND管脚所指定的区域起,LEN管脚58个BYTE。

发送完成后DONE管脚会置1一个扫描周期,ERROR管脚与STATUS管脚显示块的状态信息。

其中ID与LADDR来源于组态中的地址,如下图:

AG_RECV\AG_LRECV\AG_SRECV用于接收数据,用法如下:

我们发现AG_LRECV没有ACT管脚,所以,只要EN使能来,此块每个扫描周期都会接收数据。

接收完成后LEN管脚会持续显示一个扫描周期的长度。

接收的数据将按顺序放到RECV管脚所指向的区域。

ID与LADDR管脚来源于组态。 

一个表格解释功能:

以下图片介绍了在S7-300/400中CP通讯块的可用性。(帮助中说S7400无法使用AG_RECV,不知为何我却使用正常。)

 

以下图片介绍了在S7-300/400中CP通讯块所能通讯的字节数

好了,大概能了解,我们先说怎么用!

此系列块共包含三个基本块。AG_CNTEX、AG_SEND、AG_RECV。

根据不同情况可以延伸出AG_LSEND\AG_LRECV\AG_SSEND\AG_SRECV……

先说AG_CNTEX:

用于进行连接诊断的指令

下面是官方给的一个指令,这里我最多用到的就是重连,重连的方式就是

ACT置位,CMD管脚写6,断开连接后,等待一秒钟写7,然后CMD写0,复位ACT

更多指令请查看编程器帮助。 

我的设备信息如下:

Ps1:关于字节发送长度的问题。

通过表格可以看到AG_SEND在S7-400中可以发送最长240个BYTE。所以,超过240个BYTE时我们就要使用AG_LSEND,在使用的过程中,当使用AG_LSEND发送数据时,字节长度小于241时无法发送成功,后来交流可能是因为CP版本问题,所以将所有的字节长度最小长度为241BYTE,可以正常发送。

上图中,我通过上升沿制定了LEN管脚,发送的区域为2900BYTE,只取LEN来发送时,必须设置大于241BYTE及以上

由于我发送的字节数长且多变,其中长字节为周期性发送,所以需要通过时钟或者计数器将发送时机间隔开来(AG_SSEND可以大大提高发送效率,但是我正好是1453个字节,白搭了。)

或者,使用DONE信号来复位,如果报文触发条件多,写起来也会比较复杂,暂时没有想到更好的写法,只能通过联锁来保证数据不冲突。

如果不间隔,可能会导致重发或者粘包,会很麻烦,我发送的字节长度在2000BYTE左右,仍然建议时间间隔在4秒左右。

比如下图

Ps2:关于接收的问题。

官方帮助文档说S7400无法在TCP连接上使用AG_RECV接收数据,不知为何我可以正常使用的,但以后尽量避开使用,有一个特别难受的问题我也是踩坑得出。

譬如:使用AG_RECV接收的数据接收到一个DB区域,譬如我接收到

P#DB2050.DBX3540.0 BYTE 58

如果我收到的数据是60位,怎么办?当然这得提前做好,不能够接收区域比字节长度短吧!

如果我收到的数据是1位呢,那你整个数据区域全都是这一位。

如果是两位,会自然填充,直到填满。所以,有两种解决方案:

一、接收到数据立刻转移并清空该区域数据。

二、保证数据长度一致。

AG_SEND/AG_RECV系列指令使用至此算是完成。更多坑仍需摸索。

如有错误欢迎指正。


http://www.ppmy.cn/news/624068.html

相关文章

plc通讯块FC5、FC6

FC5(AG——SEND)块既可以用于PROFIBUS FDL(现场总线数据链路层通信协议)(发送数据到PROFIBUS,用于在一个已经组态的FDL连接上进行数据传输),也可以将数据传送到以太网CP上&#xff0…

牛客·矩阵取数游戏

矩阵取数游戏 这里我们推一下这个题的精髓: dp[i][j]max(int(b[c][i])dp[i1][j],dp[i][j-1]int(b[c][j])) dp[i][j]2*dp[i][j]假定某一行有两个数x,y; 那么我们有两种选择: 先拿x,再拿y:x*2y*4; 先拿y,再…

oracle查看当前实例与切换实例

查看实例 select name from v$database;切换实例 sqlplus /ORCL as sysdba

dosBox下运行32位游戏zork anthology

使用DosBox运行zork zork下载链接: zork 64位电脑无法正常运行需要运用到DocBox软件 dosbox下载链接dosbox 安装之后仅需将exe文件拖入该图标即可运行! 运行如下

十年前的32位笔记本使用平铺桌面管理工具i3跑得飞快

十年前的32位笔记本使用平铺桌面管理工具i3跑得飞快 旧笔记本 家里有一台配置很低的笔记本,买了已经有将近十年了。 cpu还是32位的。系统目前安装的是manjaro32,目前这个系统已经不支持更新了。桌面管理系统用的i3。 这台电脑目前能够胜任我日常的以下…

在小米、三星等系统应用图标上显示badge

开始 大家经常看见在小米或者三星系统上,应用会把应用的消息数量想苹果手机一样显示在右上角,其实这种消息提示的方法在原生Android上是不支持的,原生的launcher在图标上没有显示徽标的view。 但是小米、三星、华为、联想、索尼等手机厂商都没…

敲代码还是得用新电脑,免费送一台2020最新款笔记本电脑

最近有粉丝留言让我多搞些抽奖活动,为了感谢大家对本公众号的大力支持本次联合了9个号主,送2020最新款DERE R9 pro笔记本,祝所有人新的一年工作顺利,工资芝麻开花节节高,希望本次抽奖可以给你带来好运。生活不易&#…

【回馈粉丝】小米平板电脑免费送!!!

为了感谢所有小伙伴长期以来的支持和信任,12寸的小米平板电脑,免费送给你们 赠送规则 本次活动联合了其他几个知名号主一起赞助,共同送小米平板 ,点击下面每个公众号卡片回复 平板 获得一张 助力券,扫描助力券&#xf…