一种在FPGA平台实现PLC控制的方法及装置技术领域
本发明属于微处理器控制技术领域,具体是一种在FPGA平台实现PLC控制的方法及装置。
背景技术
可编程逻辑控制器PLC(ProgrammableLogicController)已被广泛应用于制造系统多年,传统硬PLC经过几十年的发展,已经成为一项成熟技术,它以其高速度、高性能、高可靠性在工业控制领域得到了广泛的应用。但是,传统硬PLC有很大的缺点:生产厂商之间的产品相互不兼容,缺少明确一致的标准,难以构建开放的硬件体系结构;各厂商产品的编程方法差别很大,技术专有性较强,工作人员必须经过较长时间的专业培训才能掌握某一种产品的编程方法;传统PLC的生产被几家厂商所垄断,导致PLC价格昂贵。为了改善传统硬PLC的缺点软PLC诞生了,软PLC是基于IPC或EPC的开放结构的控制系统。它具有硬PLC的功能、开放的体系结构、遵循国际工业标准和事实上的工业标准(如IEC61131-3标准和IEC61491标准)、能充分利用PC机的资源、更强的数据处理能力、友好的人机界面等特点。软PLC利用软件技术可将标准的工业PC转换成全功能的PLC过程控制器。软PLC可综合计算机和PLC的开关量控制、模拟量控制、数学运算、数值处理、通信网络等功能,通过一个多任务控制内核,可提供强大的指令集、准确的扫描周期、可靠的操作和连接各种I/O系统及网络的开放式结构。软PLC提供与硬PLC同样的功能,同时具备了PC环境的各种优点,软PLC相对传统PLC具有很多优势。但是,软PLC有一个致命的缺点:软PLC是一种用软件模拟实现传统硬件PLC控制功能的控制装置,这导致软PLC的实时性大不如传统硬PLC,在很多高速工业控制领域,软PLC无法满足实时性要求。
发明内容
针对现有技术的缺点,本发明提供一种在FPGA平台实现PLC控制的方法及装置,该方法克服软PLC实时性低的缺点,将符合IEC61131-3标准的嵌入式PLC嵌入到FPGA平台上,提高了PLC的实时性和灵活性;本装置利用FPGA可以并行执行程序的特性,使得FPGA-PLC可以串行和并行混合执行PLC程序以大幅提高PLC的实时性。
实现本发明目的的技术方案是:
一种在FPGA平台实现PLC控制的方法,包括如下步骤:
1)生成PLC梯形图;
2)生成IEC61131-3标准的结构化文本文件;
3)确定PLC每行结构化文本中的逻辑依赖关系;
分析步骤2得到的结构化文本文件,得到PLC逻辑间的依赖关系;
4)建立FPGA进程的并发扫描模型;
由步骤3产生的依赖关系得到FPGA进程的并发扫描模型;
5)实现结构化文本到FPGA转换;
根据步骤4的并发扫描模型实现结构化文本到FPGA转换;
6)综合生成FPGA固件;
使用FPGA工具集将步骤5)中联合用FPGA模块实现的IEC61131-3基本功能模块库进行
综合生成FPGA固件。
步骤3)中依赖关系的定义:如果B(逻辑算术表达式)的输入参数包含A(逻辑算术表达式)的输出参数,那么B依赖于A,即A的输出会影响B的输出。扫描结构化文本文件中所有逻辑算术表达式语句就可得到逻辑算术表达式间的依赖关系,即PLC逻辑间的依赖关系:
Y1=X1ORX2(1)
Y2=Y1ANDX3(2)
Y3=X2ORY2ORX4(3)
式中:(1)(2)(3)是抽象出来的3行结构化文本逻辑算术表达式,(1)(2)(3)的‘=’左边Y1、Y2、Y3表示的是输出变量,‘=’右边X1、X2、Y1、X3、X2、Y2、X4表示的是输入变量,OR逻辑或运算符、AND是逻辑与运算符;
每次提取结构化文本文件中的一行逻辑算术表达式的输入和输出变量,每提取一行逻辑算术表达式的输入和输出变量,就给新的输入和输出变量分配一个初始值为1的计数器,通过该计数器的数值大小,来确定结构化文本中的不同逻辑算术表达式之间的依赖关系,第一次提取式(1)的输入变量是:X1、X2,输出变量是:Y1。因为每行逻辑算术表达式的输入变量只用一次,而输出变量每次都要用,所以将Y1放到关键词集合(关键词集合就是逻辑算术表达式的输出变量的集合,后面统一称作关键词)中保存起来,刚开始关键词集合为空,
初始化:
Y1_Count=1,
X1_Count=1,
X2_Count=1,
这三个关键词计数器值,就可以计算当前行逻辑算术表达式ID(逻辑算术表达式的编号值)的值,下面给出下面ID的计算公式:
ID=Yx_Count=MAX{X1_Count,...,Xn_Count}(4)
式中,ID:当前行逻辑算术表达式的编号值;Yx_Count:中的x代表1到n的一个数字;X1_Count,...,Xn_Count:代表输入关键词计数器的值;MAX{X1_Count,...,Xn_Count}:中的MAX表示取出所有的关键词计数值的最大值;
用公式(4)计算:
ID=Yx_Count=MAX{X1_Count,X2_Count}=MAX{1,1}=1,所以第一行逻辑算术表达式的ID=1,此时可以保存式(1)的ID=1,第二次提取式(2)关键词时,根据前面依赖的定义,比较的是式(2)的输入关键词是否包含式(1)的输出关键词,由于式(1)的输出关键词都放到了关键词集合中,所以只需要提取式(2)的输入关键词和关键词集合中保存的关键词比较,看式(2)的输入关键词是否包含有关键词集合中的关键词,如果有则表示有依赖关系,现在关键词集合已经有一个关键词Y1,式(2)的输入关键词包含关键词集合中的Y1,所以有依赖关系,此时需要用Y1_Count+1的值来代替Y1_Count的值来计算的_ID,这样能保证当前行逻辑算术表达式计算出来的ID值比它所依赖的的ID值至少大1,从而保证按照依赖的顺序执行;
下面用公式(4)来计算式(2)的ID值,提取式(2)的关键词Y2、Y1、X3,因为Y1已经存在于关键词集合中,说明有依赖关系,所以用Y1_Count+1来代替Y1_Count的值来计算当前行的ID值,ID=Y2_Count=MAX{Y1_Count+1,X3_Count}={2,1}=2,此时可以保存式(2)的ID=2,同理按照式(2)的计算过程可以计算出式(3)的ID=3,用ID值就可以直接通过ID数值确定每一行逻辑算术表达式的依赖关系:(1)ID=1、(2)ID=2、(3)ID=3说明逻辑算术表达式执行顺序是(1)→(2)→(3)按顺序执行的,执行顺序是按照ID值从小到大的顺序来执行。
步骤4)中,每一行逻辑算术表达式会映射到到一个单独的FPGA进程。每一个进程开始处都是一个关于当前进程组号的判断,只有在当前进程组号等于某个常数时该进程才开始有效工作,该常数被视为一个Process_ID,决定了一个FPGA进程何时被执行,本设计称之为进程组序号值。Process_ID和ID在数值上是相等的,只要ID确定了,Process_ID就确定了。Process_ID值相同的被视为同一进程组,同一进程组内的进程并行工作,也就是说Process_ID值相同的会被同时并行执行;
为了保证能够正确合理的按照顺序并发执行进程,使用一个单独的进程来实现上述进程组管理功能。此进程主要对当前进程组号不停的循环递增:程当FPGA复位时cur_pro_no(当前进程组号)值为0,否则每当上一个进程组结束时cur_pro_no就自增,直至到达max_pro_no(最大进程组号)后回到0并重新循环,FPGA-PLC的一个完整扫描周期等于所有进程组都被执行的时间,通过这种进程组号顺序循环递增的方式来实现PLC的顺序并发扫描执行程序的功能。进程组号递增到的值和其中Process_ID(数值上和ID值相等)值相等时,对应的进程就会被执行。如果有多行进程的Process_ID值和进程组递增到的值相同,那么这几行Process_ID值相同的进程就被并行执行。
步骤5)中,结构化文本使用布尔逻辑表达式和模块逻辑表达式这两种表达式,因此转化工作也按这两种情况进行;
布尔逻辑表达式情况下只需把结构化文本中的布尔逻辑运算表达式符直接替换为Verilog语言的逻辑运算符即可,下表就是逻辑运算符替换表,
结构化文本 AND OR NOT NOT(x1)AND(m0 OR x0)
硬件描述语言 & | ~ ~(x1)&(m0|x0)
结构化文本中的模块逻辑表达式被转化为IEC61131-3基础库中某模块的一个实例,并通过线网传递所需的参数,例如结构化文本中计数器模块TON0(IN:=NOT(x1)AND(m0ORx0),PT:=T#2000000ns)转换Verilog语言就是TONTON0(sys_clk,sys_rstn,TON0_IN0_WIRE,TON0_OUT0_WIRE);其中TON0是TON模块的一个实例;
此根据步骤4的并发扫描模型和步骤5结构化文本到VerilogHDL规则,实现结构化文本到FPGA的转换;
步骤6)中使用FPGA工具集将步骤5)中联合用FPGA模块实现的IEC61131-3基本功能模块库进行综合生成FPGA固件;
一种在FPGA平台实现PLC控制装置,包括输出部分、芯片部分、输入部分、端口部分和串口部分;
芯片部分与输出部分、输入部分、端口部分和串口部分分别连接。
输出部分、包括输出端口、继电器隔离电路、输出光耦合隔离电路,输出端口、继电器隔离电路、输出光耦合隔离电路顺序连接,输入光耦合隔离电路还与芯片部分的FPGA芯片相连接;
芯片部分、包括FPGA芯片;
输入部分、包括输入端口,输入光耦合隔离电路,输入端口与输入光耦合隔离电路相连接,输入光耦合隔离电路还与芯片部分的FPGA芯片相连接;
端口部分、包括调试端口;
串口部分、包括通信串口;
有益效果:
本发明提供了一种在FPGA平台实现PLC控制的方法及装置,该方法不但能正确实现PLC的输入输出逻辑,而且还可以在FPGA平台并行运行,从根本上改变了传统PLC的只能顺序扫描执行的方式,PLC执行的时间与进程的大小没有关系,只和进程有依赖层次有关系,FPGA-PLC执行效率是传统PLC无法比拟的;该装置将IEC-61131-3标准应用在了FPGA-PLC上,克服了传统PLC的封闭性和兼容性差等缺点,有利于打破高端PLC厂家垄断局面;还利用FPGA并行执行的特性,使得FPGA-PLC能并行执行PLC进程,大幅提升了PLC的实时性,FPGA的处理是纯硬件的实现过程,使得FPGA-PLC系统具有很高的稳定性。
附图说明
图1本装置结构框图
具体实施方式
以下结合附图和实施例对本发明内容作进一步的阐述,但不是对本发明的限定
实施例
一种在FPGA平台实现PLC控制的方法,包括如下步骤:
1)生成PLC梯形图;
2)生成IEC61131-3标准的结构化文本文件;
3)确定PLC每行结构化文本中的逻辑依赖关系;
分析步骤2得到的结构化文本文件,得到PLC逻辑间的依赖关系;
4)建立FPGA进程的并发扫描模型;
由步骤3产生的依赖关系得到FPGA进程的并发扫描模型;
5)实现结构化文本到FPGA转换;
根据步骤4的并发扫描模型实现结构化文本到FPGA转换;
6)综合生成FPGA固件;
使用FPGA工具集将步骤5)中联合用FPGA模块实现的IEC61131-3基本功能模块库进行
综合生成FPGA固件。
步骤3)中依赖关系的定义:如果B(逻辑算术表达式)的输入参数包含A(逻辑算术表达式)的输出参数,那么B依赖于A,即A的输出会影响B的输出。扫描结构化文本文件中所有逻辑算术表达式语句就可得到逻辑算术表达式间的依赖关系,即PLC逻辑间的依赖关系:
Y1=X1ORX2(1)
Y2=Y1ANDX3(2)
Y3=X2ORY2ORX4(3)
式中:(1)(2)(3)是抽象出来的3行结构化文本逻辑算术表达式,(1)(2)(3)的‘=’左边Y1、Y2、Y3表示的是输出变量,‘=’右边X1、X2、Y1、X3、X2、Y2、X4表示的是输入变量,OR逻辑或运算符、AND是逻辑与运算符;
每次提取结构化文本文件中的一行逻辑算术表达式的输入和输出变量,每提取一行逻辑算术表达式的输入和输出变量,就给新的输入和输出变量分配一个初始值为1的计数器,通过该计数器的数值大小,来确定结构化文本中的不同逻辑算术表达式之间的依赖关系,第一次提取式(1)的输入变量是:X1、X2,输出变量是:Y1。因为每行逻辑算术表达式的输入变量只用一次,而输出变量每次都要用,所以将Y1放到关键词集合(关键词集合就是逻辑算术表达式的输出变量的集合,后面统一称作关键词)中保存起来,刚开始关键词集合为空,
初始化:
Y1_Count=1,
X1_Count=1,
X2_Count=1,
这三个关键词计数器值,就可以计算当前行逻辑算术表达式ID(逻辑算术表达式的编号值)的值,下面给出下面ID的计算公式:
ID=Yx_Count=MAX{X1_Count,...,Xn_Count}(4)
式中,ID:当前行逻辑算术表达式的编号值;Yx_Count:中的x代表1到n的一个数字;X1_Count,...,Xn_Count:代表输入关键词计数器的值;MAX{X1_Count,...,Xn_Count}:中的MAX表示取出所有的关键词计数值的最大值;
用公式(4)计算:
ID=Yx_Count=MAX{X1_Count,X2_Count}=MAX{1,1}=1,所以第一行逻辑算术表达式的ID=1,此时可以保存式(1)的ID=1,第二次提取式(2)关键词时,根据前面依赖的定义,比较的是式(2)的输入关键词是否包含式(1)的输出关键词,由于式(1)的输出关键词都放到了关键词集合中,所以只需要提取式(2)的输入关键词和关键词集合中保存的关键词比较,看式(2)的输入关键词是否包含有关键词集合中的关键词,如果有则表示有依赖关系,现在关键词集合已经有一个关键词Y1,式(2)的输入关键词包含关键词集合中的Y1,所以有依赖关系,此时需要用Y1_Count+1的值来代替Y1_Count的值来计算的_ID,这样能保证当前行逻辑算术表达式计算出来的ID值比它所依赖的的ID值至少大1,从而保证按照依赖的顺序执行;
下面用公式(4)来计算式(2)的ID值,提取式(2)的关键词Y2、Y1、X3,因为Y1已经存在于关键词集合中,说明有依赖关系,所以用Y1_Count+1来代替Y1_Count的值来计算当前行的ID值,ID=Y2_Count=MAX{Y1_Count+1,X3_Count}={2,1}=2,此时可以保存式(2)的ID=2,同理按照式(2)的计算过程可以计算出式(3)的ID=3,用ID值就可以直接通过ID数值确定每一行逻辑算术表达式的依赖关系:(1)ID=1、(2)ID=2、(3)ID=3说明逻辑算术表达式执行顺序是(1)→(2)→(3)按顺序执行的,执行顺序是按照ID值从小到大的顺序来执行。
步骤4)中,每一行逻辑算术表达式会映射到到一个单独的FPGA进程。每一个进程开始处都是一个关于当前进程组号的判断,只有在当前进程组号等于某个常数时该进程才开始有效工作,该常数被视为一个Process_ID,决定了一个FPGA进程何时被执行,本设计称之为进程组序号值。Process_ID和ID在数值上是相等的,只要ID确定了,Process_ID就确定了。Process_ID值相同的被视为同一进程组,同一进程组内的进程并行工作,也就是说Process_ID值相同的会被同时并行执行;
为了保证能够正确合理的按照顺序并发执行进程,使用一个单独的进程来实现上述进程组管理功能。此进程主要对当前进程组号不停的循环递增:程当FPGA复位时cur_pro_no(当前进程组号)值为0,否则每当上一个进程组结束时cur_pro_no就自增,直至到达max_pro_no(最大进程组号)后回到0并重新循环,FPGA-PLC的一个完整扫描周期等于所有进程组都被执行的时间,通过这种进程组号顺序循环递增的方式来实现PLC的顺序并发扫描执行程序的功能。进程组号递增到的值和其中Process_ID(数值上和ID值相等)值相等时,对应的进程就会被执行。如果有多行进程的Process_ID值和进程组递增到的值相同,那么这几行Process_ID值相同的进程就被并行执行。
步骤5)中,结构化文本使用布尔逻辑表达式和模块逻辑表达式这两种表达式,因此转化工作也按这两种情况进行;
布尔逻辑表达式情况下只需把结构化文本中的布尔逻辑运算表达式符直接替换为Verilog语言的逻辑运算符即可,下表就是逻辑运算符替换表,
结构化文本 AND OR NOT NOT(x1)AND(m0OR x0)
硬件描述语言 & | ~ ~(x1)&(m0|x0)
结构化文本中的模块逻辑表达式被转化为IEC61131-3基础库中某模块的一个实例,并通过线网传递所需的参数,例如结构化文本中计数器模块TON0(IN:=NOT(x1)AND(m0ORx0),PT:=T#2000000ns)转换Verilog语言就是TONTON0(sys_clk,sys_rstn,TON0_IN0_WIRE,TON0_OUT0_WIRE);其中TON0是TON模块的一个实例;
此根据步骤4的并发扫描模型和步骤5结构化文本到VerilogHDL规则,实现结构化文本到FPGA的转换;
步骤6)中使用FPGA工具集将步骤5)中联合用FPGA模块实现的IEC61131-3基本功能模块库进行综合生成FPGA固件;
一种在FPGA平台实现PLC控制装置,包括输出部分、芯片部分、输入部分、端口部分和串口部分;
芯片部分与输出部分、输入部分、端口部分和串口部分分别连接。
输出部分、包括输出端口、继电器隔离电路、输出光耦合隔离电路,输出端口、继电器隔离电路、输出光耦合隔离电路顺序连接,输入光耦合隔离电路还与芯片部分的FPGA芯片相连接;
芯片部分、包括FPGA芯片;
输入部分、包括输入端口,输入光耦合隔离电路,输入端口与输入光耦合隔离电路相连接,输入光耦合隔离电路还与芯片部分的FPGA芯片相连接;
端口部分、包括调试端口;
串口部分、包括通信串口;
如图1所示:
一种在FPGA平台实现PLC控制装置,包括输出部分1、芯片部分2、输入部分3、端口部分4和串口部分5;
芯片部分2与输出部分1、输入部分3、端口部分4和串口部分5分别连接。
输出部分1、包括输出端口6、继电器隔离电路7、输出光耦合隔离电路8,输出端口6、继电器隔离电路7、输出光耦合隔离电路8顺序连接,输入光耦合隔离电路8还与芯片部分2的FPGA芯片9相连接;
芯片部分2、包括FPGA芯片9;
输入部分3、包括输入端口10,输入光耦合隔离电路11,输入端口10与输入光耦合隔离电路11相连接,输入光耦合隔离电路11还与芯片部分2的FPGA芯片9相连接;
端口部分4、包括调试端口12;
串口部分5、包括通信串口13。