一种数据分享的方法、装置及系统与流程

文档序号:28811250发布日期:2022-02-09 04:08阅读:85来源:国知局
一种数据分享的方法、装置及系统与流程

1.本发明涉及数据处理领域,更具体的,涉及一种plc侧和上位系统侧数据共享的方法、装置及系统。


背景技术:

2.在某些特殊自动化场景中,需要将plc采集的外部数据和自身产生的数据传送至上位系统中,以供上位系统中的应用程序进行数据的使用,例如对数据进行分析、存储、显示、转发等。目前通常是将plc通过例如opc ua,modbus等通信协议与上位机连接,基于这些通信协议进行数据的传送共享;基于该种通信协议的数据传送、共享方式,由于需要对数据进行打包、解包等操作,效率较低,而plc采集的外部实时数据和自身产生的数据变化非常快,因此容易产生数据堆积,最终会导致数据丢弃、覆盖等。


技术实现要素:

3.有鉴于此,本发明提出了一种数据共享方法用以解决以上问题。
4.根据本发明的第一方面,本发明提供一种数据共享方法,包括:
5.在plc侧对快速数据进行预处理,并将预处理后的快速数据存储于所述plc侧的第一缓存区;
6.将存储于所述第一缓存区的所述快速数据发送至上位系统;
7.将接收的所述快速数据写入所述上位系统的共享内存中;
8.所述上位系统中预配置的一个或多个用程序从所述共享内存中读取所述快速数据。
9.基于上述实施例的数据共享方法,在plc侧设置一级缓存,在上位系统中设置二级缓存,实现plc侧和上位系统之间无协议共享存储区域,减小了通信开销,提高了通信效率,提高了吞吐量,且避免了短时的通信中断导致的数据不连续。
10.进一步的,基于一中间程序将存储于所述第一缓存区的所述快速数据发送至上位系统,以及基于所述中间程序将接收的所述快速数据写入所述上位系统的共享内存中。
11.通过在plc侧和上位系统侧分别设置中间程序,并基于该中间程序实现plc侧和上位系统侧的数据共享,无需通过工业通信协议,提高了数据传送和数据接收的效率。
12.进一步的,所述将接收的所述快速数据写入所述上位系统的共享内存中的步骤包括:
13.获取写信号量;
14.判断上一次写入位置的所述快速数据是否已被全部的所述预配置应用程序读取,
15.如果已被全部的所述预配置应用程序读取,则从所述共享内存的起始位置开始写入数据;
16.如果未被全部的所述预配置应用程序读取,则从所述上一次写入位置的下一个位置开始写入所述数据。
17.基于以上步骤,在进行写操作时,只写入当前接收的本次plc侧发来的数据包到共享内存中,在进行读操作时,一次读取共享内存中所有未读取的数据,因此每一次进行写操作时,只需从上次写操作的位置进行判断,并根据判断结果决定是从共享内存起始位置开始写还是从下一个位置开始写,能够提高写操作的效率。
18.进一步的,所述上位系统中预配置的一个或多个应用程序从所述共享内存区域中读取所述快速数据的步骤,进一步包括:
19.获取读信号量;
20.检测上一次写入位置及其前面的所有位置中的所述快速数据是否已被所述预配置应用程序读取,
21.若已被所述预配置应用程序读取,则释放所述读信号量;
22.若未被所述预配置应用程序读取,则所述预配置应用程序对当前未被读取位置及其前面的所有位置中的所述快速数据进行读取,且在所述上一次写入位置及其前面的所有位置中的存储数据已被所述预配置应用程序读取后释放所述读取信号量。
23.基于以上步骤,只需从上次写入位置开始判断前面的所有数据是否已被该应用程序进行了读取,如果在该次读操作前已完成了读取直接释放读信号量,如果之前未进行读取则需要对其前面所有位置的数据进行读取,因此,提高了读取操作的效率。
24.进一步的,通过查询所述共享内存中维护的应用数据状态表判断所述共享内存中的所述快速数据是否被所述预配置应用程序读取,其中,所述应用数据状态表的各行依次对应于所述共享内存从起始位置开始被分成的不同块,所述列对应于所述上位系统中预配置的应用程序,所述应用数据状态表的每一单元格设置有状态值,所述状态值表征所述单元格对应的预配置应用程序对所述单元格对应的所述共享内存的块中的快速数据是否已读取,所述状态值包括“已读取”和“未读取”。
25.通过设置应用数据状态表,并通过该表中单元格的状态值记录应用程序对于某一个共享内存的块的数据的读取情况,方便在进行读写前进行判断,提高数据读取写入的效率。
26.进一步的,设置偏移量m,所述偏移量m表征指向所述应用数据状态表第m+1行。
27.通过采用偏移量m对应应用数据状态表中的行,进而对应共享内存的块的位置,方便记录操作的位置。
28.进一步的,所述上位系统将接收的所述快速数据写入所述共享内存中的步骤中,进一步包括:
29.获取上一次写入时的偏移量m;
30.判断所述应用数据状态表中第m+1行的所有单元格的状态值,当第m+1行的所有单元格的状态值都为“已读取”时,
31.将接收的所述快速数据存入所述共享内存的起始位置的块,并修改偏移位置m=0,修改所述应用数据状态表的所有单元格的状态值为“未读取”,释放所述写信号量。
32.进一步的,所述上位系统将接收的所述快速数据写入共享内存中的步骤中,进一步包括:
33.获取上一次写入时的偏移量m;
34.判断所述应用数据状态表中第m+1行的所有单元格的状态值,当第m+1行的所有单
元格的状态值存在“未读取”时,
35.判断偏移量m是否大于所述应用状态数据表的行数-1,
36.如果不大于,则修改m=m+1,将接收的所述快速数据存入到修改后的所述偏移量m指向的行对应的所述共享内存的块中,并将当前所述偏移量m指向的行的所有单元格的状态值设置为“未读取”,释放所述写信号量。
37.基于以上步骤,需要写入时,首先判断共享内存中的数据是否已经被所有的应用程序读取,如果未被所有预配置的应用程序读取,则不可以覆盖存储的数据,需要在上一次写入位置后继续写入,只有共享内存中的数据已经被所有的应用程序读取时,才可以重新写入新数据,以此避免将未读取数据进行覆盖,进而影响未读取该数据的应用程序的数据连续性;在判断时,基于偏移量m来进行位置的记录,方便、高效。
38.进一步的,所述上位系统中预配置的一个或多个用程序从所述共享内存中读取所述快速数据的步骤中,进一步包括:
39.获取上一次写入时的偏移量m;
40.获取所述预配置应用程序所在的列数n;
41.查看并判断所述应用数据状态表中第m+1行第n列的单元格的状态值是否为“已读取”,如果为“已读取”,则修改偏移量m=m-1;
42.重复执行上述步骤,直到确认所述应用数据状态表的第n列从所述上一次写入时对应的行到第一行的状态值都是“已读取”后,释放所述读信号量。
43.进一步的,所述上位系统中预配置的一个或多个用程序从所述共享内存中读取所述快速数据的步骤中,进一步包括:
44.获取上一次写入位置时偏移量m;
45.获取所述预配置应用程序所在的列数n;
46.查看并判断所述应用数据状态表中第m+1行第n列的状态值是否为“已读取”,
47.如果为“未读取”,则对当前第m+1行对应的所述共享内存的块的所述快速数据进行读取,并修改所述第m+1第n列单元格的状态值为“已读取”,修改偏移量m=m-1;
48.重复执行上述步骤,直到确认所述应用数据状态表的第n列从所述上一次写入时对应的行到第一行的状态值都是“已读取”后,释放所述读信号量。
49.基于以上步骤的方法,在应用程序需要对共享内存进行读取时,判断上次写入位置之前的所有数据是否被读取,如果已经全部被读取,则释放读信号量,以进行下一轮的写操作;如果未被全部读取,则依次读取,并将上次写入位置和其之前位置的所有数据都进行读取;在判断时,基于偏移量m来进行位置的记录,方便、高效。
50.根据本发明的第二方面,本发明还提供一种数据共享装置,包括:
51.预处理模块,所述预处理模块用于在plc侧对快速数据进行预处理,并将预处理后的快速数据存储于所述plc侧的第一缓存区;
52.数据发送模块,所述数据发送模块将存储于所述第一缓存区的快速数据上传至上位系统;
53.数据写入模块,所述数据写入模块将接收的所述快速数据写入所述上位系统的共享内存中;
54.数据读取模块,所述数据读取模块用于使所述上位系统中预配置的一个或多个用
程序从所述共享内存中读取所述快速数据。
55.基于该数据共享装置实现数据在plc侧和上位系统之间的共享,减小了使用工业通信协议来进行两者之间的数据共享带来的通信开销,提高了通信效率,提高了吞吐量,且避免了短时的通信中断导致的数据不连续。
56.根据本发明的第三方面,本发明还提供一种数据共享系统,包括:
57.一软plc,所述软plc部署于一硬件平台中,且为所述软plc分配第一缓存区;
58.一windows上位系统,所述windows上位系统与所述软plc部署于同一硬件平台中,为所述windows上位系统分配共享内存,所述windows上位系统上预配置有一个或多个可访问所述共享内存的应用程序;
59.一数据共享装置,所述数据共享装置部署于所述硬件平台上,用于实现所述软plc与所述windows上位系统之间的数据共享;
60.外部数据源设备,所述外部数据源设备与所述硬件平台连接,为所述软plc提供快速数据。
61.基于上述实施例的共享数据系统,一机集成软plc与上位windows系统,在同一硬件平台上实现数据在软plc和上位windows系统之间的共享,避免了使用工业通信协议来进行两者之间的数据交换造成的效率低下;同时在两侧各设置缓存,使得多个应用程序对快速数据的读取更有保障,不容易发生漏数据、错数据等问题。
62.进一步的,所述数据共享装置进一步包括预处理模块、数据发送模块、数据写入模块以及数据读取模块,其中,所述预处理模块用于在plc侧对快速数据进行预处理,并将预处理后的快速数据存储于所述plc侧的第一缓存区;所述数据发送模块将存储于所述第一缓存区的快速数据上传至上位系统;所述数据写入模块将接收的所述快速数据写入所述上位系统的共享内存中;所述数据读取模块用于使所述上位系统中预配置的一个或多个用程序从所述共享内存中读取所述快速数据。
63.基于该数据共享装置,实现软plc和上位windows系统无协议共享存储区域,减小了通信开销,提高了通信效率,提高了吞吐量,且避免了短时的通信中断导致的数据不连续。
64.根据以上所述的数据共享方法、装置及系统,基于设置在plc侧的一级缓存,上位系统的二级缓存,一级plc侧与上位系统的无协议的共享存储区域,实现了两者之间快速的数据共享,提高了数据吞吐量,最大化的使应用程序对plc数据的读取不断点。
附图说明
65.下面将通过参照附图详细描述本发明的优选实施例,使本领域的普通技术人员更清楚本发明的上述及其它特征和优点,
66.图1为现有技术中plc与上位机进行共享数据的连接关系图;
67.图2为根据一个实施例的数据共享方法的子步骤示意图;
68.图3将根据一个实施例的将接收的所述快速数据写入所述上位系统的共享内存中的步骤s300的子步骤示意图;
69.图4为根据一个实施例的所述上位系统中预配置的一个或多个应用程序从所述共享内存中读取所述快速数据的步骤s400的子步骤示意图;
70.图5为根据一个实施例的共享内存被划分为块的示意图、应用数据状态表的示意图;
71.图6为根据一个实施例的数据共享装置的示意图;
72.图7为根据一个实施例的数据共享系统的连接关系图。
73.附图中:
74.1plc
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
2上位系统
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
3上位机
75.5工业总线
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
10、20上位系统中应用程序
76.30上位系统共享内存
ꢀꢀꢀꢀ
40应用数据状态表
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
50外部数据源设备
77.100预处理模块
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
200数据发送模块
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
300数据写入模块
78.400数据读取模块
ꢀꢀꢀꢀꢀꢀꢀ
500数据共享装置
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
600硬件平台
79.s100:在plc侧对快速数据进行预处理,并将预处理后的快速数据存储于所述plc侧的第一缓存区;
80.s200:将存储于所述第一缓存区的所述快速数据发送至上位系统;
81.s300:将接收的所述快速数据写入所述上位系统的共享内存中;
82.s400:所述上位系统中预配置的一个或多个应用程序从所述共享内存中读取所述快速数据;
83.s310:获取写信号量;
84.s320:判断上一次写入位置的所述快速数据是否已被全部的所述预配置应用程序读取;
85.s321:从所述共享内存的起始位置开始写入数据;
86.s322:从所述上一次写入位置的下一个位置开始写入所述数据;
87.s410:获取读信号量;
88.s420:检测上一次写入位置及其前面的所有位置中的所述快速数据是否已被所述预配置应用程序读取。
89.s421:释放所述预配置应用程序的信号量;
90.s422:所述预配置应用程序对当前未被读取位置及其前面的所有位置中的存储数据进行读取,且在所述上一次写入位置及其前面的所有位置中的存储数据已被所述预配置应用程序读取后释放所述读取信号量。
具体实施方式
91.为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。
92.图1为现有技术中plc与上位机进行共享数据的连接关系图;
93.如图1所示,现有技术中,plc1的一端与外部数据源设备50连接,用于采集实时数据,该设备50可以是现场数据采集设备也可以是提供现场数据的数据中转设备,plc另一端与上位机3通过例如profibus、can等工业通信总线5连接,并基于例如opc ua、modbus等工业通信协议与上位机3进行数据通信。plc将来自于现场数据源设备50的快速数据以及自身
产生的数据通过工业通信总线上传至上位机3,上位机3中的一个或多个应用程序(10、20)(例如labview)对这些数据进行分析、存储、显示、转发。
94.该现有方案基于工业通信协议在plc和上位机之间进行数据传输和接收,在数据点以cpu扫描周期或总线周期(khz的级别,微秒间隔)快速变化的情况下,容易造成数据堆积,无法满足数据点完整按时间顺序传送至上位机。
95.为了解决以上问题,本发明提供一种数据共享方法。
96.图2为根据一个实施例的数据共享方法的子步骤示意图。如图2所示,根据本发明的一个实施例的数据共享方法包括:
97.s100:在plc侧对快速数据进行预处理,并将预处理后的快速数据存储于plc侧的第一缓存区;
98.具体的,在plc侧开辟第一缓存区,例如通过在plc侧指定db块作为缓存区域,将plc侧采集到的或者自身生成的大量快速数据经预处理后存储于第一缓存区中。
99.数据的预处理方式例如取出有效数据段、为数据加入时间戳等,由于对数据进行预处理的方式对于本领域技术人员已经是较为成熟的技术,本领域技术人员可以根据需求定义好预处理方式,在这里不再对其细节进行一一赘述。
100.在plc侧设置第一缓存区作为plc侧与上位系统进行数据共享时的一级缓存,有利于提高数据共享的效率。
101.s200:将存储于第一缓存区的快速数据发送至上位系统;
102.s300:将接收的快速数据写入上位系统的共享内存中;
103.在上位系统中设定一定大小的共享内存作为二级缓存,当plc侧的快速数据被传送到该上位系统中后,可以被暂时存放于该共享内存中,等待上位系统中的应用程序进行读取使用;该二级缓存的设置进一步提高了数据的吞吐量,并且可以协调短时间程序通信中断导致的数据不连续。
104.以上,将存储于第一缓存区的快速数据按照时间标签依次出栈发送到上位系统,一次发送的数据的大小例如等于共享内存中划分的多个相同大小的块的块大小,一次发送的频率并非固定,取决于上位系统中对上一包数据处理结果完成的反馈。
105.上位系统中共享内存的大小例如被设定为一次plc侧发送数据包的整数倍,倍数可以根据实际通信负荷情况调节到合适大小。
106.s400:上位系统中预配置的一个或多个应用程序从共享内存中读取快速数据。
107.在上位系统中预先配置好一个或多个可对上述设定的共享内存进行读取的应用程序,这些应用程序例如为可以调用动态链接库接口函数的第三方应用程序,及自开发应用程序,包括但不限于labview。这些应用程序调用通过上位系统中的应用接口,对共享内存数据进行读取。一次可以同时有多个预配置的应用程序进行读取操作。
108.基于上述实施例的数据共享方法,在plc侧设置一级缓存,在上位系统中设置二级缓存,实现plc侧和上位系统之间无协议共享存储区域,减小了通信开销,提高了通信效率,提高了吞吐量,且避免了短时的通信中断导致的数据不连续。
109.需要说明的是,以上步骤并无严格的先后顺序要求,在实际应用中可能会有顺序颠倒的情况,例如先执行s400,后同步执行s200和s300,各种情况组合不在此处一一赘述。
110.进一步的,基于一中间程序将存储于第一缓存区的快速数据发送至上位系统,基
于该中间程序将接收的快速数据写入上位系统的共享内存中;
111.该中间程序例如为simatic odk。
112.simatic odk为一种开发套件,当中间程序为simatic odk时,simatic odk在plc侧与上位系统中建立相呼应的数据传送和接收服务,实现两者之间的数据通信。具体的,在plc侧激活simatic odk的三个功能块loadfb,unloadfb和funs,其中,loadfb在plc启动块里调用一次,做好数据传输前提条件,通过触发此块会在上位系统里面生成调用对应动态链接库的可执行程序;unloadfb为触发销毁数据传输条件,结束对应动态链接库的可执行程序;funs为数据接口程序,通过触发此程序完成一次数据到上位系统的传送,在loadfb被成功执行后,周期性触发funs程序。funs程序又包括funs.req,funs.status,以及funs.done三个引脚,分别对应触发数据传送请求,检查数据传送状态以及数据传送结束。相应的,上位系统中设置对应的odk应用函数接口,例如odk load/unload/funs,另外还有odk onrun/stop函数接口用于plc运行、停止时调用。上位系统中的odk fun与plc侧funs对应用于接收来自于plc侧的数据。odk接口可以具有多组,例如使用一组接口(load/unload/funs)用于共享数据内容给一些应用程序,使用另一组接口(load/unload/funs)用于共享给另外一些应用程序,并开辟新的共享内存区域。当然,也可以在plc侧预处理好数据,将不同内容整理在一起。
113.通过在plc侧和上位系统侧分别设置中间程序,并基于该中间程序实现plc侧和上位系统侧的数据共享,无需通过工业通信协议,提高了数据传送和数据接收的效率。
114.进一步的,将存储于第一缓存区的快速数据发送至上位系统包括:发送数据传送请求,以及传送第一缓存区中的快速数据至上位系统。
115.当传送第一缓存区中的快速数据至上位系统之后,监视数据传送是否成功,例如,如果传送成功则返回成功funs.done,失败则报错。
116.如果返回结果为成功,判断plc侧第一缓存区的剩余数据是否满足,如满足将plc数据缓存区域中的数据出栈,偏移plc数据缓存区域的地址,并等待新一轮的发送数据请求被触发;如果plc数据缓存区域中的剩余数据不满足,则返回超时状态。
117.进一步的,图3将根据一个实施例的将接收的快速数据写入上位系统的共享内存中的步骤s300的子步骤示意图,如图3所示,将接收的快速数据写入上位系统的共享内存中的步骤s300进一步包括以下子步骤:
118.s310:获取写信号量;
119.具体的,信号量是实现线程互斥执行的一种技术,在本发明中,通过信号量实现对于读写互斥的控制,当预配置的应用程序需要对上位系统的共享内存数据进行读操作时,该读应用程序尝试取得信号量,当获得信号量后,此时如果想要进行写操作,即需要将plc侧传来的快速数据存入共享内存中,则由于无法获取信号量而失败;当进行写操作时,写操作程序尝试获得信号量,当获得信号量后,此时如果预配置的应用程序想要对该共享内存的数据进行读操作则会由于无法获取信号量而失败。
120.s320:判断上一次写入位置的快速数据是否已被全部的预配置应用程序读取,
121.如果已被全部的预配置应用程序读取,则执行步骤s321:从共享内存的起始位置开始写入数据;
122.如果未被全部的预配置应用程序读取,则执行步骤s322:从上一次写入位置的下
一个位置开始写入数据。
123.基于以上步骤,在进行写操作时,只写入当前接收的本次plc侧发来的数据包到共享内存中,在进行读操作时,一次读取共享内存中所有未读取的数据,因此每一次进行写操作时,只需从上次写操作的位置进行判断,并根据判断结果决定是从共享内存起始位置开始写还是从下一个位置开始写,能够提高写操作的效率。
124.需要说明的是,此处需要判断所有预配置的应用程序是否对上次写操作的位置都进行了读取,如果仅仅是一个或者部分的应用程序进行了读取,则不能直接进行新的写操作,因为这样会将数据覆盖,造成未读取数据的应用程序无法读取到该数据,造成数据丢失。
125.进一步的,步骤s310包括:判断是否在被读程序占用,
126.如果已被读程序占用,则判断是否超时,
127.如果判断结果为超时,则写程序报警超时;
128.如果判断结果为未超时,则写程序返回“busy”状态;
129.如果未被读程序占用,则执行步骤s320;
130.进一步的,根据本发明的又一个实施例,在执行后续s320之前还需要创建共享内存映射,通过创建共享内存映射到写程序私有地址空间,以对共享内存进行操作。对于上位系统,例如windows系统,共享内存在物理上对于不同应用程序是重叠的,在进程之间的逻辑上是相互隔离的,即对于不同应用,需创建属于自己的私有空间操作物理上的共享内存空间。
131.进一步的,图4为根据一个实施例的上位系统中预配置的一个或多个应用程序从共享内存中读取快速数据的步骤s400的子步骤示意图,如图4所示,s400的子步骤包括:
132.步骤s410:获取读信号量;
133.具体的,预配置的应用程序尝试获取信号量,如果当前没有在进行写操作,即信号量未被写程序占用时,预配置的应用程序获取读信号量。
134.需要说明的是,可以同时有多个预配置的应用程序进行读操作。
135.步骤s420:检测上一次写入位置及其前面的所有位置中的快速数据是否已被预配置应用程序读取,
136.若已被预配置应用程序读取,则执行步骤s421:释放读信号量;
137.若未被预配置应用程序读取,则执行步骤s422:预配置应用程序对当前未被读取位置及其前面的所有位置中的快速数据进行读取,且在上一次写入位置及其前面的所有位置中的存储数据已被预配置应用程序读取后释放读取信号量。
138.基于以上步骤,只需从上次写入位置开始判断前面的所有数据是否已被该应用程序进行了读取,如果在该次读操作前已完成了读取直接释放读信号量,如果之前未进行读取则需要对其前面所有位置的数据进行读取,因此,提高了读取操作的效率。
139.进一步的,步骤s410还包括:判断是否存在信号量,
140.如果不存在信号量,则创建信号量;
141.如果存在信号量,则判断是否在被写程序占用,
142.如果已被写程序占用,则判断是否超时,
143.如果判断结果为超时,则应用程序报警超时;
144.如果判断结果为未超时,则随机退避;
145.如果未被其他程序占用,则执行后续步骤s420;
146.可见,信号量在预配置应用程序时创建,写的时候,需要同时获取所有信号量,写完即释放;进行读操作时,只需该需要进行读操作的应用程序获取信号量即可,读操作完成后释放信号量。
147.进一步的,在执行后续步骤s420之前还需要创建共享内存映射,通过创建共享内存映射到应用程序的私有地址空间,以对共享内存进行操作。
148.进一步的,通过查询共享内存中维护的应用数据状态表判断共享内存中的快速数据是否被预配置应用程序读取,其中,应用数据状态表的各行依次对应于共享内存从起始位置开始被分成的不同块,列对应于上位系统中预配置的应用程序,应用数据状态表的每一单元格设置有状态值,状态值表征单元格对应的预配置应用程序对单元格对应的共享内存的块中的快速数据是否已读取,状态值包括“已读取”和“未读取”。
149.具体的,图5为根据一个实施例的共享内存30被划分为块的示意图、应用数据状态表40的示意图;如图5所示,上位系统中的用于存储来自plc侧数据的共享内存30被分割为m块,例如m=6,每一块的大小适应于一次接收的来自于plc侧的数据的大小,例如每一块被设置为1000byte,一次接收的来自于plc侧数据的大小也是1000byte;同时上位系统中预设置了n个应用程序,例如n=3,这些应用程序可通过访问共享内存30的块来对plc数据进行读取。相应的,在共享内存30中维护一张m*n,即6*3的二维应用数据状态表40,应用数据状态表40中的第一行对应于共享内存30起始位置的第一个分割块,第二行对应地址后移的第二个分割块,第二行对应共享内存块的地址为共享内存30起始地址+1000byte,依次类推,第m行对应的共享内存块的地址为共享内存30的起始地址+(m-1)*1000byte
……
应用数据状态表40中的第一列对应于预配置的第一个应用程序,第二列对应于预配置的第二个应用程序,第三列对应于预配置的第三个应用程序;每一个单元格设置状态值,该状态值变量用于表征该单元格的列对应的预配置应用程序对单元格的行对应的共享内存30的块中的快速数据是否已读取,状态值包括“已读取”和“未读取”。
150.当数据从plc侧被传送到上位系统中且被存入到共享内存的某一个块中时,由于共享内存中的数据被所有预配置的应用程序所共享,因此该块在二维表格中对应的行的所有单元格的状态值被设置为“未读取”,当某一个应用程序对该共享内存的块进行了读取后,该应用程序在表格中对应列与该共享内存的块对应行交叉的单元格的状态值被设置为“已读取”,其他应用程序对应列在该行的单元格的状态值仍然为“未读取”,直到其他应用程序也对该块的数据也进行了读取。
151.通过设置应用数据状态表,并通过该表中单元格的状态值记录应用程序对于某一个共享内存的块的数据的读取情况,方便在进行读写前进行判断,提高数据读取写入的效率。
152.进一步的,设置偏移量m,偏移量m表征当前指向应用数据状态表第m+1行。
153.具体的,默认情况下,m=0,当需要依次查询共享内存的块中的数据是否被读取时,从首行开始,依次判断应用数据状态表的各行,每判断完一行,m自动加1;基于当前偏移量m的值,找到共享内存中对应的块,进而对该块中的数据进行读取或者写入。
154.通过采用偏移量m对应应用数据状态表中的行,进而对应共享内存的块的位置,方
便记录操作的位置。
155.进一步的,上位系统将接收的快速数据写入共享内存中的步骤中,在获取了写信号量后,进一步包括:
156.获取上一次写入时的偏移量m;
157.判断应用数据状态表中第m+1行的所有单元格的状态值,当第m+1行的所有单元格的状态值都为“已读取”时,
158.将接收的快速数据存入共享内存的起始位置的块,并修改偏移位置m=0,修改应用数据状态表的所有单元格的状态值为“未读取”,释放写信号量。
159.进一步的,上位系统将接收的快速数据写入共享内存中的步骤中,在获取了写信号量后,进一步包括:
160.获取上一次写入时的偏移量m;
161.判断应用数据状态表中第m+1行的所有单元格的状态值,当第m+1行的所有单元格的状态值存在“未读取”时,
162.判断偏移量m是否大于应用状态数据表的行数-1,
163.如果不大于,则修改m=m+1,将接收的快速数据存入到修改后的偏移量m指向的行对应的共享内存的块中,并将当前偏移量m指向的行的所有单元格的状态值设置为“未读取”,释放写信号量。
164.基于以上步骤,需要写入时,首先判断共享内存中的数据是否已经被所有的应用程序读取,如果未被所有预配置的应用程序读取,则不可以覆盖存储的数据,需要在上一次写入位置后继续写入,只有共享内存中的数据已经被所有的应用程序读取时,才可以重新写入新数据,以此避免将未读取数据进行覆盖,进而影响未读取该数据的应用程序的数据连续性;在判断时,基于偏移量m来进行位置的记录,方便、高效。
165.进一步的,上位系统中预配置的一个或多个用程序从共享内存中读取快速数据的步骤中,在获取了读信号量之后,进一步包括:
166.获取上一次写入时的偏移量m;
167.获取预配置应用程序所在的列数n;
168.查看并判断应用数据状态表中第m+1行第n列的单元格的状态值是否为“已读取”,如果为“已读取”,则修改偏移量m=m-1;
169.重复执行上述步骤,直到确认应用数据状态表的第n列从上一次写入时对应的行到第一行的状态值都是“已读取”后,释放读信号量。
170.进一步的,上位系统中预配置的一个或多个用程序从共享内存中读取快速数据的步骤中,在获取了读信号量之后,进一步包括:
171.获取上一次写入位置时偏移量m;
172.获取预配置应用程序所在的列数n;
173.查看并判断应用数据状态表中第m+1行第n列的状态值是否为“已读取”,
174.如果为“未读取”,则对当前第m+1行对应的共享内存的块的快速数据进行读取,并修改第m+1第n列单元格的状态值为“已读取”,修改偏移量m=m-1;
175.重复执行上述步骤,直到确认应用数据状态表的第n列从上一次写入时对应的行到第一行的状态值都是“已读取”后,释放读信号量。
176.基于以上步骤的方法,在应用程序需要对共享内存进行读取时,判断上次写入位置之前的所有数据是否被读取,如果已经全部被读取,则释放读信号量,以进行下一轮的写操作;如果未被全部读取,则依次读取,并将上次写入位置和其之前位置的所有数据都进行读取;在判断时,基于偏移量m来进行位置的记录,方便、高效。
177.根据本发明的第二个方面,本发明还提供一种数据共享装置,包括:预处理模块、数据发送模块、数据写入模块以及数据读取模块,其中,预处理模块用于在plc侧对快速数据进行预处理,并将预处理后的快速数据存储于plc侧的第一缓存区;数据发送模块将存储于plc模块的第一缓存区的快速数据上传至上位系统;数据写入模块将接收的快速数据写入上位系统的共享内存中;数据读取模块用于使上位系统中预配置的一个或多个用程序从共享内存中读取快速数据。
178.图6为根据一个实施例的数据共享装置的示意图;如图6所示,数据共享装置500包括预处理模块100、数据发送模块200、数据写入模块300以及数据读取模块40。基于该数据共享装置500,实现plc侧和上位系统无协议共享存储区域,减小了通信开销,提高了通信效率,提高了吞吐量,且避免了短时的通信中断导致的数据不连续。
179.根据本发明第三个方面,本发明还提供一种数据共享系统包括:一软plc、一上位windows系统、数据共享装置及外部数据源设备,软plc部署于一硬件平台6中,且为软plc分配第一缓存区;一上位windows系统,上位windows系统与软plc部署于同一硬件平台中,为上位windows系统分配共享内存,上位windows系统上预配置有一个或多个可访问共享内存的应用程序;一数据共享装置,数据共享装置部署于硬件平台上,用于实现软plc与上位windows系统之间的数据共享;外部数据源设备,外部数据源设备与硬件平连接,为软plc提供快速数据。
180.图7为根据一个实施例的数据共享系统的连接关系图,如图7所示该共享数据系统包括一硬件平台600和一外部数据源设备50,外部数据源设备50与硬件平台600之间通过例如profinet等工业总线5进行连接通信;外部数据源设备50例如为现场设备,也可以是提供现场数据的中转设备;硬件平台600搭建有底层软件平台的ipc,底层软件平台例如为siemens hypervisor,软plc1与上位windows系统2集成设置于该硬件平台600的底层软件平台上;为软plc设置第一缓存区,为上位windows系统设置共享内存,其中,软plc1例如为simatic 1500软控制器,上位windows系统中预配置有一个或多个可访问共享内存的应用程序,该应用程序例如为labview。
181.硬件平台600上安装有数据共享装置500,该装置分别与软plc和上位windows系统连接,基于该数据共享装置实现软plc1与上位windows系统2之间的数据共享。
182.基于上述实施例的共享数据系统,一机集成软plc系统与上位windows系统,通过数据共享装置实现两个系统的快速数据共享,避免了使用工业通信协议来进行两者之间的数据交换造成的效率低下;同时在两侧各设置缓存,使得多个应用程序对快速数据的读取更有保障,不容易发生漏数据、错数据等问题。
183.进一步的,数据共享装置500进一步包括预处理模块100、数据发送模块200、数据写入模块300以及数据读取模块400,其中,预处理模块100用于在plc侧对快速数据进行预处理,并将预处理后的快速数据存储于plc侧的第一缓存区;数据发送模块200将存储于第一缓存区的快速数据上传至上位系统;数据写入模块300将接收的快速数据写入上位系统
的共享内存中;数据读取模块400用于使上位系统中预配置的一个或多个用程序从共享内存中读取快速数据。
184.基于该数据共享装置500,实现软plc和上位windows系统无协议共享存储区域,减小了通信开销,提高了通信效率,提高了吞吐量,且避免了短时的通信中断导致的数据不连续。
185.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1