支持IEC和C++任务同时或独立运行的运行时系统的制作方法

未命名 09-22 阅读:102 评论:0

支持iec和c++任务同时或独立运行的运行时系统
技术领域
1.本发明涉及工业控制器技术领域,具体来说,涉及支持iec和c++任务同时或独立运行的运行时系统。


背景技术:

2.工业控制器主要有plc和pac。其中,如图1所示,可编程逻辑控制器(programmab lelogic controller,plc)通常由运行时系统(runtime)应用、runtime内核(iec任务加载、调度、执行等)、总线管理(ethercat、modbus等协议)、runtime适配层(文件管理、同步互斥运算、任务管理、读写操作等)模块构成。runtime基于linux、windows、vxworks等操作系统实现。
3.plc默认只能执行iec任务,c/c++语言程序可以编译成动态库由iec任务调度执行。plc支持iec61131-3语言(以下简称iec语言)和c/c++语言混合编程,但是c/c++语言需要单独编译成动态库,由iec61131-3任务(以下简称iec任务)调度执行,无法自行直接运行。而pac默认只能执行c/c++语言任务,无法执行iec任务。
4.目前用户希望plc能够支持只用c/c++语言的任务调度,或者iec任务和c/c++任务同时独立执行,并能够进行可靠数据交互。然而plc默认不支持c/c++代码的任务加载和运行,导致某些plc客户无法使用,转而使用pac。
5.例如,中国专利申请号201720955385.6一种工业自动化控制器,该控制器采用arm芯片作为控制器,linux作为系统环境,实现plc控制。该控制器中包括iec2c解析器及plc编译器。该控制器将iec-61131-3标准集成在了arm芯片上,支持iec61131-3所描述的5种编程语言,不再依赖于现有的运行时系统(runtime system)即可实现plc功能。该控制器也只支持iec-61131-3标准的五种iec语言的任务执行。
6.中国专利申请号202211060683.0运行系统,该系统提供了一种运行系统,包括第一映射区,用于存储输入信号;第二映射区,用于存储输出信号;存储区;第一运行时系统,与第一映射区、第二映射区和存储区连接,第一运行时系统部署有多个功能块,其中包括智能功能块;第二运行时系统,与存储区连接,第二运行时系统上部署有智能模型。该运行系统描述了一种含两个运行时系统的架构,用于智能模型的运行,但是只支持iec-61131-3标准的五种iec语言的任务执行。
7.中国申请号200580024617.6运行时系统的鲁棒共享,该系统用于以可扩展的方式在运行时系统中共享对象并在用户会话之间提供隔离的方法和装置,包括计算机系统和程序产品。相应于用户会话的用户上下文被存储在共享存储器区域中。在接收到相应于用户会话的请求时,从操作系统进程的集合中选择进程,并从运行时系统的集合中选择运行时系统。该系统主要描述了一种在两个运行时系统中的共享方法,但是也只支持iec-61131-3标准的五种iec语言的任务执行。
8.针对相关技术中的问题,目前尚未提出有效的解决方案。


技术实现要素:

