多路复用在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做多路复用了(未求证,不保真…)