本篇是PTP系列的第三篇。
管理通讯对话的机制包括许多种,比如事件触发,轮询等。本篇探讨比较常见的轮询机制。
本篇的许多内容会提到AA。这是PTP系列的上一篇《PTP系列之二,通讯中的AA》,连接地址:
https://www.ad.siemens.com.cn/club/bbs/PostStory_1963999_80.html#anch
轮询机制是在AA的上一层(关于通讯编程的分层,我们下一篇简单讨论一下),是建立在AA基础上的。为什么这么说呢?轮询的最重要目的就是要保证在一个时期内,只有一个AA在占用端口(如果是PTP的话,那就是占用PTP口。)在AA篇中我们知道,用连锁信号来避免同时有多个AA同时占用端口。在轮询层,也要有避免多个AA同时占用端口的机制。这是轮询机制的一个作用。
轮询机制的另一个作用是使得多个AA对话平等地都可以获得端口的占用权,以便实现所有AA的功能。
我们举个例子。这个例子很简单,2个变频分子泵USS通讯。用RS485通讯,一个泵的地址是0,另一个泵的地址是1。这2个泵通讯时间占比要求是1:1。这种情况用轮询就可以了。本例子中没有用SIEMENS库中给的USS通讯块,而是自己创建的多个块协调工作实现通讯。

图 1

图 2
这2个泵轮询的块都是“Polling+AA”(下文称“块”)。每个块管理一个USS泵。块内调用了上一篇中所讲的AA功能块,同时这个块还负责轮询。
在这个例子中轮询的工作机制是这样的。每个块引脚定义了本块的轮询号码(PollingNo_This)。当系统的轮询号码(在块的引脚PollingNo_Current)等于本块定义的轮询号码时,本块拥有对通讯端口的使用权,那么本块可以发送和接收通讯数据用以控制相应地址的变频泵。当对泵完成读取和写数据后,那么本块会将下一个轮询的块(PollingNo_Next)赋值给 PollingNo_Current,以此交出对端口的控制权,而拥有下一个轮询号码的块得到端口的控制权,可以向通讯端口收发数据。这就完成了一次端口占用权的移交。移交过程反复上演,这样就轮询起来了。每个泵都可以得到有效的监控。
总结一下,轮询机制实现了通讯中最常用的“分时复用”的原则,分时复用的是通讯端口。
上文提到的轮询中,每个被控对象被轮询到的机会平等。还有一种需求就是轮询的机会要求不平均。此时可以创建一个轮询号码管理FB,并根据要求创建一个轮询表。这个表中可以任意填写轮询号码。每次“Polling+AA”块完成控制后,由轮询管理块给出下一个轮询号码。这样就实现了非平均轮询。
有关轮询就先探讨到这里。如果各位同行对本篇所探讨的内容有什么疑问,请留言。我会尽量解答。
如果各位同行需要本例的例程,请留言。我会在本PTP系列结束时将例程发给各位。
如果各位同行觉得本篇有帮助,请点击“有帮助”。非常感谢。如果您希望了解通讯或者其他领域的有关主题,也可以给我留言。