9.针对相关技术中的问题,本发明提出支持iec和c++任务同时或独立运行的运行时系统,以克服现有相关技术所存在的上述技术问题。
10.为此,本发明采用的具体技术方案如下:支持iec和c++任务同时或独立运行的运行时系统,该运行时系统包括以下组成:任务与变量管理模块、总线管理模块、任务数据交互模块及调试与监视模块;其中,任务与变量管理模块,用于在编译过程中识别并提取任务参数与变量信息,并添加至既有iec任务与变量中执行,再利用默认方法编译c/c++执行,解决iec任务与c/c++任务数据共享及同步问题;总线管理模块,用于在编译过程中为c/c++提供总线相关头文件和库,并为c/c++提供总线服务接口,以及提供总线管理;任务数据交互模块,用于建立任务交互缓存区,分别为iec代码与c/c++代码提供接口分配、访问及释放,并在iec任务和c/c++任务间使用消息邮箱机制建立通信通道,实现任务间通信;调试与监视模块,用于提供iec任务与c/c++任务各自独立的调试与监视功能。
11.进一步的,任务与变量管理模块包括任务管理单元与变量管理单元;其中,任务管理单元,用于为相互独立运行的iec任务和c/c++任务提供统一任务管理功能;变量管理单元,用于加载c/c++任务的全局变量与静态变量,并由运行时系统提供与iec任务数据交换区以及i/o输入输出接口区的接口。
12.进一步的,任务管理单元包括任务创建子单元、任务编译子单元及任务控制子单元;其中,任务创建子单元,用于利用rt linux为c/c++任务创建任务线程,并设置任务执行周期,并由rt linux直接负责执行;任务编译子单元,用于自动扫描c/c++代码中特定字段获取任务的参数信息,并添加至iec任务管理配置列表中,待下装运行后便于用户在ide中查看所有iec任务与c/c++任务的运行调试信息;任务控制子单元,用于在ide编译过程中暂停、执行与停止iec任务与c/c++任务,并保存c/c++任务在运行时系统的fd句柄。
13.进一步的,任务数据交互模块包括邮箱通道、iec任务单元、c/c++任务单元及共享内存单元;其中,邮箱通道,用于利用消息邮箱机制建立通信通道,并分别为iec任务与c/c++任务分配专属邮箱,将消息内容作为邮件,通过指定邮件接收方,将消息传递至指定任务;iec任务单元,用于建立iec任务交互缓存区,为iec任务提供接口分配、访问及释放;c/c++任务单元,用于建立c/c++任务交互缓存区,为c/c++任务提供接口分配、访问及释放;共享内存单元,用于分配指定共享内存用以任务间通信共享数据。
14.进一步的,任务数据交互模块实现iec任务和c/c++任务间通信包括以下步骤:
iec任务单元拷贝数据至共享内存单元中的指定位置;将共享内存单元中的指定地址及相关信息写入邮箱通道中的指定通道;c/c++任务单元接收邮箱通道中断和消息的地址;c/c++任务单元从共享内存单元中指定地址读取消息;c/c++任务单元处理接收到的消息,并准备回复消息;c/c++任务单元拷贝数据至共享内存单元指定位置;将共享内存单元中的指定地址及相关信息写入邮箱通道中的指定通道;iec任务单元接收邮箱通道中断和消息的地址;iec任务单元从共享内存单元中指定地址读取消息;iec任务单元处理接收到的消息。
15.进一步的,iec任务单元与c/c++任务单元在分配接口过程中需要提供缓存逻辑地址与缓存大小,iec代码与c/c++代码需要分别使用相同缓存逻辑地址与缓存大小进行创建,并由运行时系统实现维护数据同步。
16.进一步的,调试与监视模块包括iec任务调试监视单元、c/c++任务调试单元及变量监视单元;其中,iec任务调试监视单元,用于对iec任务进行调试与监视;c/c++任务调试单元,用于基于elf格式的系统调用对c/c++任务进行调试;变量监视单元,用于对c/c++任务的全局变量进行变量监视。
17.进一步的,c/c++任务调试单元包括被追踪模式子单元与单步调试子单元;其中,被追踪模式子单元,用于利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试;单步调试子单元,用于当系统调用的ptrace_singlestep命令将被调试进程设置为单步调试模式后,被调试进程每执行一条cpu指令均会停止执行,并向父进程发送一个sigchld信号。
18.进一步的,利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试包括以下步骤:使用系统调用的ptrace_traceme命令使被调试任务进入被跟踪模式;被调试进程复刻一个子进程,利用子进程执行可执行文件进行运行,被调试进程对新运行的进程进行跟踪;当进程调用者使用ptrace_traceme时,将当前进程状态设置为跟踪者pf_ptraced并退出;进程调用execv系列函数进行加载可执行文件进行运行,execv系列函数在加载运行过程中调用load_elf_binary,最终对当前进程状态进行判断,若设置为pf_ptraced,则给当前进程发送一个sigtrap信号。
19.进一步的,所述变量监视单元利用所述系统调用的ptrace_peektext/ptrace_peekdata命令获取被调试进程的内存数据,调试服务进程通过调用所述系统调用获取被调试进程所在虚拟内存地址的数据,且每次读取的数据大小为4字节,并将数据读取结果返回至集成开发环境进行显示。
20.本发明的有益效果为:
1、通过构建可同时或单独运行iec任务和c/c++任务的运行时系统,用户可以像普通plc一样只使用iec代码编程,也可以只使用c/c++代码编程并运行任务,甚至可以使用iec任务和c/c++任务并行运行且允许进行数据交互。给用户的plc编程的选择提供了极大的灵活性;并且c/c++任务可以像iec任务一样被监视和跟踪,可以使用断点调试、变量监视等常规调试技术。
21.2、本发明运行时系统运行于plc linux操作系统之上,若用户使用iec代码,直接由ide编译成目标代码;然后下装到runtime执行,既保持既有plc运行时系统架构不变;若用户使用c/c++代码,ide编译并识别相关任务参数、变量及io输入输出区,绑定到既有runtime架构中,并制定两类任务的数据交互方式;从而使得无论单独使用iec编程或者c/c++编程,亦或者同时使用iec和c/c++编程,均可以正常运行。
附图说明
22.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
23.图1是现有技术中可编程逻辑控制器系统组成结构示意图;图2是根据本发明实施例的支持iec和c++任务同时或独立运行的运行时系统的系统结构框图;图3是根据本发明实施例的支持iec和c++任务同时或独立运行的运行时系统中任务数据交互模块内各单元的结构示意图;图4是根据本发明实施例的支持iec和c++任务同时或独立运行的运行时系统的运行逻辑示意图。
24.图中:1、任务与变量管理模块;101、任务管理单元;102、变量管理单元;2、总线管理模块;3、任务数据交互模块;301、邮箱通道;302、iec任务单元302;303、c/c++任务单元;304、共享内存单元;4、调试与监视模块;401、iec任务调试监视单元;402、c/c++任务调试单元;403、变量监视单元。
具体实施方式
25.根据本发明的实施例,提供了支持iec和c++任务同时或独立运行的运行时系统。
26.现结合附图和具体实施方式对本发明进一步说明,如图2-图4所示,根据本发明实施例的支持iec和c++任务同时或独立运行的运行时系统,该运行时系统包括以下组成:任务与变量管理模块1、总线管理模块2、任务数据交互模块3及调试与监视模块4。
27.在本发明的实施例中,任务与变量管理模块1,用于在编译过程中识别并提取任务参数与变量信息,并添加至既有iec任务与变量中执行,再利用默认方法编译c/c++执行,解决iec任务与c/c++任务数据共享及同步问题。
28.其中,任务与变量管理模块1包括任务管理单元101与变量管理单元102。
29.任务管理单元101,用于为相互独立运行的iec任务和c/c++任务提供统一任务管
理功能,并且iec任务的创建和参数在ide上设置,而c/c++任务创建和参数均由用户编码实现。
30.其中,任务管理单元101包括任务创建子单元、任务编译子单元及任务控制子单元。
31.任务创建子单元,用于利用rt linux为c/c++任务创建任务线程,并设置任务执行周期,并由rt linux直接负责执行。
32.任务编译子单元,用于自动扫描c/c++代码中特定字段获取任务的参数信息,并添加至iec任务管理配置列表中,待下装运行后便于用户在ide中查看所有iec任务与c/c++任务的运行调试信息。
33.任务控制子单元,用于在ide编译过程中暂停、执行与停止iec任务与c/c++任务,并保存c/c++任务在运行时系统的fd句柄。
34.具体的,c/c++任务使用rt linux api例如pthread_create等创建任务线程,并设置任务执行周期和优先级。rt linux直接负责执行。(ide编译时会扫描pthread_create等创建任务api,并提取周期及优先级等参数。用于ide监视信息)。
35.变量管理单元102,用于加载c/c++任务的全局变量与静态变量,并由运行时系统提供与iec任务数据交换区以及i/o输入输出接口区的接口。
36.在本发明的实施例中,总线管理模块2,用于在编译过程中为c/c++提供总线相关头文件和库,并为c/c++提供总线服务接口,以及提供总线管理。
37.在本发明的实施例中,任务数据交互模块3,用于建立任务交互缓存区,分别为iec代码与c/c++代码提供接口分配、访问及释放,并在iec任务和c/c++任务间使用邮箱(mailbox)消息机制建立通信通道,实现任务间通信。
38.其中,如图3所示,任务数据交互模块3包括邮箱通道301、iec任务单元302、c/c++任务单元303及共享内存单元304。
39.邮箱通道(mailbox通道)301,用于利用消息邮箱机制(mailbox)建立通信通道,并分别为iec任务与c/c++任务分配专属邮箱,将消息内容作为邮件,通过指定邮件接收方,将消息传递至指定任务。
40.此外,mailbox机制上支持软件中断,因此指定核有消息时,就会收到软件中断,然后开始处理邮件,即处理消息。
41.iec任务单元302,用于建立iec任务交互缓存区,为iec任务提供接口分配、访问及释放。
42.具体的,iec任务单元302与c/c++任务单元303在分配接口过程中需要提供缓存逻辑地址与缓存大小,iec代码与c/c++代码需要分别使用相同缓存逻辑地址与缓存大小进行创建,并由运行时系统实现维护数据同步。
43.c/c++任务单元303,用于建立c/c++任务交互缓存区,为c/c++任务提供接口分配、访问及释放。
44.此外,对于i/o输入输出区管理,iec任务和c/c++任务各自读写i/o输入输出区内容。
45.共享内存单元304,用于分配指定共享内存用以任务间通信共享数据。
46.此外,基于mailbox的ipc有不同的实现方式,常用的任务间通信方式有两种:基于
rpmsg的任务间通信解决方案,适合小块数据消息传递;基于共享内存任务间通信解决方案,适合大块数据传输。
47.本发明选择基于共享内存任务间通信解决方案。
48.基于共享内存的任务间通信解决方案,底层仍然使用的是模块mailbox,如图3所示,发送和接受采用的是不同的mailbox通道。每一组任务与任务之间使用的都是指定的mailbox通道。同时,共享内存的解决方案需要分配指定共享内存用以任务间通信共享数据。共享内存是一段能够被多个任务所所访问的内存。共享内存在任务间通信方案中,一个任务可以将数据写入共享内存,mailbox可以将内存指针传递到另一个任务上,另一个任务可以拿到内存指针后,直接从共享内存读取数据,这一个过程不需要经过数据的拷贝,适合大数据量的传输。
49.具体的,任务数据交互模块3实现iec任务和c/c++任务间通信包括以下步骤:s31、iec任务单元102拷贝数据至共享内存单元104中的指定位置。
50.s33、将共享内存单元104中的指定地址及相关信息写入邮箱通道101中的指定通道。
51.s33、c/c++任务单元103接收邮箱通道101中断和消息的地址。
52.s34、c/c++任务单元103从共享内存单元104中指定地址读取消息。
53.s35、c/c++任务单元103处理接收到的消息,并准备回复消息。
54.s36、c/c++任务单元103拷贝数据至共享内存单元104指定位置。
55.s37、将共享内存单元104中的指定地址及相关信息写入邮箱通道101中的指定通道。
56.s38、iec任务单元102接收邮箱通道101中断和消息的地址。
57.s39、iec任务单元102从共享内存单元104中指定地址读取消息。
58.s310、iec任务单元102处理接收到的消息。
59.在本发明的实施例中,调试与监视模块4,用于提供iec任务与c/c++任务各自独立的调试与监视功能。
60.其中,调试与监视模块4包括iec任务调试监视单元401、c/c++任务调试单元402及变量监视单元403。
61.iec任务与c/c++任务调试及监视功能各自独立,iec任务沿用既有调试及监视功能,c/c++任务基于elf格式的ptrace系统调用来进行调试,支持单步或断点调试等功能。c/c++任务的全局变量也加入变量管理的变量列表中管理,同时也用于变量监视功能iec任务调试监视单元401,用于对iec任务进行调试与监视。
62.c/c++任务调试单元402,用于基于elf格式的系统调用(ptrace:linux提供的系统调用,通过ptrace可以实现进程的单步调试和收集系统调用情况)对c/c++任务进行调试。
63.其中,c/c++任务调试单元402包括被追踪模式子单元与单步调试子单元。
64.被追踪模式子单元,用于利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试。
65.具体的,利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试包括以下步骤:s41、使用系统调用的ptrace_traceme命令使被调试任务进入被跟踪模式。
66.s42、被调试进程复刻(fork)一个子进程,利用子进程执行可执行文件进行运行,被调试进程对新运行的进程进行跟踪。
67.s43、当进程调用者使用ptrace_traceme时,将当前进程状态设置为跟踪者pf_ptraced并退出。
68.s44、进程调用execv系列函数进行加载可执行文件进行运行,execv系列函数在加载运行过程中调用load_elf_binary,最终对当前进程状态进行判断,若设置为pf_ptraced,则给当前进程发送一个sigtrap信号(linux系统信号,表示当前进程处于被跟踪模式)。
69.此外,进程进入被追踪模式(ptrace_traceme操作)的方法为:当要调试一个进程时,需要使进程进入被追踪模式,使进程进入被追踪模式有两个方法:1.被调试的进程调用ptrace(ptrace_traceme,...)来使自己进入被追踪模式。2.调试进程调用ptrace(ptrace_attach,pid,...) 来使指定的进程进入被追踪模式。
70.第一种方式是进程自己主动进入被追踪模式,而第二种是进程被动进入被追踪模式。被调试的进程必须进入被追踪模式才能进行调试,因为 linux会对被追踪的进程进行一些特殊的处理。本发明使用第一种进入被追踪模式的实现,就是ptrace_traceme的操作过程,当父进程(调试进程)接收到sigchld(linux系统信号,表示子进程处于僵死状态,并返回父进程(调试进程)等待下一条指令,本发明用于单步调试模式)信号后,表示被调试进程已经标记为被追踪状态并且停止运行,那么调试进程就可以开始进行调试了。
71.单步调试子单元,用于当系统调用的ptrace_singlestep命令将被调试进程设置为单步调试模式后,被调试进程每执行一条cpu指令均会停止执行,并向父进程(调试进程)发送一个sigchld信号。
72.变量监视单元403,用于对c/c++任务的全局变量进行变量监视。
73.其中,变量监视单元403利用系统调用的ptrace_peektext/ptrace_peekdata命令获取被调试进程的内存数据,调试服务进程通过调用系统调用的(ptrace_peekdata,pid,addr,data)命令来获取被调试进程addr处虚拟内存地址的数据,且每次读取的数据大小为4字节,并将数据读取结果返回至集成开发环境(ide)进行显示。
74.在本发明的具体实施例中,如图4所示,本发明的运行时系统基于rt linux操作系统实现,实线框表示既有组件,虚线框表示本发明新增组件。运行时系统对于iec任务有总线管理、iec任务管理(加载、运行、停止)、iec变量管理、iec调试服务等组件。本发明为c/c++任务总线管理功能新增c/c++总线接口、c/c++任务管理功能(加载、运行、停止)并可自动识别任务及周期、优先级等、c/c++变量管理功能、c/c++调试服务(基于ptrace)、为支持iec任务和c/c++任务数据交互功能的任务交互缓存区。
75.变量管理功能将i/o数据写入i/o输入区和输出区,由总线管理功能负责调度并与多个从站设备进行数据交互。
76.此外“与ide通讯服务”用于运行时系统与上位机上ide程序进行通信,“守护任务”用于运行时系统的日志、故障管理等功能。
77.综上所述,借助于本发明的上述技术方案,通过构建可同时或单独运行iec任务和c/c++任务的运行时系统,用户可以像普通plc一样只使用iec代码编程,也可以只使用c/c++代码编程并运行任务,甚至可以使用iec任务和c/c++任务并行运行且允许进行数据交互。
给用户的plc编程的选择提供了极大的灵活性;并且c/c++任务可以像iec任务一样被监视和跟踪,可以使用断点调试、变量监视等常规调试技术。本发明运行时系统运行于plc linux操作系统之上,若用户使用iec代码,直接由ide编译成目标代码;然后下装到runtime执行,既保持既有plc运行时系统架构不变;若用户使用c/c++代码,ide编译并识别相关任务参数、变量及io输入输出区,绑定到既有runtime架构中,并制定两类任务的数据交互方式;从而使得无论单独使用iec编程或者c/c++编程,亦或者同时使用iec和c/c++编程,均可以正常运行。
78.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.支持iec和c++任务同时或独立运行的运行时系统,其特征在于,该运行时系统包括以下组成:任务与变量管理模块、总线管理模块、任务数据交互模块及调试与监视模块;其中,所述任务与变量管理模块,用于在编译过程中识别并提取任务参数与变量信息,并添加至既有iec任务与变量中执行,再利用默认方法编译c/c++执行,解决iec任务与c/c++任务数据共享及同步问题;所述总线管理模块,用于在编译过程中为c/c++提供总线相关头文件和库,并为c/c++提供总线服务接口,以及提供总线管理;所述任务数据交互模块,用于建立任务交互缓存区,分别为iec代码与c/c++代码提供接口分配、访问及释放,并在iec任务和c/c++任务间使用消息邮箱机制建立通信通道,实现任务间通信;所述调试与监视模块,用于提供iec任务与c/c++任务各自独立的调试与监视功能。2.根据权利要求1所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述任务与变量管理模块包括任务管理单元与变量管理单元;其中,所述任务管理单元,用于为相互独立运行的iec任务和c/c++任务提供统一任务管理功能;所述变量管理单元,用于加载c/c++任务的全局变量与静态变量,并由运行时系统提供与iec任务数据交换区以及i/o输入输出接口区的接口。3.根据权利要求2所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述任务管理单元包括任务创建子单元、任务编译子单元及任务控制子单元;其中,所述任务创建子单元,用于利用rt linux为c/c++任务创建任务线程,并设置任务执行周期,并由rt linux直接负责执行;所述任务编译子单元,用于自动扫描c/c++代码中特定字段获取任务的参数信息,并添加至iec任务管理配置列表中,待下装运行后便于用户在ide中查看所有iec任务与c/c++任务的运行调试信息;所述任务控制子单元,用于在ide编译过程中暂停、执行与停止iec任务与c/c++任务,并保存c/c++任务在运行时系统的fd句柄。4.根据权利要求1所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述任务数据交互模块包括邮箱通道、iec任务单元、c/c++任务单元及共享内存单元;其中,所述邮箱通道,用于利用消息邮箱机制建立通信通道,并分别为iec任务与c/c++任务分配专属邮箱,将消息内容作为邮件,通过指定邮件接收方,将消息传递至指定任务;所述iec任务单元,用于建立iec任务交互缓存区,为iec任务提供接口分配、访问及释放;所述c/c++任务单元,用于建立c/c++任务交互缓存区,为c/c++任务提供接口分配、访问及释放;所述共享内存单元,用于分配指定共享内存用以任务间通信共享数据。5.根据权利要求4所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述任务数据交互模块实现iec任务和c/c++任务间通信包括以下步骤:所述iec任务单元拷贝数据至所述共享内存单元中的指定位置;将所述共享内存单元中的指定地址及相关信息写入所述邮箱通道中的指定通道;
所述c/c++任务单元接收所述邮箱通道中断和消息的地址;所述c/c++任务单元从所述共享内存单元中指定地址读取消息;所述c/c++任务单元处理接收到的消息,并准备回复消息;所述c/c++任务单元拷贝数据至所述共享内存单元指定位置;将所述共享内存单元中的指定地址及相关信息写入所述邮箱通道中的指定通道;所述iec任务单元接收所述邮箱通道中断和消息的地址;所述iec任务单元从所述共享内存单元中指定地址读取消息;所述iec任务单元处理接收到的消息。6.根据权利要求5所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述iec任务单元与所述c/c++任务单元在分配接口过程中需要提供缓存逻辑地址与缓存大小,iec代码与c/c++代码需要分别使用相同缓存逻辑地址与缓存大小进行创建,并由运行时系统实现维护数据同步。7.根据权利要求1所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述调试与监视模块包括iec任务调试监视单元、c/c++任务调试单元及变量监视单元;其中,所述iec任务调试监视单元,用于对iec任务进行调试与监视;所述c/c++任务调试单元,用于基于elf格式的系统调用对c/c++任务进行调试;所述变量监视单元,用于对c/c++任务的全局变量进行变量监视。8.根据权利要求7所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述c/c++任务调试单元包括被追踪模式子单元与单步调试子单元;其中,所述被追踪模式子单元,用于利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试;单步调试子单元,用于当所述系统调用的ptrace_singlestep命令将被调试进程设置为单步调试模式后,被调试进程每执行一条cpu指令均会停止执行,并向父进程发送一个sigchld信号。9.根据权利要求8所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试包括以下步骤:利用所述系统调用的ptrace_traceme命令使被调试任务进入被跟踪模式;被调试进程复刻一个子进程,利用子进程执行可执行文件进行运行,被调试进程对新运行的进程进行跟踪;当进程调用者使用ptrace_traceme时,将当前进程状态设置为跟踪者pf_ptraced并退出;进程调用execv系列函数进行加载可执行文件进行运行,execv系列函数在加载运行过程中调用load_elf_binary,最终对当前进程状态进行判断,若设置为pf_ptraced,则给当前进程发送一个sigtrap信号。10.根据权利要求9所述的支持iec和c++任务同时或独立运行的运行时系统,其特征在于,所述变量监视单元利用所述系统调用的ptrace_peektext/ptrace_peekdata命令获取被调试进程的内存数据,调试服务进程通过调用所述系统调用获取被调试进程所在虚拟内存地址的数据,且每次读取的数据大小为4字节,并将数据读取结果返回至集成开发环境进
行显示。

技术总结
本发明公开了支持IEC和C++任务同时或独立运行的运行时系统,该运行时系统包括以下组成:任务与变量管理模块、总线管理模块、任务数据交互模块及调试与监视模块;其中,任务与变量管理模块,用于在编译过程中识别并提取任务参数与变量信息;总线管理模块,用于在编译过程中为C/C++提供总线相关头文件和库;任务数据交互模块,用于建立任务交互缓存区;调试与监视模块,用于提供IEC任务与C/C++任务的调试与监视功能。本发明构建可同时或单独运行IEC任务和C/C++任务的运行时系统,用户可只使用IEC代码编程,也可只使用C/C++代码编程并运行任务,甚至可使用IEC任务和C/C++任务并行运行且允许数据交互。且允许数据交互。且允许数据交互。


技术研发人员:朱明 李从飞 张琦 刘平卫 李致远 倪维东 赖新芳
受保护的技术使用者:国电南京自动化股份有限公司
技术研发日:2023.06.26
技术公布日:2023/9/20
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