请求动态均衡的串行PLC协议转换方法、装置及系统转让专利

申请号 : CN202010732259.0

文献号 : CN111857031B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 古欣邵慧焦岳王磊王斌

申请人 : 山东有人物联网股份有限公司

摘要 :

本公开提供了一种请求动态均衡的串行PLC协议转换方法、装置及系统,属于串行PLC协议转换技术领域,包括以下步骤,将每个请求端统一为客户端,根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分布的客户端请求进行串行PLC协议转换;本公开能够实现多主机有序请求,避免了请求和回复数据的混乱,可兼容多种PLC转换协议;同时对于多主机请求,可对数量和请求频次做动态规划,最大程度提高转换装置使用效率。

权利要求 :

1.一种请求动态均衡的串行PLC协议转换方法,其特征在于,包括以下步骤:将每个请求端统一为客户端;

根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分布的客户端请求进行串行PLC协议转换;

当客户端数量发生变化时,开始首次动态均衡调整,此时各个客户端权重相同,请求队列中所分配的对应客户端的请求数量相同;

首次分配完成后,每个请求和对应客户端具有映射关系,开始轮询请求列表,获取某一客户端请求缓冲区锁,如果数据有效,拷贝数据和数据长度并释放锁;

确认请求有效后将缓冲区更新标志置为假,并将请求命中次数加1,如果数据无效,缓冲区标志仍为假,将请求脱靶次数加1,直接跳过本次请求继续处理;

每个客户端有特定的任务更新数据缓冲区,如果收到某个客户端的请求数据,判断对应的数据缓冲区标志,如果标志为真,表示请求未来得及处理,此时旧的请求会失效,将客户端请求失效次数加1。

2.如权利要求1所述的请求动态均衡的串行PLC协议转换方法,其特征在于,根据客户端之间的权值的比例关系进行客户端请求的分配,权值高的客户端比权值低的客户端分配更多的请求节点,相同权值的客户端分配相同份额的请求。

3.如权利要求1所述的请求动态均衡的串行PLC协议转换方法,其特征在于,客户端的权值由加权因子生成,所述加权因子包括客户端请求频次和回复时序。

4.如权利要求1所述的请求动态均衡的串行PLC协议转换方法,其特征在于,某一客户端的权值占所有客户端的权值之和的比例与此客户端所分配的请求数量占当前请求队列中所能容纳的请求总数的比例相同。

5.如权利要求1所述的请求动态均衡的串行PLC协议转换方法,其特征在于,将所有串口设备和网口设备统一转换为客户端,客户端的关键信息至少包括缓冲区地址、缓冲区锁、缓冲区长度、数据更新标志、请求命中次数、请求脱靶次数、请求失效次数、客户端权重和请求处理方式。

6.如权利要求1所述的请求动态均衡的串行PLC协议转换方法,其特征在于,收到客户端请求后,首先尝试获取缓冲区锁,成功后更新缓冲区数据和请求帧长度,并置缓冲区更新标志为真;初始化客户端,将请求命中次数、请求脱靶次数和请求失效次数全部清零。

7.如权利要求1所述的请求动态均衡的串行PLC协议转换方法,其特征在于,经过至少一个时间周期后,开始进行动态均衡;

每个客户端的加权因子为此客户端的请求命中次数同两倍的请求失效次数的加和与请求脱靶次数的差值,得到每个客户端的加权因子后对所有加权因子进行排序并取中位客户端;

如果客户端个数为奇数,那么中位客户端的权重不发生变化,其它的按照顺序依次进行增大或者减小;

如果客户端数量为偶数,那么中位两个客户端的权重加1或者减1,以此类推,当所有客户端权重计算完毕后,依次计算出每个客户端分配的请求数量。

8.一种请求动态均衡的串行PLC协议转换系统,其特征在于,包括:请求端统一模块,被配置为:将每个请求端统一为客户端;

请求分配模块,被配置为:根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分布的客户端请求进行串行PLC协议转换;

当客户端数量发生变化时,开始首次动态均衡调整,此时各个客户端权重相同,请求队列中所分配的对应客户端的请求数量相同;

