发表于:2009/7/23 20:24:04
#0楼
plc开发套件说明:
1. 接线
1. 内部资源:
x 输入io x0-x7,x10-x12(八进制)程序中只读
y 输出io y0-y7,y10-y12(八进制)程序中可读可写
m 中间继电器 m0-m3071 3072点 程序中可读可写
m8000-m8255 特殊功能继电器 程序中只读
m8000 一个扫描周期后常开
m8002 一个扫描周期后常闭
c 计数器 c0-c199 200点16位计数器(0-32767)c200-c255 56点32位计数器 可读可写
t 定时器 t0-t255 256点 16位100ms定时器(0-32767)定时时间0-3276秒 可读可写
d0-d999 数据寄存器 1000点16位数据寄存器(-32768 --- 32767) 可读可写
d8000-d8255 256点特殊功能寄存器(不要在程序中写这些寄存器) 只读
s0-s999 步进继电器(暂未能使用步进指令)可当作中间继电器使用 可读可写
只读操作数在程序中不可以被驱动
3.指令(目前支持的指令)
ld xymcts 取触点(必须与左母线连接)
ldi xymcts 取反触点(必须与左母线连接)
and xymcts 串联常开触点(不能连接在左母线)
ani xymcts 串联常闭触点(不能连接在左母线)
or xymcts 并联常开触点
ori xymcts 并联常闭触点
mps 入栈
mpr 读栈
mpp 出栈
orb 块并联
anb 块串联
out xymcts 输出到位(必须与右侧母线连接)
out n1 n2
n1 t0-t255,0.1秒定时器
c0-c199,16位计数器
c200-c255,32位计数器(暂不支持高速计数器)
n2 k0 - k32767
d0-d999,16位(0-32767),c200-c255(0-2147483647)
rst msy 复位触点
rst ct 复位计数器,定时器(其当前值被清零,触点复位)
rst d 数据寄存器清零
mc n0_n7 my 建立小母线n0-n7
mcr n0_n7 复位小线线n0-n7
set msy 置位触点
alt mys 触点取反
inv 结果取反指令
nop 空操作
mov n1 n2 传送指令
add n1 n2 加法指令
sub n1 n2 减法指令
mul n1 n2 乘法指令
div n1 n2 除法指令
n1 k-32768 -- k32767
d0-d999(-32768 – 32767
n2 d0-d999
4.单片机实现plc功能
plc是以梯形图编程或者指令表编程语言,梯形图开发环境可以很直观的看到控制连接,在线监控时,可以看到程序执行结果。
单片机以一串指令来完成一句梯形图指令,我们可以理解为一个子程序。plc程序的执行同单片机执行原理一样,自上而下顺序执行。单片机首先自内存中读出plc代码,然后分析代码所表达的梯形图指令,然后调用相应的处理程序,执行结束后将执行结果存入内存。
plc执行顺序:更新输入,梯形图扫描,更新输出
指令解释
用单片机一个内存单元来存储plc的程序地址可以理解为单片机的pc指针,
用单片机一个内存单元来存储plc程序运行状态可以理解为单机的psw状态寄存器
用单片机一片内存单元来做plc程序运行所需的中间寄存器可以理解为单片机的工作寄存器
plc指令解释可以用判断方式和查表方式,判断语句的方式下不同指令的解释时间不一样,所以用查表的方式比较合适。
三菱plc梯形图是以步为基础,一步为16位字长。
plc_mx 存储母线状态。mxcnt计算母线堆栈次数。当进入程序扫描前,将plc_mx清0,plc_mx的第0位写入m8000状态,遇到mc指令时,plc_mx左移一位,mxcnt加一,然后将当前运算结果存入plc_mx的第0位,遇到mcr指令时,plc_mx右移一位,mxcnt减一。注意,mc,mcr必须成对使用,并且嵌套次数不能大于7次。
解释的时候好象排队,你只要认准你前面那个人就ok。
plc_ld存储节点状态,ldcnt存储计数,如果是ld,ldi指令,plc_ld首先将第0位状态存储,然后将ld、ldi指令所指的操作数读入plc_ld的第0位。如是and、ani指令就将plc_ld第0位与and、ani所指的操作数相与,结果存入plc_ld的第0位,如是or,ori指令则是将plc_ld的第0位与or\ori所指的操数相或,结果存入plc_ld的第0位。plc_ld是16位寄存器,所以一个语句中最多可以有15个ld、ldi指令。
anb
orb
这两个指令是配合ld、ldi\ldf\ldp的。每遇到ld ldi ldpldf指令之一,plc_ld就左移一次,ldcnt加一,当遇到orb、anb指令时候,plc_ld的第0位就与plc_ld的第1位运算,结果存入第1位,然后plc_ld右移一位,ldcnt减一。每条语句中的ld\ldp\ldf\ldi指令与orb\anb的对应关系是,除开第一条与左侧母线相连拉ld\ldf\ldp\ldi指令不需anb\orb指令外,其余每ld一次,必须有anb\orb指令与之配合。遇到与右侧母线连接的指令时,ldcnt清零。
plc_mp用于压栈指令,mpcnt用于计算堆栈次数
mps压栈,plc_mp左移一次,同时第0位与第1位状态相等,mpcnt加1
mpp出栈,plc_mp右移一次。mpcnt减1
mrd读栈,plc_mp的第0位与第1位相等。
注意:mps\mpp必须成对使用,并且嵌套次数不能大于7
out指令必须与右侧母线连接。
2xxx ld x4xx x
3xxx ldi x5xx y
4xxx and x6xx t
5xxx ani xexx c
6xxx or x8xx m0-m255
7xxx ori x9xx m256-m511
xaxx m512-m767
cxxx out xbxx m768-m1023
dxxx set xcxx m1024-m1279
exxx rst xdxx m1280-m1535
xfxx m8000-m8255
两步指令 指令 操作数
01c1 ldf 01c1 8401 ldf x1
01c2 ldp 01c2 8401 ldp x1
fff8 anb
fff9 orb
ffff nop
01cc andp
01cd andf
01ce orp
01cf orf
000c 8501 rst c1
000c 8601 rst t1
无操作数指令
000f end
fffa mps
fffb mpr
fffc mpp
三步指令
0600 8001 8000 out t0 k1
0e00 8002 8000 out c0 k2
0094 8401 8005 alt y1
联机操作:
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=94835&Name=xlian541426
1. 接线
1. 内部资源:
x 输入io x0-x7,x10-x12(八进制)程序中只读
y 输出io y0-y7,y10-y12(八进制)程序中可读可写
m 中间继电器 m0-m3071 3072点 程序中可读可写
m8000-m8255 特殊功能继电器 程序中只读
m8000 一个扫描周期后常开
m8002 一个扫描周期后常闭
c 计数器 c0-c199 200点16位计数器(0-32767)c200-c255 56点32位计数器 可读可写
t 定时器 t0-t255 256点 16位100ms定时器(0-32767)定时时间0-3276秒 可读可写
d0-d999 数据寄存器 1000点16位数据寄存器(-32768 --- 32767) 可读可写
d8000-d8255 256点特殊功能寄存器(不要在程序中写这些寄存器) 只读
s0-s999 步进继电器(暂未能使用步进指令)可当作中间继电器使用 可读可写
只读操作数在程序中不可以被驱动
3.指令(目前支持的指令)
ld xymcts 取触点(必须与左母线连接)
ldi xymcts 取反触点(必须与左母线连接)
and xymcts 串联常开触点(不能连接在左母线)
ani xymcts 串联常闭触点(不能连接在左母线)
or xymcts 并联常开触点
ori xymcts 并联常闭触点
mps 入栈
mpr 读栈
mpp 出栈
orb 块并联
anb 块串联
out xymcts 输出到位(必须与右侧母线连接)
out n1 n2
n1 t0-t255,0.1秒定时器
c0-c199,16位计数器
c200-c255,32位计数器(暂不支持高速计数器)
n2 k0 - k32767
d0-d999,16位(0-32767),c200-c255(0-2147483647)
rst msy 复位触点
rst ct 复位计数器,定时器(其当前值被清零,触点复位)
rst d 数据寄存器清零
mc n0_n7 my 建立小母线n0-n7
mcr n0_n7 复位小线线n0-n7
set msy 置位触点
alt mys 触点取反
inv 结果取反指令
nop 空操作
mov n1 n2 传送指令
add n1 n2 加法指令
sub n1 n2 减法指令
mul n1 n2 乘法指令
div n1 n2 除法指令
n1 k-32768 -- k32767
d0-d999(-32768 – 32767
n2 d0-d999
4.单片机实现plc功能
plc是以梯形图编程或者指令表编程语言,梯形图开发环境可以很直观的看到控制连接,在线监控时,可以看到程序执行结果。
单片机以一串指令来完成一句梯形图指令,我们可以理解为一个子程序。plc程序的执行同单片机执行原理一样,自上而下顺序执行。单片机首先自内存中读出plc代码,然后分析代码所表达的梯形图指令,然后调用相应的处理程序,执行结束后将执行结果存入内存。
plc执行顺序:更新输入,梯形图扫描,更新输出
指令解释
用单片机一个内存单元来存储plc的程序地址可以理解为单片机的pc指针,
用单片机一个内存单元来存储plc程序运行状态可以理解为单机的psw状态寄存器
用单片机一片内存单元来做plc程序运行所需的中间寄存器可以理解为单片机的工作寄存器
plc指令解释可以用判断方式和查表方式,判断语句的方式下不同指令的解释时间不一样,所以用查表的方式比较合适。
三菱plc梯形图是以步为基础,一步为16位字长。
plc_mx 存储母线状态。mxcnt计算母线堆栈次数。当进入程序扫描前,将plc_mx清0,plc_mx的第0位写入m8000状态,遇到mc指令时,plc_mx左移一位,mxcnt加一,然后将当前运算结果存入plc_mx的第0位,遇到mcr指令时,plc_mx右移一位,mxcnt减一。注意,mc,mcr必须成对使用,并且嵌套次数不能大于7次。
解释的时候好象排队,你只要认准你前面那个人就ok。
plc_ld存储节点状态,ldcnt存储计数,如果是ld,ldi指令,plc_ld首先将第0位状态存储,然后将ld、ldi指令所指的操作数读入plc_ld的第0位。如是and、ani指令就将plc_ld第0位与and、ani所指的操作数相与,结果存入plc_ld的第0位,如是or,ori指令则是将plc_ld的第0位与or\ori所指的操数相或,结果存入plc_ld的第0位。plc_ld是16位寄存器,所以一个语句中最多可以有15个ld、ldi指令。
anb
orb
这两个指令是配合ld、ldi\ldf\ldp的。每遇到ld ldi ldpldf指令之一,plc_ld就左移一次,ldcnt加一,当遇到orb、anb指令时候,plc_ld的第0位就与plc_ld的第1位运算,结果存入第1位,然后plc_ld右移一位,ldcnt减一。每条语句中的ld\ldp\ldf\ldi指令与orb\anb的对应关系是,除开第一条与左侧母线相连拉ld\ldf\ldp\ldi指令不需anb\orb指令外,其余每ld一次,必须有anb\orb指令与之配合。遇到与右侧母线连接的指令时,ldcnt清零。
plc_mp用于压栈指令,mpcnt用于计算堆栈次数
mps压栈,plc_mp左移一次,同时第0位与第1位状态相等,mpcnt加1
mpp出栈,plc_mp右移一次。mpcnt减1
mrd读栈,plc_mp的第0位与第1位相等。
注意:mps\mpp必须成对使用,并且嵌套次数不能大于7
out指令必须与右侧母线连接。
2xxx ld x4xx x
3xxx ldi x5xx y
4xxx and x6xx t
5xxx ani xexx c
6xxx or x8xx m0-m255
7xxx ori x9xx m256-m511
xaxx m512-m767
cxxx out xbxx m768-m1023
dxxx set xcxx m1024-m1279
exxx rst xdxx m1280-m1535
xfxx m8000-m8255
两步指令 指令 操作数
01c1 ldf 01c1 8401 ldf x1
01c2 ldp 01c2 8401 ldp x1
fff8 anb
fff9 orb
ffff nop
01cc andp
01cd andf
01ce orp
01cf orf
000c 8501 rst c1
000c 8601 rst t1
无操作数指令
000f end
fffa mps
fffb mpr
fffc mpp
三步指令
0600 8001 8000 out t0 k1
0e00 8002 8000 out c0 k2
0094 8401 8005 alt y1
联机操作:
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=94835&Name=xlian541426