|
|
|
发表人:hguihuai |
发表时间:2007/3/1 19:02:00 |
|
|
本栏论题: |
从PLC的梯形图到单片机的汇编程序 [5661] |
从PLC的梯形图到单片机的汇编程序
业内许多人都熟悉PLC的编程,也有人既熟悉PLC编程又熟悉单片机编程,可很少有人知道PLC的梯形图是可以直接转化为汇编程序的。PLC的梯形图直观、易懂、可读性强,只要把输入输出口和各内部器件定义好,它们之间的逻辑关系在梯形图上一目了然。但单片机的汇编程序就不同了,即使是自己编的程序时间一长看起来也很吃力,用梯形图为汇编程序做注释可以增加程序的可读性。此外很多人在在开发单片机之前就编过相同功能的PLC程序,因此如能将PLC的梯形图转化为汇编程序是非常有意义的事。其实这是非常容易的事。
一、一般逻辑组合的转换:

以上是一段常见的PLC梯形图程序,我们假设给I/0口定义了名字,内部器件可用器件名也可用器件代号。它们的逻辑关系是一目了然的。转换成汇编程序时我们也要先定义相应的位元件。程序清单如下:
MSJ BIT 00H ;定义位器件
YJ BIT 01H
SPG BIT 02H
KMJ BIT 03H
SXD BIT 04H
HJ BIT 05H
XJ BIT 06H
M30 BIT 07H
M31 BIT 08H
M35 BIT 09H
MOV C,MSJ ;将MSJ的送入逻辑运算器
ANL C,YJ ;
ANL C,/SPG
MOV OAH,C ;将MSJ、YJ、SPG反相与的结果送入0AH暂存。
MOV C,SXD
ANL C,HJ
ANL C,XJ
MOV 0BH,C ;将SXD、HJ、XJ相与的结果送入0BH暂存。
MOV C,M30
ANL C,M31
ORL C,0AH ;将M30、M31相与的结果与OAH或运算
ORL C,0BH
ANL C,/KMJ
MOV M35,C ;输出M35
以上的汇编程序是直接从梯形图转换来的,没有用任何汇编的技巧。当然你如是汇编高手,可以将它编的效率更高,比如先判MSJ ,为“1”跳过这段程序直接将M35置“0”,三段与门,由于它们之间是“或”关系,只要第一段是“1” 后两段可以不考虑了。但这样程序跳来跳去,可读性就差了。
二、SET、RST 语句的转换
PLC中的SET和RST有两个特点:1、SET 只能置“1”,不能置“0”;RST 只能置“0”不能置“1”。2、它们都是自保型的,一旦逻辑成立,它们就执行,执行后即使逻辑不再成立,仍然保持原来的结果。这和汇编的“SETB”、“CLR”指令的功能完全是一样的,不过汇编要通过判断跳转来实现。

汇编程序的清单如下:
MOV C,MSJ
ANL C,YJ
ANL C,SPG
ANL C,/KMJ
JNC L100 ;与的结果为“0”跳过“SETB M35”到L100处,
SETB M35
L100:………………
………………
MOV C,SXD
ANL C,HJ
ANL C,XJ
JNC L101
CLR M35
L101: ……………… ;与的结果为“0”跳过“CLR M35”到L101处
三、PLS PLF语句的转换
这两个语句是边沿触发的,它们的生命周期只有一个扫描周期。51系列的单片机中没有相应的指令(不好意思本人目前只熟悉51系列)。但可以通过变通的办法来实现。先来看看下面的梯形图:

