多路复用在HMI上的使用

这里主要是利用多路复用在HMI上做到单页面切换IO变量的功能,对于系统中要显示的IO数量很多的时候适用。
系统搭建:CPU1215+KTP900系列HMI
方法如下:

1. 画面模板

建立如下元素

  • 复选文本框
  • 状态指示器(小圆点)
  • 符号IO域
    如图:

    .在画面中我对输入和输出分别做了一组IO画面。
    .符号IO域显示的默认文本来自文本列表
    .此处有16路输入(IW)和16路输出(QW);对应了总共32个小圆点和32个符号IO域。

2. 文本列表的建立

在文本列表中,需要新建的文本列表一共4组,分别对应输入复选框,输入IO显示;输出复选框,输出IO显示。

  • 输入输出文本列表框如下:

    问:为什么值是0,2,4,6,8..?
    .答:(因为我是用的IW显示的,一个word占用了两个字节)。
    .又问:为什么这个值就一定是连续的,它不可以是随心所欲的吗?(毕竟我的注释内容里的地址就不连续)
    .答:看到后面就知道了,后面会解释。

  • 输入输出注释文本列表如下:


    这里需要把你的符号表的注释全部导入过来,换句话说,只要你的符号表写的够详细和完整,这里就只是Ctrl+C/Ctrl+V的事。

3. 建立HMI变量

  • 为你之前建立的符号IO域分配相应的变量

    .16组input16组output对应了最开始画面里面橘黄色的文本所使用的变量。

  • 建立地址变量以及多路复用变量

    .要把访问模式改成<绝对访问>,符号访问是用不了多路复用的。
    .有心人或许会发现,我这里用的是DB而不是直接用的IW/QW。这是因为IW/QW在实际工程中可能不是连续增长的(比如0,2,4,6,8,10..)。毕竟你接到的祖传代码中IO地址可能是放飞自我的,这就需要你多做一步工作,就是把IO全部按照你想要的规则映射(说成序列化也行)到你的DB地址中,然后注释依旧按照实际的IO地址去注释。

4.变量计算方法

我们都知道,在PLC中,一个byte是8个bit。一个word是2个byte。

  • 复选文本框的变量连接:

    .uint类型的I_Address和Q_Addres分别连接到输入和输出的文本列表(就是0,2,4,6,8..连续变化那个)

  • I_Address和Q_Addres的变量线性缩放:
    Y = aX + b

    .Y表示in/out文本(橘色那个)
    .X表示 I_Address或Q_Addres
    .b表示bit。

缩放截图如下:

.这个缩放主要是为了把地址映射给文本注释(细节:你发现变量的注释文本列表下标是0123456的顺序增长的了吗?)
.uint类型占16个bit,所以你的线性缩放一共16次,当b=15的时候就可以了。

5.连接变量

在画面中,需要把你的元素和对应的变量连接起来。

  • 文本复选框变量连接

.这个就不讲了,上面刚讲完

  • 符号IO域的变量连接

    .文本内容来自文本列表
    .变量值是刚刚上面的线性缩放计算出来的
    .QW同理,只是input变成output

  • 小圆点指示器的变量连接

    .输入引用I_Adderss,输出引用Q_Adderss
    .单个位,注意我为什么I0.0是从8开始的。这里涉及到大端模式和小端模式的概念,具体概念可以百度解释。
    .西门子PLC采用大端模式,仅字节调换,位的顺序不变。

6. 总结

由上,这就是多路复用在HMI上的一种用法,当然也有一些其他用法,但是万变不离其宗。好像在博图V19之后,在PLC内部也可以使用IO做多路复用了(未求证,不保真…)


多路复用在HMI上的使用
http://example.com/2024/07/21/多路复用在HMI上的使用/
作者
xiao cuncun
发布于
2024年7月21日
许可协议