冯俊 吴佳雯
摘要:本文介绍了一种基于STM32以及HMl组态屏的交互系统的设计方案,该系统的硬件部分主要有STM32F103C8T6单片机和HMl组态屏。该系统的软件代码由C语言编写。本系统通过连接STM32与HMl组态屏,使得用户可以在触摸屏上进行操作来完成一些简单的工作。该系统在工作过程中HMl组态屏作为主机会不断地给单片机发一些码,在收到码后单片机作为从机必须也给HMl组态屏,以一种相当于一问一答的方式实现交互。
关键词:STM32F103C8T6;HMl组态屏;问答式交互
中图分类号:TP311文献标识码:A
文章编号:1009-3044(2020)19-0211-02
开放科学(资源服务)标识码(OSID):
社会在变化,科技在发展,时代在进步,越来越多的领域都用上了触摸屏,通过在触摸屏上输人命令,随后系统便开始按照命令完成工作,为此本文也研究了一种交互系统,来实现单片机与触摸屏的交互来完成一些简单的工作。通过研究MOD-BUS协议,我们了解到HMI组态屏想要与STM32成功进行交互,就必须在主机发送请求后,从机进行应答,这样才能成功交互。以此为基础我们研究的系统也存在一定的可行性,对一些领域具有一些参考价值。
1 STM32F103C8T6简介
STM32F103C8T6这款单片机从名字上来看,我们可以知道开头的ST代表的是意法半导体,其后的M代表的是微电子学的意思,32就是32位的意思,所以STM32合起来的意思就是一款由ST公司研究开发的32位的微處理器。F103就表示其中的增强型芯片,后面的C代表的是引脚的数目为48个引脚,8则代表FLASH的大小为64K,T表示的是它的封装方式,6表示的是它温度的范围。它不仅结构简单,易于学习,而且成本价格低,功耗低,功能多,在各种地方还都可以见到STM32产品的身影,比如学习、医疗、手环、平衡车等,可以说它是最璀璨的新星,受到各大工程师的青睐,能与之媲美的也是寥寥无几。
2 MODBUS协议
Modbus协议简单地来说就是一个主机请求,从机应答的协议,并且它会提供给用户规定的功能码。Modbus包括许多协议,如TCP协议,RTU协议等等,它不存在规定的物理层,其中Modbus的RTU协议规定数据的结构,对答方式,消息和命令,数据通过主机发出请求命令消息,然后从站接收到消息之后,判断其正确性,如果正确则发送数据到主站请求响应。该协议也只有主站拥有主动权可以主动的发送消息,从站只能被动地接受然后进行回应,以及在错误时进行回答,将错误报出。
Modbus最重要的一部分其实就是对数据的分析,然后判断数据正误,在本文在使用到的是RTU协议中的16位CRC校验。CRC的作用大概就是当从机收到主机的命令后进行计算,然后校验CRC,若CRC正确则说明命令传输正确,错误说明命令传输过程中可能受到干扰等原因,此命令不能使用,在从机收到正确的命令之后进行回复的时候,还需要计算一次正确的CRC,然后填充在需要回复的代码后面,再发给主机完成应答过程,因为在通信过程中需要不断的计算CRC的值,所有由此可见CRC校验尤为的重要。
3 HMI工业组态屏界面编辑
如果想要使用HMI组态屏,就需要去Kinco的官网下载KincoHMIware组态编辑软件,下载完这款软件之后,就开始如下图所示的步骤开始我们软件的体验:
在熟悉了如何在软件上进行编辑之后,我们就可以开始对我们的系统的界面开始编辑设计了。首先我们需要选择本次所需要用到的HMI组态屏-MT4043R,然后我们需要选择与其通信的PLC,因为本次采用的通信协议是Modbus中的RTU协议,所以选用Modbus RTU这款PLC,最后用串口将他们连接起来,当然要注意的就是需要连同一个COM口,最终编辑完的硬件连接图如下2所示:
在完成基础的连接之后,就可以进入HMI组态屏中,对显示界面进行编辑了,可以拖动位状态设定,位状态切换开关,位状态显示灯,文本显示这些模块来完成界面的编辑。
4 系统界面设计
因为技术水平有限,所以本文打算将系统界面设计成如下图3的样子:
首先从PLC元件中选择4个位状态切换开关,将它们的地址类型都设置成OX,将它们的地址分别设置成1,2,3,4,再将他们的开关类型都设置成切换开关,再设置他们的标签内容,这样就可以完成4个位状态切换开关的设置了,然后再选择2个位状态设定开关,将他们的地址类型都设置成OX,地址设置成5,6,将这些开关的地址设置成不同是为了他们能在工作的时候不会相互干扰,接着把他们的开关类型设置成复位开关,最后为了改变开关的显示方式我们需要从外面导人上下箭头的图标,这样下来2个位状态设定开关也完成了,接下来就是文本显示模块了,直接设置地址类型为3X,地址为1就完成了,最后要设置的是位状态显示灯了,设置它的地址类型为OX,地址为1,之所以设置为1,是为了让它与sw0开关的工作状态同步,比如开关按下的时候,指示灯亮,就代表外部开始工作,最后改变位状态显示灯的图标即可,方法同位状态设定开关。在完成这些之后系统界面的设计也就完成了。
5 软件设计及原理
本系统的主要原理就是主机和从机通过Modbus协议,进行CRC校验来完成主机从机之间一种请求应答的过程。知道了这一点我们就可以开始进行测试了,首先我们通过,连接两个USB转串口的模块,然后将它们连到电脑上,打开串口助手之后选择一个COM口,然后Kinco软件中在线模拟的时候选择另一个COM口,这样就可以在串口助手上看见HMI组态屏作为主机给单片机发的功能码了,经过我们实验测试所知,我们会收到01功能码,以及04功能码,其中04功能码由文本显示模块所发,01功能码均由其他模块所发。因为知道了收到的功能码的类型,所以单片机作为从机在应答的时候就需要回复01功能码与04功能码,这样主机从机就完成了通讯。主机收到了从机的功能码后就会执行一系列的操作,在本系统中主机收到从机发的功能码后,组态屏上会把开关按钮都显示出来,这些都是在接收01功能码后的操作,如果接收到的是04功能码,那么文本显示模块上的内容则会改变。在开关显示出来之后,我们需要改变它们的状态,所以我们肯定会去点击这个按键,这时候组态屏就会像单片机发送05功能码,单片机接收到05功能码后,必须立刻做出反应,向组态屏发送同样的05功能码,这样主机从机间又完成一次通讯,然后我们想要的功能才会实现。以此为基础,整个系统的工作原理就显得不是那么的困难了,无非就是收发,收发,在发完之后执行相应的操作。软件的程序设计流程如图4。
6 总结与展望
本系统的设计所需要用到的是STM32的单片机,本次选用的是以STM32F103C8T6为核心的这款单片机,因为还在学习研究该单片机以及Kinco软件的阶段,所以设计出来的系统相对的比较简单一些,通过以后的不断学习,该系统还有很大的改进提升空间。就本次研究实验而言,过程也并不是十分顺利的,在过程中也遇到了许多问题,在刚开始写代码的时候,因为C语言学的不是非常的透彻,在获取CRC校验位的时候总是出错或者接收不到校验位,后来通过查阅书籍以及问同学解决了该问题。最后在进行在线模拟的时候发现,操作的时候存在很大的延迟,但是将工程下载到HMI组态屏中后,并没有发现延迟。总而言之,该系统的研究过程并不是一帆风顺的,但最终还是实现了交互的功能,这为以后的一些研究提供了一些基础,还是有些参考价值的。
参考文献:
[1]侯殿有,单片机C语言程序设计[M].北京:人民邮电出版社,2010.
【通联编辑:闻翔军】