- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于单片机开发可编程控制器的研究.doc
基于单片机开发可编程控制器的研究
摘 要:本文设计了一种基于单片机开发控制器的新方案以实现内核驱动与逻辑运算、控制分离。
关键词:单片机;梯形图;结构化数据;自编程
中图分类号:TP334 文献标识码:A
一、概述
通常基于单片机开发的智能控制器,因内部程序已固化,开发完成后,其功能基本定型,只能应用于设计时的特定目标,现场如需变更控制方案也非常困难。针对这一短板,我们设计一种基于单片机开发控制器的一种新方案,实现内核驱动与逻辑运算、控制分开,并以简明梯形图语言实现运行逻辑编程,不仅扩展了控制器的应用范围,而且减轻现场调试难度,控制方案的变动,只需修改梯形图逻辑即可解决。
二、原理
单片机应具备的特性:足够容量的可擦写flash程序存储器,支持IAP功能,现在大多单片机芯片都支持用户自编程IAP功能,如Atmega128、STM32F3、STM32F4系列皆能满足要求。首先将单片机flash存储器划分为3块,一部分存储实现IAP功能的Boot Loader程序,一部分存储单片机内核程序,余下的部分用于存储用户程序。内核程序主要是硬件驱动及用户程序间代码接口与算法。用户程序即为用梯形图编辑工具形成顺序控制逻辑,比较规则及数据输出去向等。
内核程序周期性地扫描内外部设备内存映射地址,并调用用户区逻辑运算,将结果以数据量及消息量的方式输出到设备,如此周而复始,完成用户逻辑的控制方案。
三、具体实现
单片机如何实现硬件驱动及通信不在本议题讨论范围内,重点论述如何实现梯形图编译工具软件与单片机执行梯形图控制逻辑。
1.用户程序编辑与编译(梯形图编译工具):
梯形图的编辑元器件主要包括常开接点、常闭接点、继电器等简单元件和定时、比较等功能元器件。为了灵活应用和扩展编辑元器件,方便编程,将梯形图元件数据结构定义如下:
type
Tmdevice=record
name: string[4]; //元件名称
mclass: byte; //元件类型
memo: string; //元件备注,消息变量为消息变量实体
end;
其中Mclass的取值0:开关量输入(DI),1:开关量输出(DO),2:定时器(T),3:计数器(C),4:内部继电器(M),5:数据寄存器(D),6:消息输入(MI),7:消息输出(MO)。
梯形图用户程序我们可以看成是有限个逻辑节点构成固定列宽,可扩展行数的表,每个节点代表元件加逻辑操作构成的数据结构体,因此首先定义节点数据结构:
Type
Tprodata=record
Opclass: byte; //节点类型(元件类型+连接类连)
notop: byte; //操作码
Address: byte; //操作数内存地址
Chadd: word; //比较数
end;
依据上述约定实现绘制的梯形图,如图1所示。
2.梯形图逻辑扫描算法
梯形图语言描述一个逻辑网络自左向右的能量潮,元件的逻辑运算总是与左侧的运算“与”运算,分支总是与左侧结果“或”运算,逐行扫描遇分支节点先将运算结果压入栈,扫描暂时放弃分支节点右侧元件,进行下一行扫描,如遇分支,继续执行压栈,一直扫描到没有分支时,将结果与栈顶“或”运算,执行出栈(先进先出原则),同时判断栈顶节点连接类型,决定下一步是出栈还是扫描,如遇出栈节点有右侧分支,则扫描右侧元件,并作逻辑运算,直至扫描至行结束标志节点,并将运算结果赋值与最后节点元件,因此位于结束标志点的元件一定是输出型元件。如果在扫描过程中,能量潮在开始标志与结束标志中有中断或能量潮开始与结束标志不完整,都视为梯形图编译未能通过。
我们将上面元件扫描顺序及元件操作类型记录在一个顺序数据组中,这个顺序数组结构应是这样:
Type
Tprodata=record
Oprate: byte; //数据运算类型
selfop: byte; //自身附加运算
Address: byte;//元件内存映射地址
Chadd: word;//比较运算值
end;
其中Oprate对应的逻辑运算,1表示与,2表示异或,4表示赋值,5表示压栈,6表示出栈,7表示栈更新,8表示定时器操作,9:定时器溢出处理,10:计数器操作,11:计算器溢出处理,12:表示位操作,13:寄存器数值比较。
然后定义一个Tprodata类型变长数组,将上面梯形图扫描编译顺序结果存放在这个变长数组中,最后将这个数据数据按Intel Hex格式格式化输出文件,并保存在磁硬盘中。
3.下载用户程序到单片机用户
文档评论(0)