一种跨进程通信的方法及装置与流程

文档序号:17262433发布日期:2019-03-30 09:45阅读:205来源:国知局
一种跨进程通信的方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种跨进程通信的方法及装置。



背景技术:

在工业领域,很多应用场合选择三菱plc(programmablelogiccontroller)与上位机软件进行通信协作,完成正常的生产线控制。三菱plc采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。上位机是指可以直接发出操控命令的计算机。

通常,上位机与三菱plc之间的通信过程是:上位机向三菱plc发出操控指令,三菱plc接收指令并根据指令完成生产线的控制。然而,三菱plc并不能与所有的上位机软件进行通信,在win7x32系统下,三菱plc能与上位机软件进行通信,但是因为三菱plc一些驱动型号不支持64位系统,因此在win7x64系统下,三菱plc与上位机软件不能直接通信,这就使得三菱plc与上位机软件进行通信时存在一定的局限性。

因此,如何使得三菱plc可以与64位上位机进行通信,成为本领域技术人员亟待解决的问题。



技术实现要素:

本申请提供了一种跨进程通信的方法及装置,以解决目前三菱plc无法与64位上位机进行通信的问题。

一方面,本申请提供了一种跨进程通信的方法,包括:

第二进程向内存共享区写入plc通信指令,所述第二进程用于表示64位上位机软件的执行,所述内存共享区由第一进程建立,所述第一进程用于表示32位上位机软件的执行;

第一进程从所述内存共享区读取所述plc通信指令发送给plc;

所述plc响应所述plc通信指令,产生反馈结果,所述反馈结果包括指令执行成功或指令执行失败;

所述第一进程将所述plc反馈结果写入所述内存共享区;

所述第二进程从所述内存共享区读取所述反馈结果。

结合第一方面,所述第二进程向内存共享区写入plc通信指令之前,还包括:

所述第二进程控制所述第一进程开启;

所述第一进程利用文件映射的方式建立所述内存共享区。

进一步的,所述第二进程向内存共享区写入plc通信指令之后,还包括:向所述第一进程发送第一同步信号。

进一步的,所述方法还包括:所述第一进程根据所述第一同步信号从所述内存共享区读取所述plc通信指令发送给plc。

进一步的,所述第一进程将所述plc反馈结果写入所述内存共享区之后,还包括:所述第一进程向所述第二进程发送第二同步信号。

进一步的,所述方法还包括:所述第二进程根据所述第二同步信号从所述内存共享区读取所述反馈结果。

结合第一方面,所述方法还包括:

所述第二进程向所述内存共享区写入进程断开指令;

所述第一进程从所述内存共享区读取所述进程断开指令;

所述第一进程根据所述进程断开指令与所述plc断开连接并退出。

进一步的,所述第一进程利用文件映射的方式建立所述内存共享区的步骤包括:

创建文件映射对象;

将所述文件映射对象映射到第一进程中;

通过指向文件映射对象的指针对内存共享区进行数据访问。

第二方面,本申请还提供一种跨进程通信的装置,包括:

第一写入单元,用于为第二进程向内存共享区写入plc通信指令,所述第二进程用于表示64位上位机软件的执行,所述内存共享区由第一进程建立,所述第一进程用于表示32位上位机软件的执行;

第一读取单元,用于为第一进程从所述内存共享区读取所述plc通信指令发送给plc;

plc响应单元,用于为所述plc响应所述plc通信指令,产生反馈结果,所述反馈结果包括指令执行成功或指令执行失败;

第二写入单元,用于为所述第一进程将所述plc反馈结果写入所述内存共享区;

第二读取单元,用于为所述第二进程从所述内存共享区读取所述反馈结果。

由以上技术方案可知,本申请实施例提供了一种跨进程通信的方法及装置,通过第一进程建立内存共享区,第二进程的指令写入内存共享区后能被第一进程读取并发送给plc,plc响应指令之后再将结果发送给第一进程,由第一进程再写入内存共享区,第二进程读取内存共享区中的plc响应结果。本申请的技术方案将第一进程及其建立的内存共享区作为媒介,实现第二进程与plc之间的跨进程通信,即实现了64位上位机软件与plc之间的通信,减小plc与上位机软件通信时的局限性。另外,通过文件映射的方式建立内存共享区,也降低了整个通信系统的开销,有助于提升软件性能。

