组态王与单片机的通信与设计前言本文主要是解决装有组态王的PC机与单片机的通信问题,这里选择通过计算机的COM1口进行串行通信。
单片机和PC机的串行通行一般采用RS-232、RS-422或RS-485总线标准接口,也有采用非标准的20mA电流环的。
为保证通信的可靠,在选择接口时必须注意:(1)通信的速率;(2)通信距离:(3)抗干扰能力;(4)组网方式,既可以保证正常通信时的最大通信端口数量。
这里采用RS-232接口与单片机通信的方法。
由于两者间的电平规范不一致,实现两者间的通信要解决接口电路的电平转换问题。
正文选题背景随着单片机和微机技术的不断发展,单片机的应用也从独立的单机向网络发展,由PC机和多台单片机构成的多级网络测控系统已成为单片机技术发展的一个方向。
在一个大型的应用系统中,通常由单片机完成数据的采集和上传,后台则通过PC机对数据进行分析并处理,复杂的还要建立数据库形成网络,二者的结合,充分发挥了单片机在实时数据采集和微机对图形处理、显示以及数据库管理上的优点,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。
随着微电子技术、计算机控制技术、工业以太网技术及现场总线技术的发展,作为用户无需改变运行程序原代码的软件平台工具——工控组态软件日渐成熟。
由于工控组态软件在实现工业控制的过程中免去了大量烦琐的编程工作,解决了长期以来控制工程人员缺乏计算机专业知识与计算机专业人员缺乏控制操作技术和经验的矛盾,极大地提高了自动化工程的工作效率。
近年来,工控组态软件在中小型工业过程控制工程、工业自动化工程中越来越受到欢迎。
不仅如此,工控组态软件还在配电自动化、智能楼宇、农业自动化、能源监测等领域也逐步展示了其独特的优势。
单片机控制系统以其高性能价格比、稳定、易于实现等特点而被广泛使用,但他难以实现动态复杂的图形监控界面;而组态王软件具有强大丰富的监控界面设计功能,却难以实现复杂的控制算法,而单片机则难以实现动态复杂的图形监控界面,若采用以单片机为下位机,以装有组态王的PC极为上位机的控制方式,将彻底改变原来单片机控制系统的单调、简单的控制界面的缺陷,进一步推动单片机控制方式的广泛应用。
在这个设计中有以下问题待以解决:1、TTL/RS232电平转换及其接口电路的处理。
2、由于组态王接收的是数据的ASCII码,因此要实现数据与它所对应的ASCII码的转换。
3、组态王监控界面的设计。
设计要求设计组态王监控界面,编写单片机发送接受程序以实现组态王与单片机两者间的通信。
方案论证过程论证组态王中的设备配置利用设备配置向导就可以完成串行通信方式的I/O设备安装,安装过程简单、方便。
在配置过程中,用户需选择I/O设备的生产厂家、设备型号、连接方式,为设备指定一个设备名,设定设备地址和串口。
操作步骤如下:1激活设备配置向导。
在组态王工程浏览器的“设备”大纲项下,选择您要设置的I/O设备类型,在右侧目录内容显示区双击“新建”图标。
2在设备配置向导中选择要安装串口设备。
3在设备配置向导中将要安装的串口设备指定一个逻辑名称。
④在设备配置向导中为安装的串行设备指定与计算机相连的串口号。
⑤在设备配置向导为串口设备指定设备地址。
其中格式:##.#。
前面的两个字符是设备地址,范围为0~255,此地址为单片机的设备地址,由单片机中的程序决定;后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包,组态王与单片机的通信协议在组态王中定义的寄存器格式寄存器名称dd上限dd下限数据类型X dd655350FLOAT/BYTE/UINT 斜体字dd代表数据地址,此地址与单片机的数据地址相对应。
注意:在组态王中定义变量时,一个X寄存器根据所选数据类型(BYTE,UINT,FLOAT)的不同分别占用一个、两个,四个字节,定义不同的数据类型要注意寄存器后面的地址,同一数据区内不可交叉定义不同数据类型的变量。
.组态王与单片机通讯的命令格式:读写格式(除字头、字尾外所有字节均为ASCII码)字头设备地址标志数据地址数据字节数数据…异或CR说明;字头:1字节1个ASCII码,40H设备地址:1字节2个ASCII码,0—255(即0---0x0ffH)标志:1字节2个ASCII码,bit0~bit7,bit0=0:读,bit0=1:写。
bit1=0:不打包。
bit3bit2=00,数据类型为字节。
bit3bit2=01,数据类型为字。
bit3bit2=1x,数据类型为浮点数。
数据地址:2字节4个ASCII码,0x0000~0xffff数据字节数:1字节2个ASCII码,1—100,实际读写的数据的字节数。
数据…:为实际的数据转换为ASCII码,个数为字节数乘2。
异或:异或从设备地址到异或字节前,异或值转换成2个ASCII码CR:0x0d。
上位机发送读命令字头设备地址标志数据地址数据字节数异或CR下位机应答:若正常:字头设备地址数据字节数数据…异或CR若不正常:字头设备地址**异或CR上位机发送写命令字头设备地址标志数据地址数据字节数数据…异或CR下位机应答:若正常:字头设备地址##异或CR若不正常:字头设备地址**异或CRTTL/RS232电平转换及接口电路RS-232规定的电平和一般微处理器的逻辑电平不一致,必须进行电平转换,,这里采用MC1488和MC1489芯片,MC1488和MC1489芯片为早期的RS-232至TTL逻辑电平的转换芯片,下图为实际电路。
采用该芯片的主要缺点是电路需要12V电压,不适用于低功耗的系统。
图中TXD、RXD 分别接单片机的发送和接收端。
单片机中对数据的处理组态王为用户提供了单片机ASCII码协议,所以可直接进行串行口通信,单片机ASCII 协议支持单片机与组态王通信,只要按照协议编写单片机通信程序就可实现与组态王的通信。
波特率:由单片机决定(2400,4800,9600and19200bps)。
字节数据格式:由单片机决定。
在组态王中设置的通信参数如波特率、数据位、停止位、奇偶校验必须与单片机编程中的通信参数一等。
组态王中设置完相应的读写变量后,会自动定时地发给计算机串行口不同格式的数据,在单片机中只需根据组态王中变量的设置来接收数据、处理数据、回传给计算机正确的应答信号可,分读、写两种处理情况。
由于串行通信过程中传送的是数据的ASCII码形式,因此单片机程序中要有相应的转换,转换程序见单片机发送接受程序cseg at4000hljmp bsendcseg at4023h;中断服务程序入口地址ljmp servercseg at4040hbsend:mov ie,#00h;禁止中断mov r2,#00hmov pcon,#00h;smod=0串行中断方式1传接数据,9600波特率mov scon,#70hmov tmod,#20h;定时器T1方式2mov th1,#0fdhmov tl1,#0fdhsetb tr1mov r0,#40h;接收组态王读写变量的数据区setb ea;开中断setb eslor:orl87h,#01h;等待串行口的中断信号ljmp bsendserver:clr ea;中断服务程序clr eslop:jnb ri,$clr rimov a,sbufmov@r0,ainc r0cjne a,#0dh,lop;以上是接收组态王传送的读写命令yingda:;进行应答mov r0,#40hmov r1,#60hmov a,@r0mov@r1,a;字头40Hinc r0inc r1mov a,@r0;设备地址(两个字节)mov@r1,ainc r0inc r1mov a,@r0mov@r1,ainc r0inc r1mov a,@r0;标志的第一个字节43hinc r0mov a,@r0;从标志的第二字节判断是读或写inc r0clr csubb a,#30hmov b,aclr csubb a,#0ahjc pan1mov a,bclr csubb a,#07hljmp panpan1:mov a,bpan:jb acc.0,writeljmp readwrite:mov r1,#63h;单片机将应答信号送入单片机的缓冲区中并且将接收的数据进行处理mov a,#23h;mov@r1,ainc r1mov a,#23hmov@r1,ainc r1mov r0,#61h;准备应答信号中的异或值并送到缓冲区mov a,@r0inc r0xrl a,@r0mov b,aswap aanl a,#0fhlcall zhuang;把一字节的异或值高四位转换成ASCII值mov@r1,ainc r1mov a,banl a,#0fhlcall zhuand;把一字节的异或值低四位转换成ASCII值bad30l:mov@r1,ainc r1mov a,#0dhmov@r1,ainc r1mov r0,#4ah;对单片机中缓冲区接收到数据进行处理mov a,@r0anl a,#0fhclr crl amov r2,acjne a,#02h,float;对数据进行的长度判断,byte:mov r0,#30hljmp floatlfloat:mov r0,#36hfloatl:mov r1,#4bhloopw:mov a,@r1mov@r0,ainc r0inc r1djnz r2,loopwnopmov r0,#60h;送应答信号给PC机串mov r1,#8dmov scon,#60hmov r1,#8dmov scon,#60hmov tmod,#20h;定时器1方式2mov th1,#0fdhmov tl1,#0fdhsetb tr1wat:mov a,@r0mov sbuf,ajnb ti,$clr tiinc r0djnz r1,watmov scon,#70hsetb easetb esretiread:mov a,@r0;读单片机中的数据地址inc r0mov a,@r0inc r0mov a,@r0inc r0mov a,@r0inc r0mov a,@r0;数据的字节数mov@r1,ainc r0inc r1mov a,@r0mov@r1,aanl a,#0fhrl amov r2,amov b,ainc r1cjne a,#02h,floatrbyter:mov r0,#30h;从相应的地址取出数据ljmp looprfloatr:mov r0,#36hloopr:mov a,@r0mov@r1,ainc r1inc r0djnz r2,looprmov r1,#61hmov a,badd a,#03hmov r2,a;求出相应的异或值送入缓冲区中mov a,@r1inc r1loopt:xrl a,@r1inc r1djnz r2,looptmov b,aswap aanl a,#0fhlcall zhuangmov@r1,ainc r1mov a,banl a,#0fhlcall zhuandmov@r1,ainc r1mov a,#0dhmov@r1,ainc r1mov a,64hanl a,#0fhrl aadd a,#08hmov r1,amov r0,#60h;将要读出的数据传送到PC中,要传的字节数mov scon,#60h;r1寄存器中mov tmod,#20h;定时器1,方式2mov th1,#0fdhmov tl1,#0fdhwat1:mov a,@r0mov sbuf,ajnb ti,$clr tiinc r0djnz r1,wat1mov scon,#70hsetb essetb earetizhuang:clr csubb a,#0ah;zbad30jc zbad30mov a,bswap aanl a,#0fhadd a,#37hljmp zbad1zbad30:mov a,bswap aanl a,#0fhadd a,#30hzbad1:retzhuand:clr csubb a,#0ah;dbad30jc dbad30mov a,banl a,#0fhadd a,#37hljmp dbad1dbad30:mov a,banl a,#0fhadd a,#30hdbad1:retend参考文献单片机应用技术讲座16第十三讲串行通信软硬件的实现方法电子世界2003年4期组态王6.5与单片机的通信方法尉俊兰丁振荣这件大学仪器科学系利用组态软件的单片机ASCII马协议进行多机串行口通信刘娜仪器仪表标准化及计量工控组态软件的发展与开发设计易江义,周彩霞洛阳工业高等专科学校学报2003年3月国内组态软件的现状与未来林维汉高春光张海涛电气时代2002年第6期P9工控组态软件的可视化张杰关永孙继平中国图像图形学报2002年2月。