CN113360142B - 一种数控内嵌plc中间文件的设计与编译方法 - Google Patents
一种数控内嵌plc中间文件的设计与编译方法 Download PDFInfo
- Publication number
- CN113360142B CN113360142B CN202110708102.9A CN202110708102A CN113360142B CN 113360142 B CN113360142 B CN 113360142B CN 202110708102 A CN202110708102 A CN 202110708102A CN 113360142 B CN113360142 B CN 113360142B
- Authority
- CN
- China
- Prior art keywords
- compiling
- intermediate file
- numerical control
- bit
- embedded plc
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Programmable Controllers (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种数控内嵌PLC中间文件的设计不编译方法,该方法是基于指令表语言的内嵌PLC源程序的编码方法、中间文件的数据结构及其编译执行算法的设计,结合词法分析、语法分析以及语义分析,可以构建一个内嵌PLC完整丏可实现的编译器;并丏通过上述数据结构以及定义扩展更多的继电器、寄存器,以及更多更实用的功能指令,使得编译器更加灵活,功能更加强大。
Description
技术领域
本发明涉及内嵌在数控系统或者工业机器人控制系统中的PLC的技术领域,具体涉及一种基于指令表语言扩展的内嵌PLC源程序的编码方法、中间文件的数据结构及其编译执行算法的设计。
背景技术
PLC,也就是可编程逻辑控制器,是种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。在PLC系统中,从上位机将由梯形图转化得到的指令表形式表示的控制程序下载到PLC主控制器中,通过对指令表的编译(见图1)或者解释执行便可以实现PLC程序的控制逻辑,经相应的IO口模块驱动现场设备执行控制任务。
例如,中国专利(CN101364098A)葛芬等人公开了在PLC中梯形图转化为指令表的示例。中国专利(CN10104317631A)公开了在PLC中指令表转化为梯形图的示例。中国专利(CN101957745A)公开了在PLC中梯形图转化为结构文本语言的示例。论文《PLC源程序编码方法与解释执行算法设计》公开了一种结构化文本解释执行的算法设计。论文《基于Lex&Yacc的PLC指令编译器的研究与实现》公开了一种指令表编译的设计方法。论文《编译型PLC的设计与实现》公开了另外一种指令表编译的设计方法。论文《数控系统中内嵌式PLC梯形图编程的软件实现》简单介绍了某厂家的PLC梯形图软件的实现方法。
前面专利都是针对通用PLC的几种编程语言的转化实例。后面的论文中无论是针对通用PLC还是内嵌PLC,大多将词法分析、语法分析及语义分析突出了自己的特点,但是针对编译成目标文件以及目标文件的结构介绍很少,甚至没有,这样对于创建一个内嵌PLC完整的编译器造成了比较大的障碍。
发明内容
基于此,为了解决上述问题,本发明的首要目的在于提供一种数控内嵌PLC中间文件的设计与编译方法,该方法通过中间文件的数据结构的设计,结合词法分析、语法分析以及语义分析,可以构建一个内嵌PLC完整且可实现的编译器。
本发明的另一个目的在于提供一种数控内嵌PLC中间文件的设计与编译方法,该方法可以通过数据结构以及定义扩展更多的继电器、寄存器,以及更多更实用的功能指令,使得编译器更加灵活,功能更加强大。
为实现上述目的,本发明提供如下技术方案:
一种数控内嵌PLC中间文件的设计与编译方法,该方法综合利用现有技术中的词法分析、语法分析以及语义分析,可以构建一个内嵌PLC完整且可实现的编译器;
首先,定义这样的中间文件的数据结构:
typedef struct{
char cmd;
char arg_t;
union{
unsigned int num;
struct{
unsigned char reg;
unsigned char bit;
unsigned short no;
}reg_no_bit;
}arg;
}BinCode;
其中,整个中间文件由含n个BinCode结构体的数组组成,定义BinCode结构体中的各个成员的具体含义以及取值范围;cmd表示指令代码,分为基本指令和功能指令;arg_t表示参数类型,用来指示共用体中的数据意义。0:无参数,1:寄存器-组号-位号,2:寄存器-组号,3:常数,4:状态字;arg根据arg_t的意义来确定本共用体的信息;其中结构体reg_no_bit表示寄存器-组号-位号;num表示常数或状态字;
然后,将词法、语法以及语义检查过的数据结构进行行扫描,根据以上数据结构,匹配指令表关键字符号,最后编译成二进制中间文件。
进一步,所述数据结构形成指令表文件,指令表文件是由各指令按结构体BinCode在中间文件的存储格式形成,所述指令表文件如下:
所述编译成二进制中间文件的过程如下:
先判断是否是程序尾,如果是,则结束,否则进行下一步;
用getline读取整行文本;
判断是否有命令,进行命令编译;
判断是否有地址,进行地址编译;
判断是否是继电器、寄存器,进行继电器、寄存器的序号、位编译;
完成行编译。
与现有技术相比,本发明的有益效果是:
本发明所实现的数控内嵌PLC中间文件的设计与编译方法,是基于指令表语言的内嵌PLC源程序的编码方法、中间文件的数据结构及其编译执行算法的设计,该方法综合利用现有技术中的词法分析、语法分析以及语义分析,可以构建一个内嵌PLC完整且可实现的编译器;并且通过上述数据结构以及定义扩展更多的继电器、寄存器,以及更多更实用的功能指令,使得编译器更加灵活,功能更加强大。
附图说明
图1为本发明内嵌PLC编译器的流程图。
图2为本发明内嵌PLC编译器中间文件生成的流程图。
图3为本发明内嵌PLC编译器的多级基本指令表。
图4是由图3的多级基本指令表编译出的中间文件。
图5为本发明内嵌PLC编译器的多级多功能指令表。
图6是由图5的其多级多功能指令表编译出的中间文件。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1、图2所示,内嵌PLC配合数控系统协调完成数控机床的控制,起辅助作用。内嵌PLC相当于机床与数控系统之间的桥梁,一方面接受数控系统的控制代码M、S、T等顺序动作信息,对其进行译码,转换成对应的控制信号,控制辅助装置完成机床相应的开关动作;另一方面还接受机床操作面板的指令,可以直接控制机床的动作,同时将一部分指令送往数控系统用于加工过程的控制,其中:X为从设备输入的继电器;Y为输出给设备的继电器;F为来自数控系统的输入继电器;G为输出给数控系统的继电器;R为中间继电器;T为定时器;C为计数器等等,他们的地址码用大写字母的ASCII码表示。PLC指令的单词符号一般可以分为以下几种:
·基本字。如LD,AND,OUT等。
·常数。
·注释词。即“/”或者″//″开始的注释语句。
·界符。空格或制表符TAB。
·结束词。本文中为换行符。
根据PLC指令表的符号特点,本发明首先可以定义这样的中间文件的数据结构:
typedef struct{
char cmd;
char arg_t;
union{
unsigned int num;
struct{
unsigned char reg;
unsigned char bit;
unsigned short no;
}reg_no_bit;
}arg;
}BinCode;
整个中间文件由含n个BinCode结构体的数组组成,定义BinCode结构体中的各个成员的具体含义以及取值范围,其中,cmd表示指令代码,分为基本指令和功能指令;arg_t表示参数类型,用来指示共用体中的数据意义。0:无参数,1:寄存器-组号-位号,2:寄存器-组号,3:常数,4:状态字;arg根据arg_t的意义来确定本共用体的信息。其中结构体reg_no_bit表示寄存器-组号-位号;num表示常数或状态字。
具体见表1,表1为各指令按结构体BinCode在中间文件的存储格式,其中仅列出部分,
表1
然后,将词法、语法以及语义检查过的指令表文件进行行扫描,根据以上数据结构,匹配指令表关键字符号,最后编译成二进制中间文件。
具体地说,PLC先对词法进行分析,然后对语法进行分析,最后对语义进行分析,上述分析完成后,PLC程序转化,编译成二进制中间文件。
具体的编译过程,如图2所示。
先判断是否是程序尾,如果是,则结束,否则进行下一步;
用getline读取整行文本;
判断是否有命令,进行命令编译;
判断是否有地址,进行地址编译;
判断是否是继电器、寄存器,进行继电器、寄存器的序号、位编译;
完成行编译。
图3所示,为编写一个具有两级结构的PLC的基本指令表,实现数控机床上的一些基本操作要求,如:
//EMERGENCY ......(1)
LD X3.1 ......(2)
OUT G3.1 ......(3)
END1 ......(4)
在程序行(1)中用″//″开始,表示本行是注释行,通过如下代码进行编译:
只要有一个′/′字符,就表示是注释行,所以cmd赋值为BLANK,返回,进行下一行扫描。
在程序行(2)中,首先将关键字符号全部大写,如图4中401所示,将LD译码为00010000。402所示,将X3.1编译为5802 0300,其中58为大写字符′X′的ASCII码,03是′X′的字节地址,02是′X′的2的″位″次方,所以″位″为1。
在程序行(3)中,如图4中403所示,将OUT译码为0601 0000。404所示,将G3.1编译为4702 0300,其中47为大写字符′G′的ASCII码,03是′G′的字节地址,02是′G′的2的″位″次方,所以″位″为1。
在程序行(4)中,如图4中405所示,将END1译码为1400 0000 xxxx xxxx。其中xxxx表示任何数都无所谓。
在305中LDI X5.4,将LDI译码为图4中406的0001 0000。将X5.4编译为5810 0500,其中58为大写字符′X′的ASCII码,05是′X′的字节地址,10是′X′的2的″位″次方,所以″位″为4。
在306中OR X0.1,将OR译码为图4中407的0401 0000。将X0.1编译为5802 0000,其中58为大写字符′X′的ASCII码,00是′X′的字节地址,02是′X′的2的″位″次方,所以″位″为1。
在307中ANI X0.2,将ANI译码为图4中408的0301 0000。将X0.1编译为5804 0000,其中58为大写字符′X′的ASCII码,00是′X′的字节地址,04是′X′的2的″位″次方,所以″位″为2。
在308中ORB,将ORB译码为图4中409的0b00 0000 xxxx xxxx。其中xxxx表示任何数都无所谓。
在309中END2,将END2译码为图4中410的1500 0000 xxxx xxxx。其中xxxx表示任何数都无所谓。
再编写一个具有两级结构的PLC的多功能指令表,实现数控机床上的其他的操作要求,如:
在图5的501中DECB 1 F8 0 R10,将DECB译码为图6中601的1d04 0000。接着的1译码为602中的0100 0000;第二个参数的CMD和arg_t译码为603中的ff02,F8译码为604中的4600 0800;第三个参数的CMD和arg_t译码为605中的fe03,0译码为606中的0000 0000;第四个参数的CMD和arg_t译码为607中的fd02,R10译码为608中的5200 0a00。
在图5的502中TMRC T0 160,将TMRC译码为图6中609的1902 0000。接着的T0译码为610中的5401 0000;第二个参数的CMD和arg_t译码为611中的ff03,160译码为612中的a000 0000。
总之,本发明所综合利用词法分析、语法分析以及语义分析,可以构建一个内嵌PLC完整且可实现的编译器;并且通过上述数据结构以及定义扩展更多的继电器、寄存器,以及更多更实用的功能指令,使得编译器更加灵活,功能更加强大。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (2)
1.一种数控内嵌PLC中间文件的设计与编译方法,其特征在于该方法首先,定义中间文件的数据结构:
typedef struct{
char cmd;
char arg_t;
union{
unsigned int num;
struct{
unsigned char reg;
unsigned char bit;
unsigned short no;
}reg_no_bit;
}arg;
}BinCode;
其中,整个中间文件由含n个BinCode结构体的数组组成,定义BinCode结构体中的各个成员的具体含义以及取值范围;cmd表示指令代码,分为基本指令和功能指令;arg_t表示参数类型,用来指示共用体中的数据意义;其中结构体reg_no_bit表示寄存器-组号-位号;num表示常数或状态字;
然后,将词法、语法以及语义检查过的数据结构进行行扫描,根据以上数据结构,匹配指令表关键字符号,最后编译成二进制中间文件。
2.如权利要求1所述的数控内嵌PLC中间文件的设计与编译方法,其特征在于所述编译成二进制中间文件的过程如下:
先判断是否是程序尾,如果是,则结束,否则进行下一步;
用getline读取整行文本;
判断是否有命令,进行命令编译;
判断是否有地址,进行地址编译;
判断是否是继电器、寄存器,进行继电器、寄存器的序号、位编译;
完成行编译。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110708102.9A CN113360142B (zh) | 2021-06-24 | 2021-06-24 | 一种数控内嵌plc中间文件的设计与编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110708102.9A CN113360142B (zh) | 2021-06-24 | 2021-06-24 | 一种数控内嵌plc中间文件的设计与编译方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113360142A CN113360142A (zh) | 2021-09-07 |
CN113360142B true CN113360142B (zh) | 2023-07-07 |
Family
ID=77536281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110708102.9A Active CN113360142B (zh) | 2021-06-24 | 2021-06-24 | 一种数控内嵌plc中间文件的设计与编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113360142B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7546234B1 (en) * | 2003-01-08 | 2009-06-09 | Xambala, Inc. | Semantic processing engine |
CN104239115A (zh) * | 2014-07-24 | 2014-12-24 | 汕头大学 | 一种plc编程语言的编译方法 |
CN109254776A (zh) * | 2018-09-29 | 2019-01-22 | 深圳市雷赛控制技术有限公司 | 多语言代码编译方法及编译器 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4972365A (en) * | 1987-05-01 | 1990-11-20 | Allen-Bradley Company, Inc. | Executing downloaded user programs in a programmable controller |
JP4366575B2 (ja) * | 2003-11-05 | 2009-11-18 | オムロン株式会社 | ツール |
JP2008040651A (ja) * | 2006-08-03 | 2008-02-21 | Mitsubishi Electric Corp | プログラマブル表示器とそのファイル変換方法およびその方法をプログラマブル表示器に実行させるプログラム |
JP2009086898A (ja) * | 2007-09-28 | 2009-04-23 | Delta Electronics Inc | プログラム可能な論理制御装置用マシーンコード・プログラムのコンパイル法 |
JP2011123719A (ja) * | 2009-12-11 | 2011-06-23 | Renesas Electronics Corp | 言語処理システム、言語処理方法、及び言語処理用プログラム |
CN103123590A (zh) * | 2011-11-18 | 2013-05-29 | 中国科学院沈阳计算技术研究所有限公司 | 指令表il程序到c语言程序的编译方法 |
CN103218349A (zh) * | 2013-03-08 | 2013-07-24 | 广东工业大学 | Pmw格式文件中plc指令存储规律的解读及转换方法 |
CN103942081A (zh) * | 2014-03-07 | 2014-07-23 | 东莞市升力智能科技有限公司 | Plc梯形图il指令表生成方法 |
CN104267654A (zh) * | 2014-08-01 | 2015-01-07 | 中南大学 | 梯形图程序转换成指令表程序及其编译的方法与系统 |
CN106844310A (zh) * | 2017-01-22 | 2017-06-13 | 南京南瑞继保电气有限公司 | 一种结构化文本代码处理方法和系统 |
US10169196B2 (en) * | 2017-03-20 | 2019-01-01 | Microsoft Technology Licensing, Llc | Enabling breakpoints on entire data structures |
CN109858775A (zh) * | 2019-01-10 | 2019-06-07 | 湖南科技大学 | 基于数控系统的凸轮轴智能磨削工艺软件数据库系统的集成应用方法 |
CN109918081B (zh) * | 2019-03-01 | 2022-06-03 | 中安智联未来有限公司 | 一种编译方法及编译器 |
US11074055B2 (en) * | 2019-06-14 | 2021-07-27 | International Business Machines Corporation | Identification of components used in software binaries through approximate concrete execution |
CN111708525B (zh) * | 2020-06-24 | 2021-07-30 | 华中科技大学 | 一种基于xml工业机器人图形化编程系统解释器 |
CN112181426B (zh) * | 2020-09-19 | 2021-06-25 | 中国人民解放军战略支援部队信息工程大学 | 一种汇编程序控制流路径检测方法及装置 |
-
2021
- 2021-06-24 CN CN202110708102.9A patent/CN113360142B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7546234B1 (en) * | 2003-01-08 | 2009-06-09 | Xambala, Inc. | Semantic processing engine |
CN104239115A (zh) * | 2014-07-24 | 2014-12-24 | 汕头大学 | 一种plc编程语言的编译方法 |
CN109254776A (zh) * | 2018-09-29 | 2019-01-22 | 深圳市雷赛控制技术有限公司 | 多语言代码编译方法及编译器 |
Non-Patent Citations (3)
Title |
---|
PLC手持编程器编译系统的设计;未庆超等;《自动化与信息工程》;20121215(第06期);全文 * |
一种基于IPC的内嵌式PLC的实现方法;李左章等;《机械与电子》;20001024(第05期);全文 * |
基于μC/OSⅡ-的软PLC研究与实现;张小亮等;《机床与液压》;20080515(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113360142A (zh) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO1995015523A1 (en) | Multi-language generation of control program for an industrial controller | |
Liu et al. | An intelligent NC program processor for CNC system of machine tool | |
CN113360142B (zh) | 一种数控内嵌plc中间文件的设计与编译方法 | |
WO1997040425A3 (en) | Idiomatic control language implementation | |
JP2009086898A (ja) | プログラム可能な論理制御装置用マシーンコード・プログラムのコンパイル法 | |
CN113625661B (zh) | 一种数控内嵌plc中间文件转化指令表的设计方法 | |
Wang et al. | Design of built-in PLC Object File in CNC system | |
CN113625652B (zh) | 一种数控内嵌plc中间文件处理及译码执行方法 | |
CN101382783A (zh) | 可编程逻辑控制器的程序机械码编译方法 | |
JP4443436B2 (ja) | 制御システムおよび制御方法 | |
CN107450893B (zh) | 一种跨平台数字控制器编程方法 | |
CN115729174A (zh) | 一种非标机床控制系统 | |
CN101414218B (zh) | 键盘发送热键的键码的方法 | |
CN113632016A (zh) | 用于混合使用编程语言和制造商定义的语言的内存映射方法 | |
KR20100063957A (ko) | 임베디드 컨트롤 방법 | |
US20050198595A1 (en) | State machine optimization system | |
Gen-Yuan et al. | Discuss the Programming Method of Sequential Control with Ladder Diagram | |
Guo et al. | A study of a universal NC program processor for a CNC system | |
CN114968252A (zh) | 一种自动编译方法、系统及控制器 | |
Chivers et al. | History and Future of FORTRAN | |
Gao et al. | Research on universal NC program processor for CNC system | |
Teng et al. | Research of NC Code Interpreter Based on Theory of Finite Automaton | |
JP2007133622A (ja) | エンジニアリングツール及びプログラム変換方法 | |
KR100423742B1 (ko) | 순차기능챠트에 의한 전용 제어 시스템 | |
JP2691709B2 (ja) | 数値制御装置 |
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 |