附图说明

为了更清楚地说明本申请的技术方案,下面将对实施案例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种跨进程通信的方法的流程图;

图2为本申请实施例提供的第二种跨进程通信的方法的流程图;

图3为本申请实施例提供的第三种跨进程通信的方法的流程图;

图4为本申请实施例提供的第四种跨进程通信的方法的流程图;

图5为本申请实施例提供的第五种跨进程通信的方法的流程图;

图6为本申请实施例提供的步骤202的流程图;

图7为本申请实施例提供的一种跨进程通信的装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。

参见图1,本申请提供了一种跨进程通信的方法,包括:

步骤101,第二进程向内存共享区写入plc通信指令,所述第二进程用于表示64位上位机软件的执行,所述内存共享区由第一进程建立,所述第一进程用于表示32位上位机软件的执行;进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,程序是指令、数据及其组织形式的描述,进程就是程序的实体。本申请中用进程表示上位机软件的执行活动。由于64位上位机软件无法与plc直接通信,就是说第二进程无法直接将指令发送给plc,本申请技术方案为了解决这一问题,在64位上位机软件与plc之间设置了32位上位机软件,利用32位上位机软件起到中转作用,将64位上位机软件的指令发送给plc执行。

但是第一进程在中转指令时,并不是直接接收第二进程发来的指令,而是事先建立一个内存共享区,在第二进程将指令存进内存共享区之后,第一进程再从内存共享区中读取出指令。

另外,本申请中的第一进程的活动可以包含在第二进程的活动之中,例如第二进程的程序中包括了第一进程的程序段,在第二进程程序执行时可以顺序执行到启动第一进程的程序,这样能确保在第二进程启动之后,第一进程能及时的建立内存共享区。

步骤102,第一进程从所述内存共享区读取所述plc通信指令发送给plc;事实上,进程的读数据和写数据都是在这块内存共享区上进行的,读写过程就是对内存数据的一个简单的获取和设置。内存共享区是系统分配的一些内存单元,因为是系统分配的,不能保证这些内存单元是否残留其他数据,所以一般会进行初始化操作,在进行了初始化操作以后,第二进程才将指令写入。其中,plc通信指令具体可以分为以下几种:通信连接指令、通信断开指令、数据读取指令和数据写入指令,通信连接指令用于建立plc与上位机之间的通信连接,通信断开指令用于断开plc与上位机之间的通信连接,数据读取指令用于控制上位机从plc读取数据,数据写入指令用于控制上位机将数据写入plc中。

步骤103,所述plc响应所述plc通信指令,产生反馈结果,所述反馈结果包括指令执行失败或执行成功及相应的读取数值;plc反馈出来的结果其实是是对上述plc通信指令的响应。这种响应总体分为2类:第一类是对通信连接、断开、数据写入这些指令的响应,响应的结果就是执行成功与否,如果执行成功则返回ture,如果执行失败则返回false;第二类是对读取指令的响应,如果执行成功,则返回true以及读取到的值,比如读取到的值为255,如果执行失败,则返回false,此时读取到的值是默认值,比如将默认值设置为0。

步骤104,所述第一进程将所述plc反馈结果写入所述内存共享区;由于plc无法与第二进程之间直接通信,第二进程在发指令时需要先将指令写入内存共享区,所以plc在返回结果时也需要将反馈结果先写入内存共享区中,等待第二进程从中读取。

步骤105,所述第二进程从所述内存共享区读取所述反馈结果,当第二进程读取到plc的反馈结果时,说明本次第二进程与plc的通信过程已经结束。之后可以选择继续通信或者退出通信。

根据以上内容可知,本申请的实施例提供了一种跨进程通信的方法,将第一进程及其建立的内存共享区作为媒介,实现第二进程与plc之间的跨进程通信,即实现了64位上位机软件与plc之间的通信,减小plc与上位机软件通信时的局限性。

参见图2,本申请提供的跨进程通信的方法,在步骤101之前,还包括:

步骤201,所述第二进程控制所述第一进程开启;第二进程对于第一进程的控制,可以是软件程序方面的控制,第一进程的执行程序可以是第二进程程序中的一部分,当第二进程程序执行到第一进程对应的程序段时,启动第一进程,此时第一进程开始建立内存共享区。

