回复:32报警位轮询播报程序分享交流

为修修为

西门子1847工业学习平台

  • 帖子

    1180
  • 精华

    8
  • 被关注

    30

论坛等级:奇侠

注册时间:2021-12-02

钻石 钻石 如何晋级?

发布于 2025-10-25 16:47:04

34楼

展开查看
以下是引用阳春节拍在2025-10-25 11:48:42的发言 >33楼

ret就是直接退出子程序。

比如16个报警,那么vb10就是0到15中的某个数字,deco指令会把vb10转换为第vb10个位是1(16个位中的)其他位全零的数。

整体理解就是,比如当前调用时vb10是2(从0开始),,,程序中有误,应把vb10的inc到vb11的同时也mov回vb10(这样才会下次调用时不直接返回当前的报警2),,,从报警2开始循环到下个报警,比如报警8,则返回序号9(从1开始);下次再调用时从vb10=9开始查找报警,超过15则从0找直到8仍没有报警,则结束循环,返回序号0无报警。

以下是引用为修修为在2025-10-23 10:56:23的发言 >32楼:此程序的关键在于R...

引用32楼详细内容:

此程序的关键在于RET指令。这个指令没有用过。消化吸收一下。

第二条VB10这个描述错误,是VB10通过编码DECO转换是什么?

以下是引用阳春节拍在2025-10-23 08:39:09的发言 >31楼:vb10是当前循环编号...

引用31楼详细内容:

vb10是当前循环编号,用于查找下个报警时从此位置开始,以实现循环报警。

此子程序为查找下个报警序号,每调用一次返回一个,无报警则返回的是0。因此可以在父程序中使用延时调用,延时为报警时长,报警结束才调用一次,若有报警持续下一个报警时长后再调用,若无报警(得到编号0)可立即再次调用。

如需要增加报警过程中报警状态结束需立即停止报警,可给延时增加一个置1操作(比如mov延时到td),能流为无报警(比如vw0为0)

以下是引用为修修为在2025-10-23 08:18:18的发言 >30楼:刚才仔细看了一下...

引用30楼详细内容:

刚才仔细看了一下程序,再次感谢。

有以下几点疑问:

1、这个应该是一个16位数据处理程序。

2、程序中VB10是什么?

3、循环体将报警序号传出,如何做延时。

我主要是纠结于这个32位的报警,应该如何处理有报警时,这个语音播报的问题,因为语音播报是需要时间的,也就是播报第一条报警后,自动跳到下一条报警,这个是有时间延时的,给播报的时间。有多条报警时播报每一条报警时,相当于按了一下暂停键。

以下是引用阳春节拍在2025-10-22 21:45:14的发言 >28楼:这个不知道行不

引用28楼详细内容:

这个不知道行不

感谢指点。程序的框架思想大概了然。还得要消化吸收一下。等有空闲时间,好好琢磨一下。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9054条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。