fc100程序解释

程序解释,这是FC100的,最好具体点,能说明程序中个命令的含义 - 已解决问题
程序段1
L #cnt2_app
T #cnt2_db
OPN DB [#cnt2_db]
CALL "CNT2_CTR"
IN0:=#cnt2_db
A DBX 36.7
JCN END
A #count_en
= DBX 23.2
A #frenq_en
= DBX 23.1
程序段2
A #load0_end
JC NEXT
SET
SAVE
OPN DB [#cnt2_db]
A DBX 1.0
JC WRD0
A #load0
FP M 1000.0
JCN WRE0
L #value0
T DBD 60
L 10
T DBB 0
WRD0: CALL "CNT2_WR"
IN0 :=#cnt2_db
RET_VAL:=MW800
WRE0: AN BR
= #wr_err0
A #load0
A DBX 1.1
O #load0_end
= #load0_end
AN #load0
R DBX 1.1
程序段3
NEXT: SET
SAVE
OPN DB [#cnt2_db]
A DBX 1.0
JC WRD1
A #load1
FP M 1000.1
JCN WRE1
L #value1
T DBD 60
L 10
T DBB 0
WRD1: CALL "CNT2_WR"
IN0 :=#cnt2_db
RET_VAL:=MW802
WRE1: AN BR
= #wr_err1
AN #load1
R DBX 1.1
程序段4
SET
SAVE
OPN DB [#cnt2_db]
A DBX 1.0
JC WRD2
A #load2
FP M 1000.2
JCN WRE2
L #value2
T DBD 60
L 10
T DBB 0
WRD2: CALL "CNT2_WR"
IN0 :=#cnt2_db
RET_VAL:=MW804
WRE2: AN BR
= #wr_err2
AN #load2
R DBX 1.1
程序段5
SET
SAVE
OPN DB [#cnt2_db]
A DBX 3.0
JC RDD0
L 100
T DBB 2
RDD0: CALL "CNT2_RD"
IN0 :=#cnt2_db
RET_VAL:=MW806
AN BR
= #rd_err
END: BE
产品版区:SIMATIC S7-300(F)/S7-400(F/H/FH) 悬赏西币:10 | 解决时间:2016-06-17 16:04:07 | 提问者: sunaway - 初级技术员 第5级

问题ID:140036

最佳答案
L #cnt2_app//cnt2_app装载到累加器1
T #cnt2_db//累加器1的内容(cnt2_app的值)保存到cnt2_db中
OPN DB [#cnt2_db]//打开db块
CALL "CNT2_CTR"//调用子程序
IN0:=#cnt2_db//子程序输入参数
A DBX 36.7//如果db块中的dbx36.7为1则执行下面的程序,否则跳转到end
JCN END
A #count_en
= DBX 23.2//dbx23.2=count_en
A #frenq_en
= DBX 23.1//dbx23.1=frenq_en
程序段2
A #load0_end//**load0_end为1则跳转到next,否则执行下面的程序
JC NEXT
SET //置位rlo状态
SAVE //保存rlo状态到br
OPN DB [#cnt2_db]//打开db块
A DBX 1.0//如果dbx1.0位1则跳转到wrd0标志,否则继续执行下面的程序
JC WR

D0
A #load0
FP M 1000.0
JCN WRE0//load0上升沿执行下面的程序,否则跳转到wre0
L #value0
T DBD 60//dbd60=value0
L 10
T DBB 0//dbb0=10
WRD0: CALL "CNT2_WR"//调用子程序块
IN0 :=#cnt2_db//子程序块输入参数
RET_VAL:=MW800//子程序块返回参数保存到mw800
WRE0: AN BR
= #wr_err0//br状态取反后赋值给wr_err0
A #load0
A DBX 1.1
O #load0_end
= #load0_end//load0_end=dbx1.1并自锁
AN #load0
R DBX 1.1//如果load0不为1则复位dbx1.1
程序段3
NEXT: SET //置位rlo状态
SAVE //保存rlo状态到br
OPN DB [#cnt2_db]//打开db块
A DBX 1.0//如果dbx1.0为1则跳转到wrd1,否则执行下面的程序
JC WRD1
A #load1
FP M 1000.1
JCN WRE1//load1上升沿执行下面的程序否则跳转到wre1
L #value1
T DBD 60//dbd60=value1
L 10
T DBB 0//dbb0=10
WRD1: CALL "CNT2_WR"//调用子程序块
IN0 :=#cnt2_db//子程序输入参数
RET_VAL:=MW802//子程序返回参数保存到mw802
WRE1: AN BR
= #wr_err1//br状态取反复制给wr_err1
AN #load1
R DBX 1.1//load1为0则复位dbx1.1
程序段4
SET //置位rlo状态位
SAVE //保存rlo到br
OPN DB [#cnt2_db]//打开db块
A DBX 1.0//dbx1.0为1跳转到wrd2,否则执行下面的程序
JC WRD2
A #load2
FP M 1000.2//load2上升沿执行下面的程序,否则跳转到wre2
JCN WRE2
L #value2
T DBD 60//dbd60=value2
L 10
T DBB 0//dbb0=10
WRD2: CALL "CNT2_WR"//调用子程序块
IN0 :=#cnt2_db//子程序输入参数
RET_VAL:=MW804//子程序返回参数保存到mw804
WRE2: AN BR
= #wr_err2//br取反后赋值给wr_err2
AN #load2
R DBX 1.1//load2为0复位dbx1.0
程序段5
SET //置位rlo
SAVE //保存rlo到br
OPN DB [#cnt2_db]//打开db块
A DBX 3.0//dbx3.0为1跳转到rdd0,否则执行下面的程序
JC RDD0
L 100
T DBB 2//dbb2=100
RDD0: CALL "CNT2_RD"//调用子程序块
IN0 :=#cnt2_db//子程序输入参数
RET_VAL:=MW806//子程序输出参数保存到mw806
AN BR
= #rd_err//br取反保存到rd_err
END: BE//程序结束





简单介绍下吧:要理解这段程序,主要是要理解JC指令和OPN指令,DBX1.0前面的一个OPN对应的DB块就是DBX1.0的数据来源。JC是条件跳转指令,指令前的条件满足就跳转,否则程序接着往下执行。 多数程序都是赋值指令和调用指令慢慢看能够理解的。
L #cnt2_db
T #cnt2_db //#cnt2_db=#cnt

2_db
OPN DB [#cnt2_db] //打开#cnt2_db数值的DB块
CALL "CNT2_CTR"
IN0:=#cnt2_db //调用块"CNT2_CTR"
A DBX 36.7
JCN END //假如DB(#cnt2_db).DBX36.7为1直接跳到END结束程序,如果不为1的话,程序接着往下执行
A #count_en
= DBX 23.2
A #frenq_en
= DBX 23.1
程序段2
A #load0_end //#load0_end为1的话跳到NEXT,为0的话继续执行
JC NEXT
SET
SAVE
OPN DB [#cnt2_db] //打开#cnt2_db数值对应的DB,
A DBX 1.0 //DB(#cnt2_db).DBX1.0为1跳到WORD0,否则接着执行程序
JC WRD0
A #load0
FP M 1000.0
JCN WRE0
L #value0
T DBD 60
L 10
T DBB 0
WRD0: CALL "CNT2_WR"
IN0 :=#cnt2_db
RET_VAL:=MW800
WRE0: AN BR
= #wr_err0
A #load0
A DBX 1.1
O #load0_end
= #load0_end
AN #load0
R DBX 1.1
回答者:钻石用户 艾星落尘 - 中级工程师 第10级
2016-06-16 16:21:28
1. 该程序实现通过判断共享数据块DB[#cn2_db]中数据位DBX1.0和 DBX3.0的逻辑值,来决定调用写功能子程序CNT2_WRD或读功能子程序CNT2_RD.
2. 当决定执行写功能子程序时,通过监控变量load0,load1,和load2的上升沿信号,依次将DBD60赋值value0,value1,value2,并调依次用写功能子程序CNT2_WRD0, CNT2_WRD1, CNT2_WD2,并将子程序返回值分别存入MW800,MW802,MW84中。
3. 整个程序执行过程中,基于load0激发的调用程序部分WRD0,WRE0只能执行一次。
即:A load0_end

A #load0
A DBX 1.1
O #load0_end
= #load0_end
语句所组成的功能。
4. 通过判断该共享数据块内数据位DBX3.0的逻辑状态,调用读功能子程序CNT2_RD. 子程序返回值存入MW806中。
5. 另外在程序中利用BR位逻辑状态,实现子程序调用过程中错误响应功能:
由语句: set
save
.....
WRE: AN BR
= #rd_err 构成。
6. 调用写子程序功能中,若子程序未执行则将共享数据块中的DBX1.1复位。
7. 程序段1,和程序段2的流程图见附图,其它程序段的流程于此类似就不写了。

相关文档
最新文档