首次分配完成后,每个请求和对应客户端具有映射关系,开始轮询请求列表,获取某一客户端请求缓冲区锁,如果数据有效,拷贝数据和数据长度并释放锁;

确认请求有效后将缓冲区更新标志置为假,并将请求命中次数加1,如果数据无效,缓冲区标志仍为假,将请求脱靶次数加1,直接跳过本次请求继续处理;

每个客户端有特定的任务更新数据缓冲区,如果收到某个客户端的请求数据,判断对应的数据缓冲区标志,如果标志为真,表示请求未来得及处理,此时旧的请求会失效,将客户端请求失效次数加1。

9.一种计算机可读存储介质,其上存储有程序,其特征在于,该程序被处理器执行时实现如权利要求1‑7任一项所述的请求动态均衡的串行PLC协议转换方法中的步骤。

10.一种请求动态均衡的串行PLC协议转换装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如权利要求

1‑7任一项所述的请求动态均衡的串行PLC协议转换方法中的步骤。

说明书 :

请求动态均衡的串行PLC协议转换方法、装置及系统

技术领域

[0001] 本公开涉及串行PLC协议转换技术领域,特别涉及一种请求动态均衡的串行PLC协议转换方法、装置及系统。

背景技术

[0002] 本部分的陈述仅仅是提供了与本公开相关的背景技术,并不必然构成现有技术。
[0003] 工业设备正在加速智能化、信息化,其主要表现就是各种工业设备联网,设备数据上云,实现设备远程监控和大数据分析。特别是在传统工业控制领域,其主要控制器是PLC,
很多PLC的CPU是没有网口的,这就为传统工控行业的信息化带来困难。需要一种PLC串口协
议转换装置来把串口协议转换为网络协议并对PLC原采集串口进行扩展,既保证PLC入网又
不影响原串口采集功能。
[0004] 传统的PLC转换装置通常包含两个串口一个网口,其中一个串口接到PLC设备,另一个串口接收串口请求,网口端可以连接多个TCP/UDP客户端软件,如图1所示;串口请求和
网络请求经过具体协议转换后都会被汇集到PLC串口上进行处理。
[0005] 本公开发明人发现,传统的协议转换方法有以下几个缺点:
[0006] 第一,串口请求和多个网络请求产生冲突,容易造成请求数据混乱;
[0007] 第二,因PLC协议的多样性无法做到无差别兼容;
[0008] 第三,串口和TCP等请求的流式数据无边界特性导致请求缓冲区堆积多包请求,发送给PLC后造成回复超时;例如某些PLC的上位机软件在请求超时以后会连续发送多包请求
帧,这种情况下如果一旦某一帧请求超时会造成后续多包堆积错误而再也无法收到正常的
请求;
[0009] 第四,请求端软件请求频率或者回复超时判定不一致导致某些客户端无法及时满足响应请求,造成请求端软件体验变差。

发明内容

