admin 管理员组文章数量: 887021
2024年1月25日发(作者:jdk官网打开没安装)
组态王软件与单片机串口ascii通讯的机制及实现方法 作者:姜宝申组态软件广泛的应用于工农业生产的各个领域,是保证相关系统设备经济稳定安全运行的重要方式,是对传统控制方式的一次革命,得到了越来越广泛的应用。很多工控及电子爱好者对这方面很感兴趣,都跃跃欲试,可苦于软件要想得到实际效果,就得连接设备,通过设备预设的寄存器与软件的变量进行连接,辅以命令语言,才能取得真正的体验。软件支持的设备比如板卡、数字仪表、PLC、变频器等等都是属于工控设备,价格都比较昂贵,一般很难触及。那是不是组态软件就不适合于我们用了呢,也不一定,比如国产的组态王组态软件支持单片机串口ascii通讯,烧写了相应程序的单片机也可以当做组态软件的设备,和其他设备一样,也能完成诸如水位、行程等状态的监视及电机、阀门、灯泡、加热器等的启动停止,开与关,以及模拟量经AD转换后,通过串口以ascii码的形式传送给组态软件,只是这些功能的实现是依靠单片机的端口来完成,组态软件访问单片机,监视单片机所有端口状态,控制一部分端口的高低电平状态,辅以外部电气回路,同样能实现相应的功能。例如:组态软件通过串口发送指令,控制单片机的某个输出端口的电平高低变化,端口通过驱动使继电器的触点闭合,电机转动,假如这个电机是带动水泵往水箱里面打水,水箱水位的预定位置装有触点,这个触点连接在单片机的另一个输入端口上,当水位到达触点位置,触点动作单片机的这个端口电平发生变化,这个变化通过同一个串口传回给组态软件,组态软件可以根据命令语言编写的程序酌情是自动还是手动停止电机运行,或者是调整电机的转速,保证水箱的水位在预设的范围内,这就是组态软件构成的控制系统的最基本应用。
图1相对而言,用单片机与组态软件实现的控制系统要比其他成品设备的组态稍微麻烦一些,不但需要了解掌握组态软件的工作机制,还需要单片机的软硬件及电路方面的知识,这里边的重点就是单片机的汇编或c语言编程,但掌握了组态软件的通讯协议,按协议编写,比较起来并不是很难。图2就是用组态软件与单片机通讯实际运行状态截图,这个画面(组态软件的定义),显示的是组态软件与单片机通讯状态以及单片机各脚位的电平高低,即8051芯片P2和P1的状态,还有控制端口电平的按钮开关。他不是控制画面,如果镶嵌在实际系统中,应该算通讯诊断画面,图中显示的具体内容的含义,后边将做介绍。组态王预装了单片机设备的驱动,也就是它把单片机当成设备来对待,与数字仪表、PLC、变频器等同,这些装置中有一部分也是通过串口与组态软件通讯的。既然是串口通信,就要遵循组态软件制定的通讯规则,体现在软件通讯的格式上,就是通讯协议。协议明确了组态软件访问单片机的读、写命令以及与之对应的单片机的应答之间的关系,单片机只有按照这个协议来编制程序,回复组态软件的读写命令,这样才能保证准确无误的显示、控制、操作目标设备,它不同于平常说的,单片机想发什么,组态软件就接收什么、显示什么。组态王软件与设备之间的关系是软件方是主人,设备方是从属。也可以比喻成软件是人的大脑,设备是人的四肢。主机发出指令,从机按指令行事,并做出相应的回复。这样做的道理很简单,作为控制系统,操作者是主人,他的信息来自于设备反馈给软件显示的画面上信息,同时根据现场的状态工艺流程等做出相应的操作,比如电机的启动停止、阀门的开启与关闭等等。
图2下面我们就来分析一下组态王软件和设备之间是如何进行通讯的:当你运行了组态软件,也就是安装完软件,在桌面上生成了快捷启动方式的图标,鼠标单击它,软件就运行了。首先显示的是工程管理器,选择目录,也就是你要建立的工程安装在电脑的哪个位置。你可以在空白框里填上一个名称,它就会在软件启动位置新建一个目录。因为你是在桌面启动的,鼠标单击‘下一步’,它就会提示你是否新建,你回答‘是’,这时桌面上就出现了刚才你输入名称的目录,然后软件提示你输入工程名称、工程描述,依你的情况填写,然后单击完成,这样你的工程名称就出现在了工程管理器的目录中。鼠标双击你的工程名称,启动这项工程,也就开始了你的工程建设了。首先要做的第一步就是连接或叫注册你的设备,让软件知道它连接了什么设备,从而使用哪个协议和连接的设备对话。我们这里安装的无疑是单片机,安装设备也就是安装相应的驱动,是安装逻辑设备,大体步骤很多文章都有介绍,不过为了讲解的完整性,在这再重新梳理一下:单击左侧‘设备’右侧的‘新建设备’下拉菜单‘设备驱动’‘智能模块’‘单片机’‘通用单片机ASCII‘串口’。指定一个逻辑名称,就用系统给定的‘新IO设备’,通讯口等选择默认即可.在组态王中设置的通讯参数
如波特率,数据位,停止位,奇偶校验必须与单片机编程中的通讯参数一致。有关组态王中与单片机的通讯协议的标准文本请查阅安装文件夹中:‘组态王6.55VALUEPA技术资料常用协议单片机AS通用单片机.DOC’中的内容。组态王的单片机ASCII串口协议的通讯格式一共六条:其中上位机也就是软件发出的只有两条,分别是‘上位机发送读命令’和‘上位机发送写命令’。下位机也就是单片机分别应答‘若正常’‘若不正常’。读懂这两条命令,对于组态王与单片机构成的系统也就成功了一半了。上位机发送读命令字头设备地址标志数据地址数据字节数异或CR下位机应答:若正常:字头设备地址数据字节数数据…异或CR若不正常:字头设备地址**异或CR上位机发送写命令字头设备地址标志数据地址数据字节数数据…异或CR下位机应答:若正常:字头设备地址##异或CR若不正常:字头设备地址**异或CR为了能更好的理解组态王软件与单片机ASCII通信的原理,我们做一个实验:这个实验除了需要组态王软件之外,需要一个虚拟串口连接软件,一个串口调试软件。运行虚拟串口连接软件,相连接的两个串口分别设定成组态王的串口号,和串口调试软件的串口号。串口调试软件的通讯参数要和组态王软件的一致,设定为接收,HEX格式,运行这个软件。鼠标右键单击组态王软件刚刚建立的‘新IO设备’,选择‘测试新IO设备’出现串口测试对话框,选择‘设备测试’选项卡,头一项是寄存器,只有一个值x,不管三七二十一,你先填一个x0,也就是在已经有的x后边加个0。后边一个数据类型学过c或c51都知道,里边的下拉项中是在c语言中经常能遇到的数据类型,对x寄存器而言,与之对应的只有几项,先填上这个‘BYTE’即字节型,也就是说,单片机这个设备的寄存器x0的数据类型是字节型的,紧接着鼠标单击‘添加’按钮,上边填写的寄存器名以及数据类型就出现在了下边的采集列表中。选中这个寄存器,然后单击‘读取’按钮,正常情况下,串口调试软件的接收窗体内会出现一串数码,格式应该是这个样子:
460D上面说过,组态王向单片机发送的只有两条命令,一个是读,一个是写,上面从串口软件读出这串字符,就是组态王软件的读命令。那么为什么我按‘读取’,组态王会发出一串字符呢,这就是软件与单片机的通讯机制,用通俗的语言就是,组态王软件通过串口问与之连接的设备‘你那里什么情况了’。这只是测试,我们再组态试一下,在添加了‘新IO设备’以后,单击数据词典,新建一个名字为a变量,变量类型为‘IO整数’,连接设备为‘新IO设备’,寄存器和数据类型同上,是x0和BYTE,其它不变,然后确定。选择‘画面’,‘新建画面’,为画面起个名字,可以是字母,也可以是汉字,确定。出现画面,选择工具箱中的字符‘T’工具,在画面中适当位置单击鼠标,输入两个##,鼠标双击这两个字符,显示动画连接对话框,选择‘模拟值输出’,弹出‘模拟值连接对话框’,单击表达式右侧的‘?’,选择刚才在数据词典中建立的变量a,其他不变,确定,确定。然后‘文件’‘全部保存’,关闭画面。选择‘切换到运行系统’,这时你还是用串口调试软件,会接收到同样的字符串。也就是说,只有你在画面上连接了与你添加的设备有关的变量,软件一旦进入运行状态,组态软件就会主动发出与之匹配的一串字符,等待设备的应答。设备只有在设定的间隔内正确回复了,通讯才能持续进行,否则软件会提示通讯错误,变量都会变成设定值,比如‘??’等。下面解读一下这串代码,头一个40和最后一个0D是固定的,组态王不管是读还是写,这两个都是一样的,十六进制格式,分别代表代码的开始和结束。这两个中间的若干个都是ascii格式,这也是组态王中单片机ascii串口的由来。从40开始的第二个和第三个代表单片机的地址,30和46,翻译成十六进制就是0f,再翻译成十进制就是15,他和组态王‘新IO设备’设置的地址对应,意思就是组态王要和地址为15的单片机设备对话。再往后的两位41和30是标志位,其中的30对应的十六进制和二进制都是0,字节型数据,不打包,读。二进制最后一位要是1的话就是写。再往后的四个都是30,代表的是数据地址,先头设定的寄存器不是x0么,x代表寄存器,后边的0代表地址。你可以将寄存器改成x1试试,这四个的最后一个就变成了31了。再后边的30和31,代表数据字节数,刚才设定的数据类型是BYTE,一个字节正好对应。再往后的30和36,是这两个数前边除了开头的40以外的异或值,你可以用电脑上xp系统自带的科学计算器算一下,数值吻合。
设置异或值的目的应该是保障串口收发双方数据的一致性。以上就是组态王读命令的全部解释,写命令的解读方式类似,读者可自行测试。下位机也就是单片机的应答都是写在单片机程序里的,这个格式是固定的,当单片机接收到组态王的读或写命令时正常或有误时的应答。有了这个解释就可以编写单片机的程序了,这里要勾画一下程序的框图:定义端口的用途,这里P2输出,P1输入。他们的差别就是,组态王都可以读,但是只能写P2,不能写P1。定义一个数组,用于接收组态王的读写命令,根据串口协议的格式有30个够了。unsignedcharrec[30];串口定义,放在主程序中,这个很常见:TMOD=0x20;TL1=0xfd;TH1=0xfd;SCON=0x50;TR1=1;IE=0x90;//定时器1--方式2//11.0592MHZ晶振,波特率为9600//方式1//启动定时//EA=1,ES=1:打开串口中断还有以下几个子程序:1、中断处理2、数据处理3、Ascii到16进制转换,用于接收到ascii码转换4、16进制到Ascii转化,用于发送应答5,、接收和发送。程序运行过程:1、串口中断发生后,先用判断语句判断头一个是不是40,如果是,将循环变量赋值0,然后接收,当收到0D后完成接收,进行数据处理。2、判断一下是否是本机地址,也就是把接收到的第二个和第三个ascii转换成16进制后与单片机内一个16进制的固定值进行比较,相等就是本机地址。3、对第二位,到异或值前的几个ascii码进行异或运算,与收到的异或码进行比较,如果相同,即为数据正确。4、然后将接收到的第五个ascii转换成16进制,与0x01进行与运算,判断是读还是写。5、如果是读,将P1和P2端口的状态送到应答格式中的数据中,发送回组态王。
6、如果是写,将后边的数据值赋值于P2端口,P2端口的相应的位就随之进行变化了。以上就是单片机程序的运行流程,对于c51来说,不是很难,大家可以尽情的发挥吧。下面解释一下图2组态王与单片机通讯控制中各个单元代表的内容:组态王与单片机通讯状态栏,显示的是软件与单片机的通讯状态,其中通讯状态后面的‘通讯正常’接收的是‘新IO设备’中的‘CommErr’变量。通讯如果出现问题,会显示‘通讯故障’。单片机端口数据,连接的是一个变量类型为‘USHORT’的变量,因为要接收两个端口P1和P2的数据,每个端口的数据范围都是0-ff,一个字节,所以用‘USHORT’类型变量,是两个字节的连接。下面的‘单片机P1(P2)端口位状态’,分别显示的是P1和P2端口每一位的状态,其中红色代表低电平,绿色代表高电平。不难看出,端口状态的二进制数转换成16进制后,与上面接收到的‘字’类型变量分解成两个后的16进制数值都是相等的。下面的按钮就是控制P2端口的对应位的状态用的,实际应用也就是开关的作用,用于启停与之对应相连的电机、阀门等等执行机构的。P1端口的状态软件只能读但是不能改写,它们相当于现场的限位器或水位开关,它们的状态取决于现场
的状态。为了简单明了的说明问题,以上内容仅涉及到了数字量的传输,模拟量结果的传输类似,大家可以举一反三,以此类推。
版权声明:本文标题:组态王软件与单片机串口ascii通讯的机制及实现方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1706183001h503336.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论