步骤202,所述第一进程利用文件映射的方式建立所述内存共享区。

因此,本申请实施例中的跨进程通信的方法采用文件映射的方式建立内存共享区,降低了整个通信系统的开销,有助于提升软件性能。

参见图3,本申请提供的跨进程通信的方法,在步骤101之后,还包括:

步骤301,向所述第一进程发送第一同步信号。在第二进程已经将指令写入内存共享区之后,第一进程并不知道第二进程已经完成了这项操作,也不知道何时从内存共享区中读取指令,通常也可以对第一进程读取数据设置一个延时读取的参数,但是延时读取的操作会被很多不确定因素干扰,比如第二进程在执行过程中出现错误未将指令写入内存共享区,当时间到了第一进程也并不能读取出指令;再比如,延时的时间设置的过长,即使第一进程读取到了数据,也会浪费大量等待的时间,如果延时的时间过短,也可能在第二进程写入指令之前第一进程就开始了读取操作。上述情况,整个写入读取的操作会浪费很多时间,造成不必要等待或是读取结果错误。因此,本申请中在第二进程将plc通信指令写入内存共享区之后,就会发送一个同步信号给第一进程,以通知第一进程立刻读取指令,提高整个控制过程的效率。同步信号也保证第一进程与第二进程能够同步进行,但是本申请中的这种同步也是具有很小的时间差的。

步骤302,所述第一进程根据所述第一同步信号从所述内存共享区读取所述plc通信指令发送给plc。

进一步地,本申请中第一进程与第二进程之间的同步操作由事件控制,这里的事件是一种机制,指的是进程间进行同步的一种方式。在本申请的技术方案里,利用事件机制进行第一进程和第二进程之间进行同步的具体做法是:设置两个事件,分别是指令完成事件以及响应完成事件。指令完成事件初始为无信号状态,第二进程在往共享区写入数据后将指令完成事件置为有信号转态,第一进程只有在检测到指令完成事件为有信号的状态下,才会去内存共享区读取数据。读取完成后,将指令完成事件恢复至无信号状态;同理,响应事件初始位无信号状态,第一进程在往共享区写入数据后将响应完成置为有信号转态,第二进程只有在检测到响应完成事件为有信号的状态下,才会去内存共享区读取数据。读取完成后,将响应完成事件恢复至无信号状态。

由以上方案可知,本申请实施例提供的跨进程通信方法,在第二进程将控制指令写入内存共享区之后,发送一个同步信号给第一进程,第一进程接收到同步信号之后从内存共享区中读取指令。同步信号可以保证第一进程与第二进程的执行顺序,保证在第二进程写入指令后,第一进程才读取;另外,如果第二进程执行错误,没有写入指令,此时也不会发出同步信号通知第一进程读取,避免了第一进程的无效操作。

参见图4,本申请提供的跨进程通信的方法,在步骤104之后,还包括:

步骤401,所述第一进程向所述第二进程发送第二同步信号。通常第二进程并不知道第一进程是否将反馈结果写入了内存共享区,当第一进程将反馈结果写入内存共享区之后,第二进程也并不知道何时读取,所以本申请的技术方案中,在第一进程将反馈结果写入内存共享区之后,立刻发送给第二进程一个同步信号,通知第二进程可以进行读取操作,这样也能保证整个写入和读取的操作不会过多的浪费等待时间,提高整体操作的效率。

步骤402,所述第二进程根据所述第二同步信号从所述内存共享区读取所述反馈结果。当第二进程读取到plc的反馈结果时,说明本次第二进程与plc的通信过程已经结束。之后可以选择继续通信或者退出通信。

由以上方案可知,本申请提供的跨进程通信方法中,在第一进程将plc的反馈结果写入内存共享区之后,还要向第二进程发送一个同步信号,以便提醒第二进程及时读取反馈结果,提高操作的效率。

参见图5,在上位机与plc之间的通信完成时,上位机需要断开与plc的连接,所以跨进程通信的方法还包括:

步骤501,所述第二进程向所述内存共享区写入进程断开指令;不论是第二进程发出的指令是什么,都无法直接与plc通信,第一进程起到中转的作用,因此,当需要断开第二进程与plc的连接时,只需要控制第一进程与plc之间断开通信即可。此时,第二进程仍需要将控制进程断开的指令写入内存共享区,之后立刻向第一进程发送同步信号。

步骤502,接收到同步信号之后,第一进程从所述内存共享区读取所述进程断开指令;

步骤503,所述第一进程根据所述进程断开指令与所述plc断开连接并退出。第一进程与plc断开之后,即表示第二进程也与plc断开了连接。

由以上方案可知,当本申请的第二进程需要与plc断开连接时,只需要控制第一进程与plc断开连接即可,无需再与plc通信。

参见图6,所述步骤202,第一进程利用文件映射的方式建立所述内存共享区的步骤包括:

步骤601,创建文件映射对象;

步骤602,将所述文件映射对象映射到第一进程中;

步骤603,通过指向文件映射对象的指针对内存共享区进行数据访问。

由以上技术方案可知,本申请实施例提供了一种跨进程通信的方法,通过第一进程建立内存共享区,第二进程的指令写入内存共享区后能被第一进程读取并发送给plc,plc响应指令之后再将结果发送给第一进程,由第一进程再写入内存共享区,第二进程读取内存共享区中的plc响应结果。本申请的技术方案将第一进程及其建立的内存共享区作为媒介,实现第二进程与plc之间的跨进程通信,即实现了64位上位机软件与plc之间的通信,减小plc与上位机软件通信时的局限性。另外,通过文件映射的方式建立内存共享区,也降低了整个通信系统的开销,有助于提升软件性能。

参见图7,本申请实施例提供了一种跨进程通信的装置,包括:

第一写入单元71,用于为第二进程向内存共享区写入plc通信指令,所述第二进程用于表示64位上位机软件的执行,所述内存共享区由第一进程建立,所述第一进程用于表示32位上位机软件的执行;

第一读取单元72,用于为第一进程从所述内存共享区读取所述plc通信指令发送给plc;

plc响应单元73,用于为所述plc响应所述plc通信指令,产生反馈结果,所述反馈结果包括指令执行成功或指令执行失败;

第二写入单元74,用于为所述第一进程将所述plc反馈结果写入所述内存共享区;

第二读取单元75,用于为所述第二进程从所述内存共享区读取所述反馈结果。

可选的,所述装置还包括:

控制单元,用于为所述第二进程控制所述第一进程开启;

共享区建立单元,用于为所述第一进程利用文件映射的方式建立所述内存共享区。

可选的,所述装置还包括:第一信号发送单元,用于向所述第一进程发送第一同步信号。

可选的,所述装置还包括:第一信号读取单元,用于为所述第一进程根据所述第一同步信号从所述内存共享区读取所述plc通信指令发送给plc。

可选的,所述装置还包括:第二信号发送单元,用于为所述第一进程向所述第二进程发送第二同步信号。

可选的,所述装置还包括:第二信号读取单元,用于为所述第二进程根据所述第二同步信号从所述内存共享区读取所述反馈结果。

可选的,所述装置还包括:

第三写入单元,用于为所述第二进程向所述内存共享区写入进程断开指令;

第三读取单元,用于为所述第一进程从所述内存共享区读取所述进程断开指令;

退出响应单元,用于为所述第一进程根据所述进程断开指令与所述plc断开连接并退出。

可选的,所述共享区建立单元还用于:

创建文件映射对象;

将所述文件映射对象映射到第一进程中;

通过指向文件映射对象的指针对内存共享区进行数据访问。

由以上技术方案可知,本申请实施例提供了一种跨进程通信的方法及装置,通过第一进程建立内存共享区,第二进程的指令写入内存共享区后能被第一进程读取并发送给plc,plc响应指令之后再将结果发送给第一进程,由第一进程再写入内存共享区,第二进程读取内存共享区中的plc响应结果。本申请的技术方案将第一进程及其建立的内存共享区作为媒介,实现第二进程与plc之间的跨进程通信,即实现了64位上位机软件与plc之间的通信,减小plc与上位机软件通信时的局限性。另外,通过文件映射的方式建立内存共享区,也降低了整个通信系统的开销,有助于提升软件性能。

本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1