[0010] 为了解决现有技术的不足,本公开提供了请求动态均衡的串行PLC协议转换方法、装置及系统,能够实现多主机有序请求,避免了请求和回复数据的混乱,可兼容多种PLC转
换协议;对于多主机请求,可对数量和请求频次做动态规划,最大程度提高转换装置使用效
率。
[0011] 为了实现上述目的,本公开采用如下技术方案:
[0012] 本公开第一方面提供了一种请求动态均衡的串行PLC协议转换方法。
[0013] 一种请求动态均衡的串行PLC协议转换方法,包括以下步骤:
[0014] 将每个请求端统一为客户端;
[0015] 根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分布的客户端请求进行串行
PLC协议转换。
[0016] 本公开第二方面提供一种请求动态均衡的串行PLC协议转换系统。
[0017] 一种请求动态均衡的串行PLC协议转换系统,包括:
[0018] 请求端统一模块,被配置为:将每个请求端统一为客户端;
[0019] 请求分配模块,被配置为:根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分
布的客户端请求进行串行PLC协议转换。
[0020] 本公开第三方面提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开第一方面所述的请求动态均衡的串行PLC协议转换方法中的步
骤。
[0021] 本公开第四方面提供了一种请求动态均衡的串行PLC协议转换装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如
本公开第一方面所述的请求动态均衡的串行PLC协议转换方法中的步骤。
[0022] 与现有技术相比,本公开的有益效果是:
[0023] 1、本公开提供的方法、系统、介质及装置,可实现多主机有序请求,避免请求和回复数据混乱,可兼容多种PLC转换协议;对于多主机请求,可对数量和请求频次做动态规划,
最大程度提高了转换装置使用效率。
[0024] 2、本公开提供的方法、系统、介质及装置,请求队列针对每种类型的客户端映射的请求不再是一个,而是根据每个客户端权值大小分配不同数量的请求,再将所有的请求随
机分布,减少了客户端软件的请求超时,提升客户端体验同时也增强了整个装置系统的稳
定性。
[0025] 3、本公开提供的方法、系统、介质及装置,根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,权值高的客户端比权值低的客户端分配更多的请求节
点,相同权值的客户端分配相同份额的请求,最终生成请求结果不是固定的,定时根据客户
端软件的变化及外接PLC的改变而动态调整,可最大限度保证各客户端的请求命中。

附图说明

[0026] 构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
[0027] 图1为本公开背景技术中提供的协议转换典型应用场景。
[0028] 图2为本公开实施例1提供的轮询处理模型的示意图。
[0029] 图3为本公开实施例1提供的动态均衡后处理模型示意图。

具体实施方式