对M300来说左边的梯形图和右边的梯形图完全是等价的,它们的生命周期都是一个扫描周期。当XDK上升沿到来时,M301为“OFF”,(因之前XDK为“OFF”),所以M300 “ON”,紧接着M301 也“ON”,但此时M300的状态不会立即改变,直到下一个扫描周期(程序第二次运行到这段程序)时才能变为“OFF”。把这样的梯形图转换成汇编程序就很容易了。对PLF语句也一样,只不过把XDK的常开改为常闭就行了,读者自己可以分析。这里每一个PLS、PLF语句都要用两个内存的位元件。51系列的位寻址内存只有128个,非常有限。是否还有其他更好的办法,能节省内存位寻址单元的开销,希望有高手出来指教。
以上是三种最常见的梯形图转换成汇编程序的例子,至于算术计算的加、减、乘、除、左移、右移,数据传输、比较等的转换更是容易了,不再赘述。
|
|
以下是关于《从PLC的梯形图到单片机的汇编程序》论题的回复(共5篇) |
PLC里面的定时器如何在汇编里实现呢?也是折腾了偶不少时间的问题
|
|
以上是一段常见的PLC梯形图程序,我们假设给I/0口定义了名字,内部器件可用器件名也可用器件代号。它们的逻辑关系是一目了然的。转换成汇编程序时我们也要先定义相应的位元件。程序清单如下:
MSJ BIT 00H ;定义位器件
YJ BIT 01H
SPG BIT 02H
KMJ BIT 03H
SXD BIT 04H
HJ BIT 05H
XJ BIT 06H
M30 BIT 07H
M31 BIT 08H
M35 BIT 09H
MOV C,MSJ ;将MSJ的送入逻辑运算器
ANL C,YJ ;
ANL C,/SPG
MOV OAH,C ;将MSJ、YJ、SPG反相与的结果送入0AH暂存。
MOV C,SXD
ANL C,HJ
ANL C,XJ
MOV 0BH,C ;将SXD、HJ、XJ相与的结果送入0BH暂存。
MOV C,M30
ANL C,M31
ORL C,0AH ;将M30、M31相与的结果与OAH或运算
ORL C,0BH
ANL C,/KMJ
MOV M35,C ;输出M35
以上的汇编程序是直接从梯形图转换来的,没有用任何汇编的技巧。当然你如是汇编高手,可以将它编的效率更高,比如先判MSJ ,为“1”跳过这段程序直接将M35置“0”,三段与门,由于它们之间是“或”关系,只要第一段是“1” 后两段可以不考虑了。但这样程序跳来跳去,可读性就差了。
二、SET、RST 语句的转换
PLC中的SET和RST有两个特点:1、SET 只能置“1”,不能置“0”;RST 只能置“0”不能置“1”。2、它们都是自保型的,一旦逻辑成立,它们就执行,执行后即使逻辑不再成立,仍然保持原来的结果。这和汇编的“SETB”、“CLR”指令的功能完全是一样的,不过汇编要通过判断跳转来实现。
汇编程序的清单如下:
MOV C,MSJ
ANL C,YJ
ANL C,SPG
ANL C,/KMJ
JNC L100 ;与的结果为“0”跳过“SETB M35”到L100处,
SETB M35
L100:………………
………………
MOV C,SXD
ANL C,HJ
ANL C,XJ
JNC L101
CLR M35
L101: ……………… ;与的结果为“0”跳过“CLR M35”到L101处
三、PLS PLF语句的转换
这两个语句是边沿触发的,它们的生命周期只有一个扫描周期。51系列的单片机中没有相应的指令(不好意思本人目前只熟悉51系列)。但可以通过变通的办法来实现。先来看看下面的梯形图:
对M300来说左边的梯形图和右边的梯形图完全是等价的,它们的生命周期都是一个扫描周期。当XDK上升沿到来时,M301为“OFF”,(因之前XDK为“OFF”),所以M300 “ON”,紧接着M301 也“ON”,但此时M300的状态不会立即改变,直到下一个扫描周期(程序第二次运行到这段程序)时才能变为“OFF”。把这样的梯形图转换成汇编程序就很容易了。对PLF语句也一样,只不过把XDK的常开改为常闭就行了,读者自己可以分析。这里每一个PLS、PLF语句都要用两个内存的位元件。51系列的位寻址内存只有128个,非常有限。是否还有其他更好的办法,能节省内存位寻址单元的开销,希望有高手出来指教。
以上是三种最常见的梯形图转换成汇编程序的例子,至于算术计算的加、减、乘、除、左移、右移,数据传输、比较等的转换更是容易了,不再赘述。
|
|
|