程序段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
最佳答案
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 WRD0
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//程序结束
提问者对于答案的评价:
谢谢!解开我的疑问。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc207172.html