最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

51单片机DIY做PLC编程

IT圈 admin 45浏览 0评论

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

发布评论

评论列表 (0)

  1. 暂无评论