找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
小程序查看
手机扫码追踪该问题
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
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//程序结束
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的流程图见附图,其它程序段的流程于此类似就不写了。
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!