搜索
bottom↓
回复: 9

哪位大虾能介绍一下PLC用户程序如何被PLC的firmware解释执行的?

[复制链接]

出0入4汤圆

发表于 2010-8-17 10:57:36 | 显示全部楼层 |阅读模式
搞不太清楚用户程序的输入输出还有指令如何存储的,数据结构是什么样的

出0入0汤圆

发表于 2010-8-17 21:01:10 | 显示全部楼层
指令也都是些按一定编码规则的数据而已,所以说单说存储方面,一般数据怎么存的,它就怎么存的。
为了让你了解指令和操作数据的关系,以及CPU怎么解释这些指令的,下面做一下示例给你。
比如说一个数据传送指令"MOV D0 D1"这么一条指令它的CPU解释过程是这样的:
1.CPU初始化完成后,初始化程序会把PC指向"MOV D0 D1"的程序存贮位置的首地址
2.指向地址后CPU会先读出指令识别码,也就是"MOV D0 D1"中的"MOV"
3.通过指令识别码的比较后,CPU会识别出这条指令是“MOV”
4.再根据"MOV"指令的规则(这个是CPU设计时已经定好的),MOV指令后面就会有两个不多不少的操作数,所以CPU就读取后两个数据来进行操作了.
5.操作完成后CPU会将PC加上这条"MOV D0 D1"指令的占用存贮字节数.这样一来CPU又可以读取第两条指令的识别码了.
6.像PLC这个产品,也可以说是用现有的CPU模拟出PLC的CPU这样而已,所以说只要把指令和操作数的规则制定好了,下来的工作就是做一个解释制定好的指令的程序而已

出0入4汤圆

 楼主| 发表于 2010-8-18 14:44:46 | 显示全部楼层
非常感谢!

但我的意思不是说MCU怎样存储数据。
我是说上位机把梯形图编译成什么样的数据结构传给PLC的。

出0入0汤圆

发表于 2010-8-18 14:49:49 | 显示全部楼层
上位机把梯形图转换成“MOV D0 D1”这一类的数据指令再传给PLC,就跟你拿手抄器编程一样

出0入0汤圆

发表于 2010-8-18 16:34:14 | 显示全部楼层
回复【2楼】jjl3
-----------------------------------------------------------------------

比如说30的“MOV D0 D1”先会转成十六进制代码
"MOV"转成"0x0025"
"D0"转成"0x86008600"
"D1"转成"0x86008602"
全部的数据串在一起是这样的"25 00 00 86 00 86 02 86 00 86"这就是“MOV D0 D1“转出来的十六进制代码

出0入4汤圆

 楼主| 发表于 2010-8-18 17:36:43 | 显示全部楼层
回复【4楼】windows7
-----------------------------------------------------------------------

回复【4楼】windows7
回复【2楼】jjl3  
-----------------------------------------------------------------------
比如说30的“mov d0 d1”先会转成十六进制代码
"mov"转成"0x0025"
"d0"转成"0x86008600"
"d1"转成"0x86008602"
全部的数据串在一起是这样的"25 00 00 86 00 86 02 86 00 86"这就是“mov d0 d1“转出来的十六进制代码
-----------------------------------------------------------------------

一句可以这样,但如果多了呢?
比如如下图

(原文件名:3.JPG)

出0入0汤圆

发表于 2010-8-18 19:46:32 | 显示全部楼层
回复【5楼】jjl3
-----------------------------------------------------------------------

转出来的代码和写字还不一样的,第二句就接在第一句的后面写不就完了.
比如,"LD S0 MOV D0 D1"就会转成"00 20 25 00 00 86 00 86 02 86 00 86"
再多的也都是接一去就完了:
比如,"LD S0 MOV D0 D1 MOV D2 D3"就会转成"00 20 25 00 00 86 00 86 02 86 00 86 25 00 04 86 00 86 06 86 00 86"
这样搞明白了吗?

出0入4汤圆

 楼主| 发表于 2010-8-19 16:17:20 | 显示全部楼层
还是不明白。
怎么表示上一句与下一句甚至多句的逻辑关系?

出0入0汤圆

发表于 2010-8-20 06:42:21 | 显示全部楼层
回复【7楼】jjl3
-----------------------------------------------------------------------
同一指令的格式是固定的,
比如说"LD S0"转成"00 20",也就是说它会占用两个字节的存折空间,这个是固定的了.
那么这条的地址指令加上两个字节的地址后,又会是另一条指令了
再说明白一点就比如说1个中文字块是16*16像素的话,那第17个像素就是第2个中文字块的开始了,第33个像素就是第3个中文字块的开始了,以此类推
这样搞明白没?

出0入0汤圆

发表于 2010-8-20 09:14:14 | 显示全部楼层
回复5楼
------------------------------------------------
如果按照OMRON的转换成IL语句就是
LD A
AND B
OR C
OUT D
这样四句语句啊!三菱或者其他的不清楚,不过估计都一样。您自己看看任何公司(估计)的PLC的编程手册,开始都会讲解如何把梯形图转换成IL语句的。无论多么复杂的都是可以转换的。按照WINDOWS7大牛的解释,您最后给出的图只需要解释执行4次就可以得到输出了。当然输出要在I/O刷新的时候刷新到真正的I/O口上。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 10:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表