CN116775038A - 支持iec和c++任务同时或独立运行的运行时系统 - Google Patents

支持iec和c++任务同时或独立运行的运行时系统 Download PDF

Info

Publication number
CN116775038A
CN116775038A CN202310757680.0A CN202310757680A CN116775038A CN 116775038 A CN116775038 A CN 116775038A CN 202310757680 A CN202310757680 A CN 202310757680A CN 116775038 A CN116775038 A CN 116775038A
Authority
CN
China
Prior art keywords
task
iec
tasks
unit
debugging
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202310757680.0A
Other languages
English (en)
Other versions
CN116775038B (zh
Inventor
朱明�
李从飞
张琦
刘平卫
李致远
倪维东
赖新芳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guodian Nanjing Automation Co Ltd
Original Assignee
Guodian Nanjing Automation Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guodian Nanjing Automation Co Ltd filed Critical Guodian Nanjing Automation Co Ltd
Priority to CN202310757680.0A priority Critical patent/CN116775038B/zh
Publication of CN116775038A publication Critical patent/CN116775038A/zh
Application granted granted Critical
Publication of CN116775038B publication Critical patent/CN116775038B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

支持IEC和C++任务同时或独立运行的运行时系统
技术领域
本发明涉及工业控制器技术领域,具体来说,涉及支持IEC和C++任务同时或独立运行的运行时系统。
背景技术
工业控制器主要有PLC和PAC。其中,如图1所示,可编程逻辑控制器(ProgrammableLogic Controller,PLC)通常由运行时系统(Runtime)应用、Runtime内核(IEC任务加载、调度、执行等)、总线管理(EtherCat、Modbus等协议)、Runtime适配层(文件管理、同步互斥运算、任务管理、读写操作等)模块构成。Runtime基于Linux、Windows、VxWorks等操作系统实现。
PLC默认只能执行IEC任务,C/C++语言程序可以编译成动态库由IEC任务调度执行。PLC支持IEC61131-3语言(以下简称IEC语言)和C/C++语言混合编程,但是C/C++语言需要单独编译成动态库,由IEC61131-3任务(以下简称IEC任务)调度执行,无法自行直接运行。而PAC默认只能执行C/C++语言任务,无法执行IEC任务。
目前用户希望PLC能够支持只用C/C++语言的任务调度,或者IEC任务和C/C++任务同时独立执行,并能够进行可靠数据交互。然而PLC默认不支持C/C++代码的任务加载和运行,导致某些PLC客户无法使用,转而使用PAC。
例如,中国专利申请号201720955385.6一种工业自动化控制器,该控制器采用ARM芯片作为控制器,Linux作为系统环境,实现PLC控制。该控制器中包括IEC2C解析器及PLC编译器。该控制器将IEC-61131-3标准集成在了ARM芯片上,支持IEC61131-3所描述的5种编程语言,不再依赖于现有的运行时系统(Runtime System)即可实现PLC功能。该控制器也只支持IEC-61131-3标准的五种IEC语言的任务执行。
中国专利申请号202211060683.0运行系统,该系统提供了一种运行系统,包括第一映射区,用于存储输入信号;第二映射区,用于存储输出信号;存储区;第一运行时系统,与第一映射区、第二映射区和存储区连接,第一运行时系统部署有多个功能块,其中包括智能功能块;第二运行时系统,与存储区连接,第二运行时系统上部署有智能模型。该运行系统描述了一种含两个运行时系统的架构,用于智能模型的运行,但是只支持IEC-61131-3标准的五种IEC语言的任务执行。
中国申请号200580024617.6运行时系统的鲁棒共享,该系统用于以可扩展的方式在运行时系统中共享对象并在用户会话之间提供隔离的方法和装置,包括计算机系统和程序产品。相应于用户会话的用户上下文被存储在共享存储器区域中。在接收到相应于用户会话的请求时,从操作系统进程的集合中选择进程,并从运行时系统的集合中选择运行时系统。该系统主要描述了一种在两个运行时系统中的共享方法,但是也只支持IEC-61131-3标准的五种IEC语言的任务执行。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的问题,本发明提出支持IEC和C++任务同时或独立运行的运行时系统,以克服现有相关技术所存在的上述技术问题。
为此,本发明采用的具体技术方案如下:
支持IEC和C++任务同时或独立运行的运行时系统,该运行时系统包括以下组成:任务与变量管理模块、总线管理模块、任务数据交互模块及调试与监视模块;
其中,任务与变量管理模块,用于在编译过程中识别并提取任务参数与变量信息,并添加至既有IEC任务与变量中执行,再利用默认方法编译C/C++执行,解决IEC任务与C/C++任务数据共享及同步问题;
总线管理模块,用于在编译过程中为C/C++提供总线相关头文件和库,并为C/C++提供总线服务接口,以及提供总线管理;
任务数据交互模块,用于建立任务交互缓存区,分别为IEC代码与C/C++代码提供接口分配、访问及释放,并在IEC任务和C/C++任务间使用消息邮箱机制建立通信通道,实现任务间通信;
调试与监视模块,用于提供IEC任务与C/C++任务各自独立的调试与监视功能。
进一步的,任务与变量管理模块包括任务管理单元与变量管理单元;
其中,任务管理单元,用于为相互独立运行的IEC任务和C/C++任务提供统一任务管理功能;
变量管理单元,用于加载C/C++任务的全局变量与静态变量,并由运行时系统提供与IEC任务数据交换区以及I/O输入输出接口区的接口。
进一步的,任务管理单元包括任务创建子单元、任务编译子单元及任务控制子单元;
其中,任务创建子单元,用于利用RT Linux为C/C++任务创建任务线程,并设置任务执行周期,并由RT Linux直接负责执行;
任务编译子单元,用于自动扫描C/C++代码中特定字段获取任务的参数信息,并添加至IEC任务管理配置列表中,待下装运行后便于用户在IDE中查看所有IEC任务与C/C++任务的运行调试信息;
任务控制子单元,用于在IDE编译过程中暂停、执行与停止IEC任务与C/C++任务,并保存C/C++任务在运行时系统的fd句柄。
进一步的,任务数据交互模块包括邮箱通道、IEC任务单元、C/C++任务单元及共享内存单元;
其中,邮箱通道,用于利用消息邮箱机制建立通信通道,并分别为IEC任务与C/C++任务分配专属邮箱,将消息内容作为邮件,通过指定邮件接收方,将消息传递至指定任务;
IEC任务单元,用于建立IEC任务交互缓存区,为IEC任务提供接口分配、访问及释放;
C/C++任务单元,用于建立C/C++任务交互缓存区,为C/C++任务提供接口分配、访问及释放;
共享内存单元,用于分配指定共享内存用以任务间通信共享数据。
进一步的,任务数据交互模块实现IEC任务和C/C++任务间通信包括以下步骤:
IEC任务单元拷贝数据至共享内存单元中的指定位置;
将共享内存单元中的指定地址及相关信息写入邮箱通道中的指定通道;
C/C++任务单元接收邮箱通道中断和消息的地址;
C/C++任务单元从共享内存单元中指定地址读取消息;
C/C++任务单元处理接收到的消息,并准备回复消息;
C/C++任务单元拷贝数据至共享内存单元指定位置;
将共享内存单元中的指定地址及相关信息写入邮箱通道中的指定通道;
IEC任务单元接收邮箱通道中断和消息的地址;
IEC任务单元从共享内存单元中指定地址读取消息;
IEC任务单元处理接收到的消息。
进一步的,IEC任务单元与C/C++任务单元在分配接口过程中需要提供缓存逻辑地址与缓存大小,IEC代码与C/C++代码需要分别使用相同缓存逻辑地址与缓存大小进行创建,并由运行时系统实现维护数据同步。
进一步的,调试与监视模块包括IEC任务调试监视单元、C/C++任务调试单元及变量监视单元;
其中,IEC任务调试监视单元,用于对IEC任务进行调试与监视;
C/C++任务调试单元,用于基于ELF格式的系统调用对C/C++任务进行调试;
变量监视单元,用于对C/C++任务的全局变量进行变量监视。
进一步的,C/C++任务调试单元包括被追踪模式子单元与单步调试子单元;
其中,被追踪模式子单元,用于利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试;
单步调试子单元,用于当系统调用的PTRACE_SINGLESTEP命令将被调试进程设置为单步调试模式后,被调试进程每执行一条CPU指令均会停止执行,并向父进程发送一个SIGCHLD信号。
进一步的,利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试包括以下步骤:
使用系统调用的PTRACE_TRACEME命令使被调试任务进入被跟踪模式;
被调试进程复刻一个子进程,利用子进程执行可执行文件进行运行,被调试进程对新运行的进程进行跟踪;
当进程调用者使用PTRACE_TRACEME时,将当前进程状态设置为跟踪者PF_PTRACED并退出;
进程调用execv系列函数进行加载可执行文件进行运行,execv系列函数在加载运行过程中调用load_elf_binary,最终对当前进程状态进行判断,若设置为PF_PTRACED,则给当前进程发送一个SIGTRAP信号。
进一步的,所述变量监视单元利用所述系统调用的PTRACE_PEEKTEXT/PTRACE_PEEKDATA命令获取被调试进程的内存数据,调试服务进程通过调用所述系统调用获取被调试进程所在虚拟内存地址的数据,且每次读取的数据大小为4字节,并将数据读取结果返回至集成开发环境进行显示。
本发明的有益效果为:
1、通过构建可同时或单独运行IEC任务和C/C++任务的运行时系统,用户可以像普通PLC一样只使用IEC代码编程,也可以只使用C/C++代码编程并运行任务,甚至可以使用IEC任务和C/C++任务并行运行且允许进行数据交互。给用户的PLC编程的选择提供了极大的灵活性;并且C/C++任务可以像IEC任务一样被监视和跟踪,可以使用断点调试、变量监视等常规调试技术。
2、本发明运行时系统运行于PLC Linux操作系统之上,若用户使用IEC代码,直接由IDE编译成目标代码;然后下装到Runtime执行,既保持既有PLC运行时系统架构不变;若用户使用C/C++代码,IDE编译并识别相关任务参数、变量及IO输入输出区,绑定到既有runtime架构中,并制定两类任务的数据交互方式;从而使得无论单独使用IEC编程或者C/C++编程,亦或者同时使用IEC和C/C++编程,均可以正常运行。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中可编程逻辑控制器系统组成结构示意图;
图2是根据本发明实施例的支持IEC和C++任务同时或独立运行的运行时系统的系统结构框图;
图3是根据本发明实施例的支持IEC和C++任务同时或独立运行的运行时系统中任务数据交互模块内各单元的结构示意图;
图4是根据本发明实施例的支持IEC和C++任务同时或独立运行的运行时系统的运行逻辑示意图。
图中:
1、任务与变量管理模块;101、任务管理单元;102、变量管理单元;2、总线管理模块;3、任务数据交互模块;301、邮箱通道;302、IEC任务单元302;303、C/C++任务单元;304、共享内存单元;4、调试与监视模块;401、IEC任务调试监视单元;402、C/C++任务调试单元;403、变量监视单元。
具体实施方式
根据本发明的实施例,提供了支持IEC和C++任务同时或独立运行的运行时系统。
现结合附图和具体实施方式对本发明进一步说明,如图2-图4所示,根据本发明实施例的支持IEC和C++任务同时或独立运行的运行时系统,该运行时系统包括以下组成:任务与变量管理模块1、总线管理模块2、任务数据交互模块3及调试与监视模块4。
在本发明的实施例中,任务与变量管理模块1,用于在编译过程中识别并提取任务参数与变量信息,并添加至既有IEC任务与变量中执行,再利用默认方法编译C/C++执行,解决IEC任务与C/C++任务数据共享及同步问题。
其中,任务与变量管理模块1包括任务管理单元101与变量管理单元102。
任务管理单元101,用于为相互独立运行的IEC任务和C/C++任务提供统一任务管理功能,并且IEC任务的创建和参数在IDE上设置,而C/C++任务创建和参数均由用户编码实现。
其中,任务管理单元101包括任务创建子单元、任务编译子单元及任务控制子单元。
任务创建子单元,用于利用RT Linux为C/C++任务创建任务线程,并设置任务执行周期,并由RT Linux直接负责执行。
任务编译子单元,用于自动扫描C/C++代码中特定字段获取任务的参数信息,并添加至IEC任务管理配置列表中,待下装运行后便于用户在IDE中查看所有IEC任务与C/C++任务的运行调试信息。
任务控制子单元,用于在IDE编译过程中暂停、执行与停止IEC任务与C/C++任务,并保存C/C++任务在运行时系统的fd句柄。
具体的,C/C++任务使用RT Linux API例如pthread_create等创建任务线程,并设置任务执行周期和优先级。RT Linux直接负责执行。(IDE编译时会扫描pthread_create等创建任务API,并提取周期及优先级等参数。用于IDE监视信息)。
变量管理单元102,用于加载C/C++任务的全局变量与静态变量,并由运行时系统提供与IEC任务数据交换区以及I/O输入输出接口区的接口。
在本发明的实施例中,总线管理模块2,用于在编译过程中为C/C++提供总线相关头文件和库,并为C/C++提供总线服务接口,以及提供总线管理。
在本发明的实施例中,任务数据交互模块3,用于建立任务交互缓存区,分别为IEC代码与C/C++代码提供接口分配、访问及释放,并在IEC任务和C/C++任务间使用邮箱(Mailbox)消息机制建立通信通道,实现任务间通信。
其中,如图3所示,任务数据交互模块3包括邮箱通道301、IEC任务单元302、C/C++任务单元303及共享内存单元304。
邮箱通道(Mailbox通道)301,用于利用消息邮箱机制(Mailbox)建立通信通道,并分别为IEC任务与C/C++任务分配专属邮箱,将消息内容作为邮件,通过指定邮件接收方,将消息传递至指定任务。
此外,Mailbox机制上支持软件中断,因此指定核有消息时,就会收到软件中断,然后开始处理邮件,即处理消息。
IEC任务单元302,用于建立IEC任务交互缓存区,为IEC任务提供接口分配、访问及释放。
具体的,IEC任务单元302与C/C++任务单元303在分配接口过程中需要提供缓存逻辑地址与缓存大小,IEC代码与C/C++代码需要分别使用相同缓存逻辑地址与缓存大小进行创建,并由运行时系统实现维护数据同步。
C/C++任务单元303,用于建立C/C++任务交互缓存区,为C/C++任务提供接口分配、访问及释放。
此外,对于I/O输入输出区管理,IEC任务和C/C++任务各自读写I/O输入输出区内容。
共享内存单元304,用于分配指定共享内存用以任务间通信共享数据。
此外,基于Mailbox的IPC有不同的实现方式,常用的任务间通信方式有两种:基于RPMSG的任务间通信解决方案,适合小块数据消息传递;基于共享内存任务间通信解决方案,适合大块数据传输。
本发明选择基于共享内存任务间通信解决方案。
基于共享内存的任务间通信解决方案,底层仍然使用的是模块Mailbox,如图3所示,发送和接受采用的是不同的Mailbox通道。每一组任务与任务之间使用的都是指定的Mailbox通道。同时,共享内存的解决方案需要分配指定共享内存用以任务间通信共享数据。共享内存是一段能够被多个任务所所访问的内存。共享内存在任务间通信方案中,一个任务可以将数据写入共享内存,Mailbox可以将内存指针传递到另一个任务上,另一个任务可以拿到内存指针后,直接从共享内存读取数据,这一个过程不需要经过数据的拷贝,适合大数据量的传输。
具体的,任务数据交互模块3实现IEC任务和C/C++任务间通信包括以下步骤:
S31、IEC任务单元102拷贝数据至共享内存单元104中的指定位置。
S33、将共享内存单元104中的指定地址及相关信息写入邮箱通道101中的指定通道。
S33、C/C++任务单元103接收邮箱通道101中断和消息的地址。
S34、C/C++任务单元103从共享内存单元104中指定地址读取消息。
S35、C/C++任务单元103处理接收到的消息,并准备回复消息。
S36、C/C++任务单元103拷贝数据至共享内存单元104指定位置。
S37、将共享内存单元104中的指定地址及相关信息写入邮箱通道101中的指定通道。
S38、IEC任务单元102接收邮箱通道101中断和消息的地址。
S39、IEC任务单元102从共享内存单元104中指定地址读取消息。
S310、IEC任务单元102处理接收到的消息。
在本发明的实施例中,调试与监视模块4,用于提供IEC任务与C/C++任务各自独立的调试与监视功能。
其中,调试与监视模块4包括IEC任务调试监视单元401、C/C++任务调试单元402及变量监视单元403。
IEC任务与C/C++任务调试及监视功能各自独立,IEC任务沿用既有调试及监视功能,C/C++任务基于ELF格式的ptrace系统调用来进行调试,支持单步或断点调试等功能。C/C++任务的全局变量也加入变量管理的变量列表中管理,同时也用于变量监视功能
IEC任务调试监视单元401,用于对IEC任务进行调试与监视。
C/C++任务调试单元402,用于基于ELF格式的系统调用(ptrace:Linux提供的系统调用,通过ptrace可以实现进程的单步调试和收集系统调用情况)对C/C++任务进行调试。
其中,C/C++任务调试单元402包括被追踪模式子单元与单步调试子单元。
被追踪模式子单元,用于利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试。
具体的,利用系统调用将被调试进程进入被追踪模式,利用被追踪模式对被调试进程进行调试包括以下步骤:
S41、使用系统调用的PTRACE_TRACEME命令使被调试任务进入被跟踪模式。
S42、被调试进程复刻(fork)一个子进程,利用子进程执行可执行文件进行运行,被调试进程对新运行的进程进行跟踪。
S43、当进程调用者使用PTRACE_TRACEME时,将当前进程状态设置为跟踪者PF_PTRACED并退出。
S44、进程调用execv系列函数进行加载可执行文件进行运行,execv系列函数在加载运行过程中调用load_elf_binary,最终对当前进程状态进行判断,若设置为PF_PTRACED,则给当前进程发送一个SIGTRAP信号(Linux系统信号,表示当前进程处于被跟踪模式)。
此外,进程进入被追踪模式(PTRACE_TRACEME操作)的方法为:
当要调试一个进程时,需要使进程进入被追踪模式,使进程进入被追踪模式有两个方法:1.被调试的进程调用ptrace(PTRACE_TRACEME,...)来使自己进入被追踪模式。2.调试进程调用ptrace(PTRACE_ATTACH,pid,...) 来使指定的进程进入被追踪模式。
第一种方式是进程自己主动进入被追踪模式,而第二种是进程被动进入被追踪模式。被调试的进程必须进入被追踪模式才能进行调试,因为 Linux会对被追踪的进程进行一些特殊的处理。本发明使用第一种进入被追踪模式的实现,就是PTRACE_TRACEME的操作过程,当父进程(调试进程)接收到SIGCHLD(Linux系统信号,表示子进程处于僵死状态,并返回父进程(调试进程)等待下一条指令,本发明用于单步调试模式)信号后,表示被调试进程已经标记为被追踪状态并且停止运行,那么调试进程就可以开始进行调试了。
单步调试子单元,用于当系统调用的PTRACE_SINGLESTEP命令将被调试进程设置为单步调试模式后,被调试进程每执行一条CPU指令均会停止执行,并向父进程(调试进程)发送一个SIGCHLD信号。
变量监视单元403,用于对C/C++任务的全局变量进行变量监视。
其中,变量监视单元403利用系统调用的PTRACE_PEEKTEXT/PTRACE_PEEKDATA命令获取被调试进程的内存数据,调试服务进程通过调用系统调用的(PTRACE_PEEKDATA,pid,addr,data)命令来获取被调试进程addr处虚拟内存地址的数据,且每次读取的数据大小为4字节,并将数据读取结果返回至集成开发环境(IDE)进行显示。
在本发明的具体实施例中,如图4所示,本发明的运行时系统基于RT Linux操作系统实现,实线框表示既有组件,虚线框表示本发明新增组件。运行时系统对于IEC任务有总线管理、IEC任务管理(加载、运行、停止)、IEC变量管理、IEC调试服务等组件。本发明为C/C++任务总线管理功能新增C/C++总线接口、C/C++任务管理功能(加载、运行、停止)并可自动识别任务及周期、优先级等、C/C++变量管理功能、C/C++调试服务(基于ptrace)、为支持IEC任务和C/C++任务数据交互功能的任务交互缓存区。
变量管理功能将I/O数据写入I/O输入区和输出区,由总线管理功能负责调度并与多个从站设备进行数据交互。
此外“与IDE通讯服务”用于运行时系统与上位机上IDE程序进行通信,“守护任务”用于运行时系统的日志、故障管理等功能。
综上所述,借助于本发明的上述技术方案,通过构建可同时或单独运行IEC任务和C/C++任务的运行时系统,用户可以像普通PLC一样只使用IEC代码编程,也可以只使用C/C++代码编程并运行任务,甚至可以使用IEC任务和C/C++任务并行运行且允许进行数据交互。给用户的PLC编程的选择提供了极大的灵活性;并且C/C++任务可以像IEC任务一样被监视和跟踪,可以使用断点调试、变量监视等常规调试技术。本发明运行时系统运行于PLCLinux操作系统之上,若用户使用IEC代码,直接由IDE编译成目标代码;然后下装到Runtime执行,既保持既有PLC运行时系统架构不变;若用户使用C/C++代码,IDE编译并识别相关任务参数、变量及IO输入输出区,绑定到既有runtime架构中,并制定两类任务的数据交互方式;从而使得无论单独使用IEC编程或者C/C++编程,亦或者同时使用IEC和C/C++编程,均可以正常运行。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

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字节,并将数据读取结果返回至集成开发环境进行显示。
CN202310757680.0A 2023-06-26 2023-06-26 支持iec和c++任务同时或独立运行的运行时系统 Active CN116775038B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310757680.0A CN116775038B (zh) 2023-06-26 2023-06-26 支持iec和c++任务同时或独立运行的运行时系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310757680.0A CN116775038B (zh) 2023-06-26 2023-06-26 支持iec和c++任务同时或独立运行的运行时系统

Publications (2)

Publication Number Publication Date
CN116775038A true CN116775038A (zh) 2023-09-19
CN116775038B CN116775038B (zh) 2024-06-04

Family

ID=88011221

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310757680.0A Active CN116775038B (zh) 2023-06-26 2023-06-26 支持iec和c++任务同时或独立运行的运行时系统

Country Status (1)

Country Link
CN (1) CN116775038B (zh)

Citations (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6009268A (en) * 1997-02-22 1999-12-28 Robert Bosch Gmbh Device for programming a stored program controller
US20030204560A1 (en) * 2002-04-26 2003-10-30 Chen Thomas C.H. Programmable Logic Controller with embedded Intelligent Web Server
US7233830B1 (en) * 2005-05-31 2007-06-19 Rockwell Automation Technologies, Inc. Application and service management for industrial control devices
CN201170857Y (zh) * 2007-08-21 2008-12-24 国电南京自动化股份有限公司 可编程逻辑控制器
WO2009104036A1 (en) * 2008-02-19 2009-08-27 Abb Research Limited A thin-client based architecture for engineering workplace in automation system
CN101587445A (zh) * 2009-06-19 2009-11-25 国网电力科学研究院 一种plc编译执行方法
US20100083223A1 (en) * 2008-09-30 2010-04-01 Ics Triplex Isagraf Inc. Compilation model
CN103814333A (zh) * 2011-07-06 2014-05-21 Abb股份公司 用于对可编程控制装置编程和配置的方法和设备
CN105988409A (zh) * 2015-02-11 2016-10-05 广东顺德华焯机械科技有限公司 一种基于EtherCat总线通讯和软PLC平台的数控系统
CN106445640A (zh) * 2016-10-20 2017-02-22 南京南瑞继保电气有限公司 一种嵌入式虚拟装置运行方法和系统
DE102016121542A1 (de) * 2016-11-10 2018-05-17 Phoenix Contact Gmbh & Co. Kg Ablaufsteuerung von Programmmodulen
CN109254776A (zh) * 2018-09-29 2019-01-22 深圳市雷赛控制技术有限公司 多语言代码编译方法及编译器
CN109937404A (zh) * 2016-11-10 2019-06-25 菲尼克斯电气公司 程序模块之间的实时数据交换
US20190286089A1 (en) * 2016-11-10 2019-09-19 Phoenix Contact Gmbh & Co. Kg Sequence control of program modules
CN110543144A (zh) * 2019-08-30 2019-12-06 天津施格自动化科技有限公司 图形化编程控制机器人的方法及系统
WO2020197011A1 (ko) * 2019-03-25 2020-10-01 엘에스일렉트릭(주) 프로그램 언어와 제조사에서 정의한 언어의 혼용을 위한 메모리 매핑 방법
CN114327628A (zh) * 2021-12-28 2022-04-12 深圳市汇川技术股份有限公司 分层控制方法、系统、终端设备及存储介质
CN115248570A (zh) * 2022-05-09 2022-10-28 山东省计算中心(国家超级计算济南中心) 一种编译型可编程逻辑控制器的开发环境及管理开发作业方法
CN115794047A (zh) * 2022-06-24 2023-03-14 上海中广核工程科技有限公司 基于plc的跨语言平台通信方法、系统、设备及介质
CN115857883A (zh) * 2022-12-19 2023-03-28 北京东土科技股份有限公司 工业控制软件开发方法、装置和计算设备
CN115878178A (zh) * 2022-11-03 2023-03-31 中科时代(深圳)计算机系统有限公司 Codesys运行时软件的移植方法、装置及存储介质
CN115934062A (zh) * 2022-12-26 2023-04-07 北京东土科技股份有限公司 一种工业控制程序开发平台及方法

Patent Citations (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6009268A (en) * 1997-02-22 1999-12-28 Robert Bosch Gmbh Device for programming a stored program controller
US20030204560A1 (en) * 2002-04-26 2003-10-30 Chen Thomas C.H. Programmable Logic Controller with embedded Intelligent Web Server
US7233830B1 (en) * 2005-05-31 2007-06-19 Rockwell Automation Technologies, Inc. Application and service management for industrial control devices
CN201170857Y (zh) * 2007-08-21 2008-12-24 国电南京自动化股份有限公司 可编程逻辑控制器
WO2009104036A1 (en) * 2008-02-19 2009-08-27 Abb Research Limited A thin-client based architecture for engineering workplace in automation system
US20100083223A1 (en) * 2008-09-30 2010-04-01 Ics Triplex Isagraf Inc. Compilation model
CN101587445A (zh) * 2009-06-19 2009-11-25 国网电力科学研究院 一种plc编译执行方法
CN103814333A (zh) * 2011-07-06 2014-05-21 Abb股份公司 用于对可编程控制装置编程和配置的方法和设备
CN105988409A (zh) * 2015-02-11 2016-10-05 广东顺德华焯机械科技有限公司 一种基于EtherCat总线通讯和软PLC平台的数控系统
CN106445640A (zh) * 2016-10-20 2017-02-22 南京南瑞继保电气有限公司 一种嵌入式虚拟装置运行方法和系统
DE102016121542A1 (de) * 2016-11-10 2018-05-17 Phoenix Contact Gmbh & Co. Kg Ablaufsteuerung von Programmmodulen
CN109937404A (zh) * 2016-11-10 2019-06-25 菲尼克斯电气公司 程序模块之间的实时数据交换
US20190286089A1 (en) * 2016-11-10 2019-09-19 Phoenix Contact Gmbh & Co. Kg Sequence control of program modules
CN109254776A (zh) * 2018-09-29 2019-01-22 深圳市雷赛控制技术有限公司 多语言代码编译方法及编译器
WO2020197011A1 (ko) * 2019-03-25 2020-10-01 엘에스일렉트릭(주) 프로그램 언어와 제조사에서 정의한 언어의 혼용을 위한 메모리 매핑 방법
CN110543144A (zh) * 2019-08-30 2019-12-06 天津施格自动化科技有限公司 图形化编程控制机器人的方法及系统
CN114327628A (zh) * 2021-12-28 2022-04-12 深圳市汇川技术股份有限公司 分层控制方法、系统、终端设备及存储介质
CN115248570A (zh) * 2022-05-09 2022-10-28 山东省计算中心(国家超级计算济南中心) 一种编译型可编程逻辑控制器的开发环境及管理开发作业方法
CN115794047A (zh) * 2022-06-24 2023-03-14 上海中广核工程科技有限公司 基于plc的跨语言平台通信方法、系统、设备及介质
CN115878178A (zh) * 2022-11-03 2023-03-31 中科时代(深圳)计算机系统有限公司 Codesys运行时软件的移植方法、装置及存储介质
CN115857883A (zh) * 2022-12-19 2023-03-28 北京东土科技股份有限公司 工业控制软件开发方法、装置和计算设备
CN115934062A (zh) * 2022-12-26 2023-04-07 北京东土科技股份有限公司 一种工业控制程序开发平台及方法

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
ANYCONTROL: "自主可控IEC61131-3可编程系统-奥特思技术", Retrieved from the Internet <URL:《www.auto-studio.com.cn/content88.html》> *
张海伟: "和利时IEC 61131-3编程软件平台", 自动化博览, 30 June 2016 (2016-06-30), pages 42 - 44 *
范三龙;秦成虎;: "可编程逻辑运行环境的研究与实现", 工业仪表与自动化装置, no. 06, 15 December 2019 (2019-12-15) *
陈思宁, 王善永, 刘国敏, 赵雪飞: "MB系列智能可编程控制器的标准化编程", 水电自动化与大坝监测, no. 05, 30 October 2005 (2005-10-30) *
韩辉: "基于模型驱动的机器人建模语言的研究与实现", 中国优秀硕士学位论文全文数据库 信息科技辑, 15 February 2021 (2021-02-15), pages 140 - 1038 *
龚龙峰;张晓朋;: "新一代工业控制器PAC:PLCmodule-C32", 中国仪器仪表, no. 08, 25 August 2013 (2013-08-25) *

Also Published As

Publication number Publication date
CN116775038B (zh) 2024-06-04

Similar Documents

Publication Publication Date Title
US5319645A (en) Method for debugging and testing the correctness of programs
EP0622714B1 (en) Integrated automation development system and method
KR100607141B1 (ko) 개방형 분산처리구조의 로봇 제어 시스템
Hofmeister et al. Dynamic reconfiguration in distributed systems: Adapting software modules for replacement
US20060268967A1 (en) Supplying instruction to operational stations
CN114064152B (zh) 基于动态加载的嵌入式多核调试系统及其调试方法
CN109983411B (zh) 程序模块的流程控制
Saksena et al. Design and implementation of Maruti-II
EP3387536A1 (en) Method and device for non-intrusively collecting function trace data
JPH1021094A (ja) リアルタイム制御方式
JP2820189B2 (ja) 数値制御装置の制御ソフトウェア実行システム
CN116775038B (zh) 支持iec和c++任务同时或独立运行的运行时系统
CN112559336B (zh) 自适应调试异构计算芯片的方法、装置、系统及主板芯片
CN112579460B (zh) 一种基于多核嵌入式系统的多级调试方法
JPH08123699A (ja) 並行処理方法、並行処理システム及び並行処理用プログラムの変換ツール
Bubak et al. Monitoring of distributed java applications
Matelan The FLEX/32 multicomputing environment
Crockett et al. System software for the finite element machine
Luders et al. Case study: Componentization of an industrial control system
Bychkov et al. Microcontroller with ARM kernel and real time operating system
CN116846943A (zh) 可编程人机界面与控制器间远程过程调用方法及系统
Gaglianello et al. The Meglos user interface
Halsall et al. Development environment for the design and test of applications software for a distributed multiprocessor computer system
Zaki et al. DPDP: An interactive debugger for parallel and distributed processing
Mitschele-Thiel On the integration of model-based performance optimization and program implementation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant