【求助】关于MCGS通用版的modbus通讯问题 点击:2371 | 回复:16



骄阳赤子心

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-15 22:45:10
楼主

客户给的modbus协议,我用mcgs通用版做上位机通讯。

客户给的modbus地址40001对应16个报警,这个报警我该怎么采集呢?因为mcgs通用版3、4寄存器不支持位采集地址,我很疑惑该怎么采集多个报警呢?比如第一个报警:燃气高压力报警,字节0第7个位为1(1000 0000),那就是40001=16#80,就是燃气高报警了。这个报警怎么组态出来呢?实时数据库里,报警只有6个报警,这里却有16个报警,该怎么关联呢? 要么做位指示灯,要么做报警条,要么做出来文字提示报警,该怎么组态呢?  望指点。





楼主最近还看过



骄阳赤子心

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-15 22:49:43
1楼

我现在主要疑惑的是这modbus  40001对应16个报警,该怎么组态出来呢? 一直没有思路。以前做过的报警一般都是一个地址对应一个报警或者一个类目。如果是自己做PLC 程序还可以做出来,可这是和别人的设备modbus通讯,它给的这个40001的16个报警,该怎么使用呢?我们可以得到读数,可是这个读数怎么转换成报警,显示出来呢?

飞龙819

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 38回
  • 年度积分:157
  • 历史总积分:224
  • 注册:2008年12月16日
发表于:2021-06-16 10:27:43
2楼

"骄阳赤子心" 的回复,发表在1楼
        对内容: 【我现在主要疑惑的是这modbus  40001对应16个报警,该怎么组态出来呢? 一直没有思路。以前做过的报警一般都是一个地址对应一个报警或者一个类目。如果是自己做PLC 程序还可以做出来,可这是和别...】进行回复:

        -----------------------------------------------------------------


利用数学函数       提取的第一位报警值=!BitAnd(获得的报警值,1),提取的第二位报警值=!BitAnd(获得的报警值,2),提取的第三位报警值=!BitAnd(获得的报警值,4),提取的第四位报警值=!BitAnd(获得的报警值,8)......试一试。

获得的报警值即40001的值!

phoenixyqc

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 124回
  • 年度积分:89
  • 历史总积分:625
  • 注册:2009年2月23日
发表于:2021-06-17 16:47:13
3楼

加内存开关变量对应各个报警,在循环策略的脚本里去判断内存变量的状态

骄阳赤子心

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-19 21:00:05
4楼

"飞龙819" 的回复,发表在2楼
        对内容: 【"骄阳赤子心" 的回复,发表在1楼        对内容: 【我现在主要疑惑的是这modbus  40001对应16个报警,该怎么组态出来呢? 一直没有思路。以前做过的报警一般都是一个地址对应一个报警...】进行回复:

        -----------------------------------------------------------------


这个不是逻辑与吗?这个不行吧。我觉得还是脚本触发虚拟通道的一个变量比较好,每个位都能做出来

骄阳赤子心

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-19 21:01:00
5楼

"phoenixyqc" 的回复,发表在3楼
        对内容: 【加内存开关变量对应各个报警,在循环策略的脚本里去判断内存变量的状态...】进行回复:

        -----------------------------------------------------------------


是不是虚拟通道里 我添加响应的16个报警,再用脚本去做条件的判断,对应每个报警


飞龙819

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 38回
  • 年度积分:157
  • 历史总积分:224
  • 注册:2008年12月16日
发表于:2021-06-21 11:23:05
6楼

这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据01001100,第七位假设是温度报警,第四位是压力报警,用01001100与1000000按位与一下,不就得到第七位的温度报警信号了吗,与1000按位与一下就得到压力报警了(如果压力没有报警,是其他值,按位与后是00000000,有报警值就是1000,判断它大于零或等于零不就可以了吗)。

IF 0=!BitAnd(获得的报警值,1)  THEN

未检测到点火火焰报警=0    '关闭报警

ELSE

未检测到点火火焰报警=1    '启动报警

ENDIF

IF 0=!BitAnd(获得的报警值,2)  THEN

手动急停报警=0

ELSE

手动急停报警=1

ENDIF





骄阳赤子心

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-22 19:02:40
7楼

"飞龙819" 的回复,发表在6楼
        对内容: 【这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据01001100,第七位假设是温度报警,第四位是压力报警,用01001100与1000000按位与一下,不就得到第七位的温度报警信号了吗,...】进行回复:

        -----------------------------------------------------------------


哦 明白了  谢谢您。脚本用的少,不太熟悉。十分感谢。您一般组态用什么软件呢?最近因为这个事,确实头疼,下了一个king view老是莫名死机。 感觉还是mcgs稳定。再次感谢!!!

骄阳赤子心

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-22 20:01:59
8楼

"飞龙819" 的回复,发表在6楼
        对内容: 【这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据01001100,第七位假设是温度报警,第四位是压力报警,用01001100与1000000按位与一下,不就得到第七位的温度报警信号了吗,...】进行回复:

        -----------------------------------------------------------------


另外我请教下,脚本模式不是不能用汉语吗?我的变量名得用英文吗?脚本基本没用过

骄阳赤子心

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-22 20:08:29
9楼

"飞龙819" 的回复,发表在6楼
        对内容: 【这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据01001100,第七位假设是温度报警,第四位是压力报警,用01001100与1000000按位与一下,不就得到第七位的温度报警信号了吗,...】进行回复:

        -----------------------------------------------------------------


另外 请教下是放在循环脚本里吗?

飞龙819

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 38回
  • 年度积分:157
  • 历史总积分:224
  • 注册:2008年12月16日
发表于:2021-06-23 15:47:31
10楼

"骄阳赤子心" 的回复,发表在9楼
        对内容: 【"飞龙819" 的回复,发表在6楼        对内容: 【这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据01001100,第七位假设是温度报警,第四位是压力报警,用01001100...】进行回复:

        -----------------------------------------------------------------


循环策略里新建个脚本策略

骄阳赤子心

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2016年9月18日
发表于:2021-06-23 19:57:48
11楼

"飞龙819" 的回复,发表在10楼
        对内容: 【"骄阳赤子心" 的回复,发表在9楼        对内容: 【"飞龙819" 的回复,发表在6楼        对内容: 【这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据0100110...】进行回复:

        -----------------------------------------------------------------


感谢        

飞龙819

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 38回
  • 年度积分:157
  • 历史总积分:224
  • 注册:2008年12月16日
发表于:2021-06-24 15:07:18
12楼

"骄阳赤子心" 的回复,发表在8楼
        对内容: 【"飞龙819" 的回复,发表在6楼        对内容: 【这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据01001100,第七位假设是温度报警,第四位是压力报警,用01001100...】进行回复:

        -----------------------------------------------------------------


脚本变量可以用中文的

江南四少

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 74回
  • 年度积分:0
  • 历史总积分:171
  • 注册:2017年3月17日
发表于:2022-02-15 09:20:09
13楼

"飞龙819" 的回复,发表在12楼
        对内容: 【"骄阳赤子心" 的回复,发表在8楼        对内容: 【"飞龙819" 的回复,发表在6楼        对内容: 【这是按位与,不是逻辑与好不好,我就是这样做的。比如一个报警数据0100110...】进行回复:

        -----------------------------------------------------------------

可以用中文,但还是英文的好点。

thb1997

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 18回
  • 年度积分:0
  • 历史总积分:18
  • 注册:2014年10月10日
发表于:2022-03-26 17:25:36
14楼

"飞龙819" 的回复,发表在2楼
        对内容: 【"骄阳赤子心" 的回复,发表在1楼        对内容: 【我现在主要疑惑的是这modbus  40001对应16个报警,该怎么组态出来呢? 一直没有思路。以前做过的报警一般都是一个地址对应一个报警...】进行回复:

        -----------------------------------------------------------------


谢谢,学习了!

黄永_47

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:78
  • 注册:2003年11月30日
发表于:2022-04-23 08:13:42
15楼

!bittest(a,b)这个函数可以测试随便哪个位是否是1or0

san760105

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:27
  • 历史总积分:27
  • 注册:2024年10月02日
发表于:2024-10-14 14:32:50
16楼

谢谢,学习了!

回复本条

    

热门招聘
相关主题

官方公众号

智造工程师