2024年4月16日发(作者:裔俊雅)
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个左右,不过对于小程序应该
够用的。没必要去增加成本扩展RAM
2024年4月16日发(作者:裔俊雅)
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个左右,不过对于小程序应该
够用的。没必要去增加成本扩展RAM