单片机仿PLC编程示例1
- 格式:pdf
- 大小:585.13 KB
- 文档页数:3
51单片机DIY做PLC编程有朋友想定制一个净水机控制器,有一些独特的功能要增加,但是商品控制板没有这样的功能,问我能否做一个,我觉得单片机完全能满足这种简单的控制需要,上手开始编程序时候突然感到,用PLC逻辑编这种功能是非常简单轻松的,而如果用汇编或C编却感觉有点棘手,编程效率不高,所以想为何不在单片机上实现PLC的逻辑呢?上网搜索尝试看能否找到合适的程序下载来稍微改改就能用的呢?方案几年前就有了,实际上是利用三菱的低档PLC编程软件编辑好梯形图,存盘后用专用的格式转换工具转换成HEX单片机烧写文件烧进去,尝试下载三菱PLC工具软件,但是在我的WIN7-64位系统上不能正常工作,好容易换了系统装好开发工具,但是初次上手这款开发工具,界面挺复杂的,懒得研究各个按钮的使用,由于是单片机的硬件,对于程序的编制和转换有很多限制条件,否则是转换不成功的,嫌麻烦,放弃!某宝倒是有百元PLC板出售,但是为了这么个简单的东西专门买个全功能板子有点浪费,而且其编程软件仍然是三菱的盗版软件,算了,再想办法把。
由于工作中经常接触PLC程序,对其工作原理也略知一二,网上也有相关的说明介绍,其实就是三个主要步骤,第一步扫描IO输入,第二步执行逻辑,第三步输出逻辑到IO,很简单的,最早PLC也是用单片机实现的,我为何不用汇编在51上搭建一个架构,简单的逻辑编制进去就能运转呢?其中逻辑执行步骤还是有点意思的,需要把PLC逻辑翻译成单片机的汇编语言执行,这块开始也没有把握,后来搜索到一篇百度文章,介绍了一下三菱PLC逻辑是如何翻译成汇编的,我看了下估计其实是利用反汇编工具把HEX反编译成的ASM代码,并不清晰明了,而且还带着反汇编时候的行号,仅供参考了。
搜索结果中也有几篇论文,涉及到在51单片机上实现PLC逻辑的内容,但是那些论文都是充数的,仅仅几个IO逻辑,没有什么定时器,计数器功能的体现,哎!仅供参考!看来这个PLC系统还是需要自己写了!OK!既然决定自己重写,那就开工吧!利用春节休假时间,编制了如下ASM51汇编PLC代码:代码主要架构如下:1、IO定义部分:根据所使用的单片机IO口数量,任意指定多少个I多少个O,那几个脚是I,哪几个是O都可以任意指定,在这个51系统里面设计了最大32个I,32个O,占用64个位寻址区域,其实用不到那么多,也可以分配给其它需要的标志位用,因为51系统总可位寻址地址只有128位,需要仔细分配.2、位寻址变量定义(包括各类标志位,临时变量寄存器等等)目前设计了8个计时器的Timer DN, Timer EN,共16位,8个计数器的counter reset 和counter DN 标志位共16个,专用于上升沿下降沿检测的标志位4对,占用8个,剩余用于临时变量,这些地址分配在这块变量定义区域可以根据需要任意调整3、内存规划,包括堆栈区的设置,定时器,计数器的累加值和预设值地址等等,目前初步定义8个计数器的当前计数值和预设值,8个计时器的当前计数值和预设值,共占用32个内存地址,也可根据需要调整,51单片机片内总的用户可用内存地址包括堆栈区只有128个,实际去除位寻址区和堆栈区可用的估计只有80个左右,不过对于小程序应该够用的。
51单片机DIY做PLC编程有朋友想定制一个净水机控制器,有一些独特的功能要增加,但是商品控制板没有这样的功能,问我能否做一个,我觉得单片机完全能满足这种简单的控制需要,上手开始编程序时候突然感到,用PLC逻辑编这种功能是非常简单轻松的,而如果用汇编或C编却感觉有点棘手,编程效率不高,所以想为何不在单片机上实现PLC的逻辑呢?上网搜索尝试看能否找到合适的程序下载来稍微改改就能用的呢?方案几年前就有了,实际上是利用三菱的低档PLC编程软件编辑好梯形图,存盘后用专用的格式转换工具转换成HEX单片机烧写文件烧进去,尝试下载三菱PLC工具软件,但是在我的WIN7-64位系统上不能正常工作,好容易换了系统装好开发工具,但是初次上手这款开发工具,界面挺复杂的,懒得研究各个按钮的使用,由于是单片机的硬件,对于程序的编制和转换有很多限制条件,否则是转换不成功的,嫌麻烦,放弃!某宝倒是有百元PLC板出售,但是为了这么个简单的东西专门买个全功能板子有点浪费,而且其编程软件仍然是三菱的盗版软件,算了,再想办法把。
由于工作中经常接触PLC程序,对其工作原理也略知一二,网上也有相关的说明介绍,其实就是三个主要步骤,第一步扫描IO输入,第二步执行逻辑,第三步输出逻辑到IO,很简单的,最早PLC也是用单片机实现的,我为何不用汇编在51上搭建一个架构,简单的逻辑编制进去就能运转呢?其中逻辑执行步骤还是有点意思的,需要把PLC逻辑翻译成单片机的汇编语言执行,这块开始也没有把握,后来搜索到一篇百度文章,介绍了一下三菱PLC逻辑是如何翻译成汇编的,我看了下估计其实是利用反汇编工具把HEX反编译成的ASM代码,并不清晰明了,而且还带着反汇编时候的行号,仅供参考了。
搜索结果中也有几篇论文,涉及到在51单片机上实现PLC逻辑的内容,但是那些论文都是充数的,仅仅几个IO逻辑,没有什么定时器,计数器功能的体现,哎!仅供参考!看来这个PLC系统还是需要自己写了!OK!既然决定自己重写,那就开工吧!利用春节休假时间,编制了如下ASM51汇编PLC代码:代码主要架构如下:1、IO定义部分:根据所使用的单片机IO口数量,任意指定多少个I多少个O,那几个脚是I,哪几个是O都可以任意指定,在这个51系统里面设计了最大32个I,32个O,占用64个位寻址区域,其实用不到那么多,也可以分配给其它需要的标志位用,因为51系统总可位寻址地址只有128位,需要仔细分配.2、位寻址变量定义(包括各类标志位,临时变量寄存器等等)目前设计了8个计时器的Timer DN, Timer EN,共16位,8个计数器的counter reset 和counter DN 标志位共16个,专用于上升沿下降沿检测的标志位4对,占用8个,剩余用于临时变量,这些地址分配在这块变量定义区域可以根据需要任意调整3、内存规划,包括堆栈区的设置,定时器,计数器的累加值和预设值地址等等,目前初步定义8个计数器的当前计数值和预设值,8个计时器的当前计数值和预设值,共占用32个内存地址,也可根据需要调整,51单片机片内总的用户可用内存地址包括堆栈区只有128个,实际去除位寻址区和堆栈区可用的估计只有80个左右,不过对于小程序应该够用的。
ATMEGA8单片机可编程模块、简介:该模块采用ATMEGA单片机作处理器,工作电源+5V,编程时不需要借助任何其它设备。
模块上有四个按键用于编程时输入16进制代码,两位数码管用于编程时显示程序的16进制代码;模块共有8点入、8点输出,模块上有17棵发光二极管分别用于显示电源、输入及输状况。
该模块主要用来辅助学习PLC配上适当的外围电路,具有一定的适用价值。
功能强大,编程使用简单,可让你很快掌握可编程器使用和控制。
模块尺寸:41mmx 48mm用户程序储存于单片机的EEPRO内,断电后用户程序不会丢失,编程时可通过四个开关K1、K2、K2、K4完成。
目前该模块有以下指令:OUTLD AND OR、LDI、ANI、ORI、INC、CALL NEXT DELAY TIME、NOP SET REST END10进制与16注:本模块在编写程序时经常用到进制数之间的转换,相关转换方法请各位自行查找相关资料学习。
二、使用说明:1、模块的输入、输出配置情况:正对模块,上面的十个插针从左到右依次为:+5V电源端、接地端GND 输出口Y7、Y6 Y5、Y4 Y3、Y2、Y1、Y0;下面的十个插针从左到右依次为+5V电源端、COM公共端、输入口X0、XI、X2、X3 X4、X5、X6、X7;模块左下方有一个三针插口,配有一块短路插块,编写程序时插块插于三针插针的下面两针内,工作时插于三针插针的上面两针内。
K1为功能健;K2、K3分别为为第一、二位数码管显示内容调整•SUjNU」;7¥冷Y号Z I ¥1 ¥口PI z Pie3Ji|DOOOOOOOOO|5u con xo XJ. >2 Sa 5tT 55 55 x?键,K4 为模块复位键。
2、模块的工作状态与编程状态:进入模块的工作状态:接通DC5V电源后,模块即进入工作状态(要使模块工作,必须编写用户程序);进入编程状态:模块上电后,要进入编程状态的步骤为:首先按下K1键不放,再点动按下K4键, 松开K1键,则进入到编程状态。
51单片机DIY做PLC编程有朋友想定制一个净水机控制器,有一些独特的功能要增加,但是商品控制板没有这样的功能,问我能否做一个,我觉得单片机完全能满足这种简单的控制需要,上手开始编程序时候突然感到,用PLC逻辑编这种功能是非常简单轻松的,而如果用汇编或C编却感觉有点棘手,编程效率不高,所以想为何不在单片机上实现PLC的逻辑呢?上网搜索尝试看能否找到合适的程序下载来稍微改改就能用的呢?方案几年前就有了,实际上是利用三菱的低档PLC编程软件编辑好梯形图,存盘后用专用的格式转换工具转换成HEX 单片机烧写文件烧进去,尝试下载三菱PLC工具软件,但是在我的WIN7-64位系统上不能正常工作,好容易换了系统装好开发工具,但是初次上手这款开发工具,界面挺复杂的,懒得研究各个按钮的使用,由于是单片机的硬件,对于程序的编制和转换有很多限制条件,否则是转换不成功的,嫌麻烦,放弃!某宝倒是有百元PLC板出售,但是为了这么个简单的东西专门买个全功能板子有点浪费,而且其编程软件仍然是三菱的盗版软件,算了,再想办法把。
由于工作中经常接触PLC程序,对其工作原理也略知一二,网上也有相关的说明介绍,其实就是三个主要步骤,第一步扫描IO输入,第二步执行逻辑,第三步输出逻辑到IO,很简单的,最早PLC也是用单片机实现的,我为何不用汇编在51上搭建一个架构,简单的逻辑编制进去就能运转呢?其中逻辑执行步骤还是有点意思的,需要把PLC逻辑翻译成单片机的汇编语言执行,这块开始也没有把握,后来搜索到一篇百度文章,介绍了一下三菱PLC逻辑是如何翻译成汇编的,我看了下估计其实是利用反汇编工具把HEX反编译成的ASM代码,并不清晰明了,而且还带着反汇编时候的行号,仅供参考了。
搜索结果中也有几篇论文,涉及到在51单片机上实现PLC逻辑的内容,但是那些论文都是充数的,仅仅几个IO逻辑,没有什么定时器,计数器功能的体现,哎!仅供参考!看来这个PLC系统还是需要自己写了!OK!既然决定自己重写,那就开工吧!利用春节休假时间,编制了如下ASM51汇编PLC代码:代码主要架构如下:1、IO定义部分:根据所使用的单片机IO口数量,任意指定多少个I多少个O,那几个脚是I,哪几个是O都可以任意指定,在这个51系统里面设计了最大32个I,32个O,占用64个位寻址区域,其实用不到那么多,也可以分配给其它需要的标志位用,因为51系统总可位寻址地址只有128位,需要仔细分配.2、位寻址变量定义(包括各类标志位,临时变量寄存器等等)目前设计了8个计时器的Timer DN, Timer EN,共16位,8个计数器的counter reset 和counter DN 标志位共16个,专用于上升沿下降沿检测的标志位4对,占用8个,剩余用于临时变量,这些地址分配在这块变量定义区域可以根据需要任意调整3、内存规划,包括堆栈区的设置,定时器,计数器的累加值和预设值地址等等,目前初步定义8个计数器的当前计数值和预设值,8个计时器的当前计数值和预设值,共占用32个内存地址,也可根据需要调整,51单片机片内总的用户可用内存地址包括堆栈区只有128个,实际去除位寻址区和堆栈区可用的估计只有80个左右,不过对于小程序应该够用的。
用STC单片机制作板式PLC及其应用实例——MCU板制作陈洁(苏州竹园电科技有限公司,215211,江苏苏州)板式PLC即嵌入式可编程序控制器,它将PLC常用的梯形图语言嵌入到单片机开发中,实现PLC的单片机化。
目前,制作板式PLC有两种方式:第一种是直接将梯形图编译程序嵌入到单片机中,用户可以通过梯形图编辑程序直接与单片机系统通信,将保存的PMW文件直接下载到单片机系统中;第二种是把梯形图编译程序独立出来,通过转换软件的转换,将PMW文件转换成单片机的目标代码,再烧录到单片机中。
这两种方式所使用PLC的指令都受到梯形图编译程序或转换软件的限制。
前者就像常规方式使用PLC一样,可通过梯形图编辑软件进行监控等操作,但PLC硬件中所使用单片机的引脚分配一旦硬件系统设计定型便不能再改动。
而后者比较灵活,只要在所选定的单片机封装及其转换软件允许范围内,单片机的引脚功能分配可根据需要确定输入输出点的数量。
也就是说,可以按照应用要求定制不同的硬件电路的通道数量,根据实际系统需要配置合适的输入输出点数。
再将控制系统的应用程序PMW文件转换成目标代码,烧录到单片机芯片内。
这样,单片机产品开发从使用汇编或C51语言变为使用梯形图语言,使没有汇编语言或C51计算机语言编程基础的,懂得继电器-接触器控制原理的一线人员都有可能通过梯形图编程平台所提供的各种强大的应用功能学习和应用单片机控制技术。
目前,该方式的缺点是:受转换软件限制,支持的梯形图编程指令较少;受支持的单片机型号限制,输入输出点总数最多不超过46个。
即便如此,它还是能够满足一些常见控制系统的要求,特别是适用于老设备的改造。
1板式PLC结构这里采用第二种方式,以一款封装为PDIP-40的STC单片机STC12C5A60S2芯片为核心的板式PLC为例进行介绍。
该板式PLC主要由单片机基本系统电路板、开关量输入单元电路板、开关量输出单元电路板、模拟量输入单元电路板和模拟量输出单元电路板等组成,其框图如图1所示。
本文由huming7331966贡献 pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
单片机 C 语言编程基础 单片机的外部结构: 1、 DIP40 双列直插; 2、 P0,P1,P2,P3 四个 8 位准双向 I/O 引脚;(作为 I/O 输入时,要先输出高电平) 3、 电源 VCC(PIN40)和地线 GND(PIN20); 4、 高电平复位 RESET(PIN9);(10uF 电容接 VCC 与 RESET,即可实现上电复位) 5、 内置振荡电路,外部只要接晶体至 X1(PIN18)和 X0(PIN19);(频率为主频的 12 倍) 6、 程序配置 EA(PIN31)接高电平 VCC;(运行单片机内部 ROM 中的程序) 7、 P3 支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部 I/O 部件:(所为学习单片机,实际上就是编程控制以下 I/O 部件,完成指定任务) 1、 四个 8 位通用 I/O 端口,对应引脚 P0、P1、P2 和 P3; 2、 两个 16 位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、 一个串行通信接口;(SCON,SBUF) 4、 一个中断控制器;(IE,IP) 针对 AT89C52 单片机,头文件 AT89x52.h 给出了 SFR 特殊功能寄存器所有端口的定义。
教科书的 160 页给出了针对 MCS51 系列单片机的 C 语言扩展变量类型。
单片机 C 语言编程基础 1、 十六进制表示字节 0x5a:二进制为 01011010B;0x6E 为 01101110。
2、 如果将一个 16 位二进数赋给一个 8 位的字节变量,则自动截断为低 8 位,而丢掉高 8 位。
3、 ++var 表示对变量 var 先增一;var—表示对变量后减一。
4、 x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = (TMOD & 0xf0 )| 0x05;表示给变量 TMOD 的低四位赋值 0x5, 而不改变 TMOD 的高四位。
浅谈用单片机模拟PLC(山寨三菱系列)读书的时候因为学的自动化所以一直以为PLC 是控制的王道,经常鄙视楼下电子系搞单片机的,而且灰常2B 的认为单片机都TM 弱电太娇气不耐艹玩单片机的都是吊丝!所以经常混迹于PLC 实验室电子实验室居然只去了几次,然而随着对单片机和PC 机的了解逐渐加深,越来越觉得自己当年的自己太傻太天真了哎个人觉得PLC 和单片机的关系就好比图章和圆珠笔一样,图章操作简单傻子能盖出漂亮的图案但缺点也显而易见灵活性太差了你不能用图章盖出一些复杂的图案,圆珠笔就正好相反虽然操作难度大点但灵活性强了n 个数量级。
既然单片机的灵活性那么强那么我们能用单片机来模拟PLC 吗,很明显是可以的而且PLC 的核心其实也是单片机,那么该怎么模拟PLC 呢?PLC 分程序和硬件部分,硬件部分主要是做好外围电路设计,实现PLC 的IO 输入输出功能,一般用光耦做IO 口电路设计提高单片机的抗干扰能力,做好稳定的电源设计,电源是可靠性的基础。
其实模拟PLC 的关键再于程序部分,思路是写个编译器把梯形图编译成单片机能执行的机器码,但写编译器工程太大了,我们只是模拟又不是造PLC 所以不用考虑写那种直接把梯形图编译成机器码的编译器了,我们可以把编译过程分解为梯形图>指令表>C51 代码>机器码,这样的话问题就简单多了梯形图转指令表可以手工完成或者写个图形编辑程序来完成但这不是重点,指令表转C51 代码才是模拟PLC 的灵魂所在,虽然是个伪编译器但每条指令的翻译都是蛋疼的过程,我肯定是没办法把所有的三菱指令都模拟出来的,要完成这个任务还得认真学学编译原理啊这是PLC 模拟程序的运行截图,对应指令表的逻辑,发现运行结果是正确的,虽然只完成了几条最简单指令的翻译而且与反指令还存在问题但毕竟思路是正。
用51单片机做简易PLC
最近在51hei单片机论坛上下载了一个PMW-HEX的软件,这个软件可以将三菱PLC编程软件编写的梯形图转换成HEX文件,再将这个HEX文件烧录到51 单片机上,这样51单片机就有了梯形图所编程的功能了。
我觉得蛮有意思的,虽然该软件并不能兼容PLC的所有功能,甚至说很多功能不能兼容,但基本的一些指令和少量的软元件已经足够做一些简单控制功能了。
基于这个我就想着自己动手做一个4入4出的简易PLC来玩玩吧,PMW-HEX的下载地址是:51hei/bbs/dpj-19820-1.html 想了就动手吧,否则以前学的一些电子知识就要荒废了。
因为手上只有AT89S52的单片机,那么就拿这款单片机来设计电路吧。
第一步,先设计供电电路。
按三菱PLC的模式,输入端的公共(COM)是DC24V的地(GND),所以就把DC24V电源作为供电电源。
单片机需要5V 供电,手上的继电器是DC12V的供电,所以这个供电电路就是24V转成12V再转成5V。
因为只是测试的用途所以仅用最简单的转换方法(目前还算可以用吧)。
第二步,设计单片机的最小系统。
也就是用12M晶振配合谐振电容
(30P)电路和上电自动复位电路构成。
第三步,设计开关量输入电路。
这里将仿效三菱PLC的输入,用DC24V
的GND作公共端,经开关返回。
这样就需要使用光耦521-4将DC24V的信号与单片机输入端的5V信号进行隔离转换。
第四步,设计输出到继电器的电路。
由于我使用的是DC12V的继电器,所以也用了光耦521-4进行隔离转换,然后驱动三极管(9013),用三极管来驱动。