[0030] 下面结合附图与实施例对本公开作进一步说明。
[0031] 应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常
理解的相同含义。
[0032] 需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式
也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包
括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0033] 在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
[0034] 实施例1:
[0035] 如背景技术所述,在实际的产品应用场景中,协议转换装置一个串口接PLC设备,另一个串口通常接各类HMI设备,而网口端则可连接若干TCP/UDP客户端软件,如图1所示。
[0036] 串口2的PLC设备不支持并行访问,而且每一个请求必须完整处理完毕后才能继续处理下一个请求,尤其是针对某些多问多答的设备,一旦请求被中途打断,就会造成多个请
求的数据流混乱;并且,针对每个请求端装置内部处理逻辑差异也较大,比如串口和网络的
逻辑处理。
[0037] 对此,本实施例将整个请求模型进行转换,所有的主机端统一定义为客户端,包括HMI设备,而PLC设备定义为服务端;所有客户端的请求进入统一的请求队列,然后轮询此队
列依次处理每一个客户端的请求,每个客户端请求处理过程是原子操作,此过程会独占PLC
串口;并且,针对不同的PLC协议,抽象不同的协议转换方法,而客户端绑定各自的处理方
法,在处理方法中再调用协议相关的处理方法即可做到兼容各种PLC协议,于是整个处理模
型变为图2所示。
[0038] 其次,对于数据包堆积问题,每个客户端绑定独立的数据缓冲区,这块缓冲区的特点是不进行数据保存,收到客户端的请求后立刻冲刷掉原来数据,保证数据缓冲区中只保
留最新的请求,这样可保证请求队列在处理某个客户端请求时候不会收到堆积请求包,而
被冲刷掉旧的请求做自然丢弃,可保证请求端即使短暂请求失败后也能快速恢复正常。以
上冲刷掉旧数据的方法下称自然冲刷。
[0039] 如果轮询请求队列某个客户端的请求时客户端对应的数据缓冲区有效,称为请求命中,此时可直接对客户端请求做处理。如果请求时客户端数据缓冲区请求无效,即请求缓
冲区没有更新,称为请求脱靶,那么此次轮询对当前客户端来说视为无效轮询。如果客户端
请求被上述步骤做了自然冲刷,称为请求失效,相当于客户端有请求到达但是没有机会处
理。
[0040] 以上模型中请求队列的处理采用是最简单的轮询方法,每个客户端的请求都是无差别同频的,这就导致如果请求频次高、请求和回复时序短的某些客户端软件或者设备大
概率会发生请求脱靶或者请求失效,虽然通过客户端自然冲刷动作可以避免装置失效,但
是会导致客户端体验变差,甚至会出现假死等现象。
[0041] 因此,本实施例中,针对队列请求处理使用加权轮询调度算法,用相应的权值代表客户端的请求频次和响应速度。该方法根据客户端权值的高低顺序并按照轮询方式将节点
请求分配到请求队列,权值高的客户端比权值低的客户端分配更多的请求节点,相同权值
的客户端分配相同份额的请求。此方法最终生成请求结果不是固定的,会定时根据客户端
软件的变化及外接PLC的改变而动态调整。
[0042] 假设装置客户端承载极限值为n,那么队列集群中所有客户端记做{N0,N1,N2,...,Nn‑1},加权因子由客户端请求频次Fi和回复时序Ti两部分组成,由加权因子生成的W(Ni)表
示客户端Ni的权值,T(Ni)表示客户端Ni所分配的请求数量。∑W(Ni)表示客户端权值总和,
∑T(Ni)表示当前请求队列中所能容纳的请求总数,则:
[0043] W(Ni)/∑W(Ni)=T(Ni)/∑T(Ni)   (1)
[0044] 根据以上规则,得到请求队列中每个客户端的请求数量,得到初步请求序列,例如{N0,N0,N1,N1,N1,N2,N2,N3,N3,N3,N3,N4,N4,N4},但是这是一种不均匀的分配方法,虽然增加
了权值大的客户端的请求数量,但是由于请求集中性仍会导致请求脱靶。
[0045] 所以最后再利用线性同余法对所有的客户端请求做随机分布,得到最终的请求序列例如{N3,N4,N1,N2,N0,N1,N2,N3,N4,N3,N4,N1,N3,N0},根据此动态均衡请求算法生成的请求
序列可最大限度保证各客户端的请求命中。
[0046] 根据以上方法,最终协议转换装置模型如图3所示,请求队列针对每种类型的客户端映射的请求不再是一个,而是根据每个客户端权值大小分配不同数量的请求,再将所有
的请求随机分布。
[0047] 例如,图中MODBUS‑TCP和FINS‑UDP对应的客户端请求PLC的频率较高,或者请求超时后重发频次高,那么就会导致下一轮动态均衡调整过程中请求队列中这两个客户端对应
的请求数量增多,调整过后的请求队列对请求频次较低的HMI几乎没有影响,但是大大提高
的请求频次高的MODBUS‑TCP和FINS‑UDP的请求命中,从而减少了客户端软件的请求超时,
提升客户端体验同时也增强了整个装置系统的稳定性。图中同一个客户端请求需要共享数
据缓冲区。
[0048] 本实施例提供的请求动态均衡的串行PLC协议转换方法,详细步骤为:
[0049] S1:请求模型转换,将串口设备、网口设备统一转换为客户端实体Ci;实体关键信息包括缓冲区地址、缓冲区锁、缓冲区长度、数据更新标志、请求命中次数、请求脱靶次数、
请求失效次数、客户端权重和请求处理方法,收到客户端请求后,首先尝试获取缓冲区锁,
成功后更新缓冲区数据和请求帧长度,并置缓冲区更新标志为真。
[0050] S2:初始化客户端时,需要将请求命中次数Oi、请求脱靶次数Mi、请求失效次数Ii全部清零。
[0051] 记初始化客户端总数为n,请求队列总数∑T(Ni)和n的关系为:
[0052]
[0053] 装换装置通常支持客户端个数不会超过50,每个客户端的初始权重:
[0054] W(Ni)=∑T(Ni)/n   (3)
[0055] 在动态均衡调整过程中权值变化范围为:
[0056] 1≤W(Ni)≤∑T(Ni)   (4)
[0057] S3:客户端数量发生变化时,开始首次动态均衡调整;此时所有的客户端权重W(Ni)是相同的,所以请求队列中所分配的对应客户端的请求数量T(Ni)也是相同的。首次分
配完成后,每个请求和对应客户端做好映射关系,开始轮询请求列表,首先获取客户端Ni请
求缓冲区锁,如果数据有效,那么立刻拷贝数据和数据长度并释放锁。这样可防止新的请求
到来获取不到锁而导致请求数据无法更新。确认请求有效后将缓冲区更新标志置为假,并
增大请求命中次数:Oi=Oi+1,然后调用处理客户端绑定的处理方法即可;如果数据无效,即
缓冲区标志仍为假,那么增大请求脱靶次数:Mi=Mi+1,直接跳过本次请求继续处理。
[0058] S4:每个客户端会有特定的任务更新数据缓冲区,如果收到某个客户端的请求数据,判断对应的数据缓冲区标志,如果标志为真,表示请求未来得及处理,此时旧的请求会
失效,需要更新客户端请求失效标志:Ii=Ii+1。
[0059] S5:经过一个时间周期T后,开始进行动态均衡,首先每个客户端的加权因子Pi计算方式为:
[0060] Pi=Oi+2Ii‑Mi   (5)
[0061] 计算出每个客户端的Pi后对所有加权因子进行排序并取中位客户端,如果客户端个数为奇数,那么中位客户端的权重W(Ni)不发生变化,其它的按照顺序依次进行增大或者
减小。
[0062] 比如某个客户端Pi排名比中位高2,那么此客户端的权重W(Ni)=W(Ni)+2,以此类推。如果客户端数量为偶数,那么中位两个客户端的权重+1或者‑1,以此类推。
[0063] 所有客户端权重计算完毕后,根据公式(1),依次计算出每个客户端分配的请求数量。
[0064] S6:经过上述步骤得到每个客户端请求数量后,就可以生成首次动态均衡后的初始请求队列。但是此时队列各客户端请求仍是一种不均匀的分配方法,再利用线性同余法
对队列请求做随机分布,即可得到最终的请求队列。
[0065] S7:客户端接入或者退出时候重复步骤S1~S6,时间周期T后重复步骤S2~S6,一段时间后即可得到稳定的最优的请求队列,极大提高客户端请求命中率,提升客户端软件
体验。
[0066] 实施例2:
[0067] 本公开实施例2提供了一种请求动态均衡的串行PLC协议转换系统,包括:
[0068] 请求端统一模块,被配置为:将每个请求端统一为客户端;
[0069] 请求分配模块,被配置为:根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分
布的客户端请求进行串行PLC协议转换。
[0070] 所述系统的工作方法与实施例1提供的请求动态均衡的串行PLC协议转换方法相同,这里不再赘述。
[0071] 实施例3:
[0072] 本公开实施例3提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开实施例1所述的请求动态均衡的串行PLC协议转换方法中的步骤,所
述步骤为:
[0073] 将每个请求端统一为客户端;
[0074] 根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分布的客户端请求进行串行
PLC协议转换。
[0075] 详细步骤与实施例1提供的请求动态均衡的串行PLC协议转换方法相同,这里不再赘述。
[0076] 实施例4:
[0077] 本公开实施例4提供了一种请求动态均衡的串行PLC协议转换装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如
本公开实施例1所述的请求动态均衡的串行PLC协议转换方法中的步骤,所述步骤为:
[0078] 将每个请求端统一为客户端;
[0079] 根据客户端权值的高低顺序并按照轮询方式将节点请求分配到请求队列,利用线性同余法对请求队列中的客户端请求做随机分布,根据随机分布的客户端请求进行串行
PLC协议转换。
[0080] 详细步骤与实施例1提供的请求动态均衡的串行PLC协议转换方法相同,这里不再赘述。
[0081] 本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形
式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储
介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0082] 本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流
程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实
现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0083] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
[0084] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一
个方框或多个方框中指定的功能的步骤。
[0085] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质
中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁
碟、光盘、只读存储记忆体(Read‑Only Memory,ROM)或随机存储记忆体(Random 
AccessMemory,RAM)等。
[0086] 以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修
改、等同替换、改进等,均应包含在本公开的保护范围之内。