单片机温湿度通信hmi显示温湿度

CBA8000温湿度控制器(触摸屏、intel远程测量、控制、记录) -- 温湿度专辑 -- 工控网博客
http://blog.gkong.com/kmaway.ashx
1.本控制器广泛用于可程式高低温试验箱、恒温恒湿试验箱、精密空调控制、大棚气候室(触摸屏、intel远程测量、控制、无纸记录) 本控制器由触摸屏、PLC、AD控制模块组成
本控制器触摸屏外观图如下(图7.1)
本控制器PLC外观图如下(图7.2)
本控制器AD控制模块外观图如下(图7.3),与PLC等高等宽,颜色外观感觉都相同,只是长度不同。可以并排安装在一起。
2. intel网络控制功能对于用户:只要一条网线把控制器连接到路由器,您就可以在世界的任何能上网的地方监视、控制您的设备,包括控制设备的开、关机,运行状态,是否故障等。好像现场操作一样。对于设备生产厂家:可以查看报警记录、更改设定参数,实现大部分的远程维护功能。注:进入intel网络控制功能,需要在PC端的软件上填写用户的IP地址和用户在触摸屏里设定的登陆口令,如果没有此两项,即使设备生产厂家也无法登陆,保证了设备的安全。 &
&& 控制器带有2个USB口,可插入USB鼠标操作设备、USB打印机(需要定制)、U盘(支持2G)。
通过PC机专用软件编制试验程序并保存到优盘,再从优盘将试验程序调出并存入控制器中;也可将控制器内的程序转存到优盘,再存入PC机进行分析和管理;可将存贮在控制器内记录的试验曲线数据转存到优盘上。通过PC机专用软件直接显示试验数据或将记录数据转换为可由Microsoft Office读取的Excel数据文件并打印出来。控制器记录的试验曲线数据:2路温度---设定温度和实测温度:2路湿度---设定湿度和实测湿度;记录时刻的日期、时间。(实际上是实现了无纸记录仪的功能)
4. 看门狗功能
&& 当未达到设备生产厂家设定的时间,设备正常运行。
&& 当达到设备生产厂家设定的时间后,再次开机时,需要提供生产厂家设定的密码才能开机,这种密码又分临时密码,永久性密码。临时密码仅当天有效。此功能对于设备生产厂家来说,可以防止客户恶意欠款。
&& 例如:当设备被锁定后,往往会碰这种情况,客户对生产厂家说:设备我急用,你先给我密码解锁,款项我正在办理,此时生产厂家可给客户一个临时密码,让设备先运行,待款项到达后,再给永久性密码。
5.& 模块化结构
&& 本控制器采用触摸屏+PLC模块+AD模块,可靠性提高,安装方便。
&& 7.0英寸TFT彩色厚度仅42.5mm,可以装在试验箱的大门里,方便设备生产厂家多样化设计箱体。
&& 触摸屏尺寸有7.0英寸,10.0英寸,12.0英寸,15.0英寸等多种可供选择(大型非标产品装一个大一点的控制器看起来更协调)
&& PLC的IO点数有8进8出,16进16出,24进24出,三种可供选择
&& AD模块采用16位AD转化,光耦隔离,内置非线性温度、阻值表,采用4线PT100,测温更准确。采用双CPU结构,控制更及时,输出为脉冲信号,外面需要接固态继电器
6.故障报警及原因.处理提示记录功能:全中文详细提示故障产生的原因,及解决的办法,故障记录功能能记录最近50个故障所产生的日期,时间,故障现象。
7.设备生产厂家可以在控制器里面输入电子铭牌,可以记事本。
8.内部含有曲线补偿,偏差补偿,强制输出等。
9.内部含有日常保养、注意事项、输出监视、输入监视等。
10.预约功能。
11.37个输出信号:
12.特殊功能可以定制。(例如可以双温度控制器、温度气压控制器等)
7.0英寸TFT彩色触摸屏
65536 color
先进的LED冷光源组。(与传统的冷阴极荧光灯相比,色域更广,饱和度更高,发热量低,寿命更长)
程序方式、定值方式。
中文菜单,触摸屏方式输入,也可以USB鼠标操作
40个程序,每个程序最大99步,可设9999个循环。
通过U盘可存储无限多个程序:在控制器插上U盘,可以把控制器上的程序复制到U盘,U盘上的程序可以复制到控制器上,像复制文件一样容易方便。
温度-99.99--200.00℃;湿度0.0--100.0%RH
显示分辨率
温度0.01℃; 湿度0.1%RH
温度:四线PT100, 湿度:四线PT100,(干湿球)
16位AD7705,
智能模糊PID (根据差值,差值的变化率自动更改P、I、D的数值。
曲线、表格记录功能
采样周期分为10秒、30秒、120秒、600秒。自动存入U盘,可保存设备的设定温度、实测温度、设定湿度、实测湿度,及采样时刻的日期、时间;最大存储时间超过5年(以365天,24小时不停,采样周期10秒,插入2G的U盘计算)
记录方式两种:曲线(点击曲线,可显示该点的具体数据)
& & & & & && 表格(电子表格形式)
控制器带有2个USB口,可插入USB鼠标操作设备、USB打印机(需要定制)、U盘。
通过PC机专用软件编制试验程序并保存到优盘,再从优盘将试验程序调出并存入控制器中;也可将控制器内的程序转存到优盘,再存入PC机进行分析和管理,可将存贮在控制器内记录的试验曲线数据转存到优盘上。通过PC机专用软件直接显示试验数据或将记录数据转换为可由Microsoft Office读取的Excel数据文件并打印出来。控制器记录的试验曲线数据:2路温度---设定温度和实测温度:2路湿度一设定湿度和实测湿度;记录时刻的日期、时间。
累时器、时间修正、偏差调整、曲线补偿、设备保养、注意事项、输出监视、输入监视、强制输出、记事本、电子铭牌。
几种控制器对比
CBA8000控制器
爱斯佩克MPC3000
韩国三元TEMI880
INTEL网络或局域网控制
支持2G优盘、鼠标、打印机
支持128M优盘
需要另加模块
触摸屏40个,通过优盘无限制
触摸屏40个,通过优盘无限制
IO输入输出口
8进8出,16进16出,24进24出,三种供选择,PLC形式更可靠
24进24出单片机形式
8进10出,14进20出两种供选择,单片机形式
16位AD转换精确
专用AD模块板
16位AD转换精确
专用AD模块板
10位AD转换,再软件处理,精确度不高。无AD模块板
模拟量输出
曲线表格记录
数据可下载到U盘,记录周期4种,历史记录中有曲线,表格两种形式,单击曲线上的点,可显示具体数值,记录数据长达5年,更换U盘,记录数据长达n年,记录数据可下载到计算机
数据可下载到U盘,记录周期4种,历史记录中只有曲线,单击曲线上的点,不可显示具体数值,记录数据长达60天,更换U盘,记录数据长达n年,记录数据可下载到计算机
无U盘,记录周期2种,历史记录中只有曲线,单击曲线上的点,不可显示具体数值,记录数据只有96个小时。记录数据不能下载到计算机
看门狗功能
有:分永久性密码,临时密码(每天一个)。
有:分永久性密码,临时密码(每天一个)。
7寸、10寸、12寸、15寸多种,65536色彩,TFT。
65536色彩,TFT。
全中文提示,详细记录报警原因。内含五个自定义报警
全中文提示,详细记录报警原因。内含五个自定义报警
简单英文字母提示,无报警记录功能。
智能模糊PID
抗积分饱和PID
输入输出方式
输入:四线PT100
输出:固态继电器
输入:T型热电偶
输出:固态继电器
输入:多种
输出:多种
程序复制(包括复制到U盘,U盘复制到控制器),程序删除,程序编辑。程序段复制、删除、插入。
程序复制(包括复制到U盘,U盘复制到控制器),程序删除,程序编辑。程序段复制、删除、插入。
程序复制,程序删除,程序编辑。程序段复制、删除。
时间修正、偏差调整、曲线补偿、设备保养、注意事项、输出监视、输入监视、强制输出、记事本、电子铭牌。
时间修正、偏差调整、曲线补偿、设备保养、注意事项、输出监视、输入监视、强制输出、电子铭牌。
时间修正、偏差调整、曲线补偿、输出监视。
端口信号设置
共37种信号,例如TUP,ERR,IS1—IS12等,信号满足的条件可以设置,输出端口号可以设置。
专用,端口固定
共37种信号,例如TUP,ERR,IS1—IS8等,信号满足的条件可以设置,输出端口号可以设置。
公司简介:
广州赛贝自动化控制有限公司是专业从事温湿度检测控制的技术开发和产品研制,制造,销售及售后服务综合型企业。我们拥有一流的专业技术人才,严格的加工工艺,制定了严格的质量管理制度。
我们矢志不移地坚持:以质量求生存,以技术求发展。
公司的开发人员曾工作在爱斯佩克、信息产业部五所环境工程中心,对环境温湿度的检测控制有丰富的经验,并坚持不懈地与各研究所,配套厂家,国外本行业知名企业展开广泛的技术合作,最新技术及时运用到本公司的触摸屏温湿度系列控制器。触摸屏温湿度系列控制器已实现了INTEL远程监控、大容量U盘存储记录等行业的尖端功能,并采用模糊智能控制,融入最新能量调节理论,保证了触摸屏温湿度系列控制器精确度和稳定度,同时也使能耗大大降低。本公司对触摸屏温湿度系列控制器拥有完全自主知识产权,可为客户提供个性化设计,包括用户界面,公司LOGO,特殊功能,其他类似控制器。客户更满意是我们的最终目标。
本触摸屏温湿度系列控制器主要使用于环境试验设备,它是再综合ESPEk的MPC3000与TEMI880及OYO的基础上开发出来的,设备生产厂家接好连线后只需设定参数即可,无需自编PLC程序。它综合两家的优点,并在三家的肩膀上开发出远程INTEL监控,及大容量U盘技术(用于记录温湿度数据和编程)。特有看门狗功能(保护生产厂家利益)。并增加辅助功能如:累时器、时间修正、偏差调整、曲线补偿、设备保养、注意事项、输出监视、输入监视、强制输出、记事本、电子铭牌。本CBA8000温湿度控制器技术支持:邹工()。 & & & &以上为控制器的介绍,需要用户操作指南(用户手册)请留下您的邮箱。
你好,我想了解一下CBA8000的输出回路有几路?我现在需要的回路最少是三路。一个制冷。一个加湿机。一个除湿机。
回复邮箱:
& & & & & & & & & & & & & & && 谢谢查看: 3474|回复: 0
[原创]单片机与人机界面HMI通信组网实例分享,顶!!!
单片机与触摸屏通讯有两个方案:一是用modbus—rtu协议,二是自由通讯协议;本实例用广州市微嵌计算机科技有限公司的人机界面作为参考,因为公司提供一系列的技术支持和公布单片机源代码,开发工程方便有效。
方案比较:方案一& modbus—rtu协议:&&&& 优点:工业标准通讯协议,具有通用性,,传输数据量大&&&& 缺点:需要时间去了解协议的格式和以及按照规定编写通讯程序(我们提供MODBUS-RTU源代码,客户直接移植就可以,不必费心)方案二&& 自由协议:&&&& 优点:数据格式客户自己定义,灵活多变,定制性强,可以模拟任何已知报文的通讯协议&&&& 缺点:传输数据量不大,通用性不强,移植不方便客户可以根据以上两种通讯协议的优缺点来选择理想的方案;实现方法:首先下载公司的人机界面组态软件,下载地址是:
方案一:1. 工程属性选用MODBUS-RTU协议;2. 先了解MODBUS-RTU协议,基本的01 03 05 06 16 的功能码需要了解,其他可以不去深究;提供相关的资料3. 使用我们提供的MODBUS-RTU协议(C语言)开发源代码,把主要的01 03 05 06 16 函数移植到单片机通讯上,大大节省了开发时间;方案二:1. 工程属性选用FreeProtocol协议;2.
3. 打开控制令编辑器(设定—&宏指令—&宏指令编辑器)或者直接按F8;4. 新增宏指令,在宏指令里面使用到Output()、Input()、SetWordData()、GetWordData()这四个函数;注:可以参考附一5. Output()函数,把设定好的字符串发送到相应的串口输出;Input()函数,从设定好的串口读取需要的字符串;6. 采集显示:SetWordData()函数,把Input()函数接收回来的数据,发送给HIM用户自定义寄存器里,然后在显示控件里填上已经有数据的HIM寄存器,即可显示单片机采集上来的数据;7. 改写发送:在显示控件了把需要改写的数据绑定HIM寄存器,使用GetWordData()获得修改后的数据,通过output()发送把数据发送到单片机;附录:
Output();【描述】第一个参数channel表示通道,如果通道为com1,则channel=1;如果通道为com2,则channel=2,数据类型为int。第二个参数pString表示从通道输出的字符串的地址,数据类型为unsigned char *。第三个参数count表示字符串中的字符个数,数据类型为int。第四个参数result表示Output函数运行后返回的结果,如果result大于0,则表示读写有效,数据类型为int。注意:此函数只能用在freeprotocol(自由协议通道)中。【用法】Output(channel,pString,count,result);【举例】char srt[9];Output(1,str[0],9,result);Input();【描述】第一个参数channel表示通道,如果通道为com1,则channel=1;如果通道为com2,则channel=2,数据类型为int。第二个参数pString表示写入通道的字符串的地址,数据类型为unsigned char *。第三个参数count表示字符串中的字符个数,数据类型为int。第四个参数result表示Output函数运行后返回的结果,如果result大于0,则表示读写有效,数据类型为int。注意:此函数只能用在freeprotocol(自由协议通道)中。【用法】Input(channel,pString,count,result);【举例】char srt[9];Input(1,str[0],9,result);技术支持:企业QQ:&& 电话:020-
[此贴子已经被作者于 15:37:12编辑过]
Powered by单片机&触摸屏&MODBUS&示例
在有些工业场合需要用到触摸屏作为人机界面,来控制一台设备或者机器,那么触摸屏与控制系统之间的
通信还是值得学习和应用的。
本文将使用信捷触摸屏和avr单片机进行通信,达到的目的为触摸屏控制单片机输入输出;
一、触摸屏简介:
目前工业触摸屏已经是一个比较成熟的产品了,基本与市面上常用的PLC、变频器等器件之间有专用
的接口,直接设置PLC相应地址就行,就能控制相应输入输出点,PLC内部本身有厂家做好的通信接口,用
户无需编写繁琐的通信协议,所以应用简单方便,能快速的开发产品。
但是在有些场合并不去用PLC等成本较高的器件,可能只用一个单片机来控制一台机器,那么触摸屏
和单片机之间的通信就需要开发者自己去编写通信协议。
二、通信协议
以无锡信捷屏幕为例,厂家提供了两种与单片机的通信方法:自由协议、MODBUS
自由协议:在信捷说明书上有说:,可见自由格式是将单片机作为主机,触摸屏作为从机,主机询问后从机才能应答,如果需要通过触摸屏来控制单片机的话,单片机的程序里需要循环询问触摸屏,来获取用户的操作信息。
MODBUS:modbus的书籍很多,有完整的理论体系,这里就不详细赘述了,简单点讲就是说把触摸屏作为主机,单片机或者其他外设作为从机,modbus协议在触摸屏内部被写好了,开发者需要在单片机里把对应的协议写好,就可以进行通信,比如操作者在屏幕上按下按钮,触摸屏就会自动从串口发出一串数字,单片机端对这个数字串处理后就能知道是什么命令,是置位线圈还是询问获取线圈状态
在简单的场合,自由协议也是应该能满足应用了,但是有时候控制系统比较繁锁的时候自由协议就不一定能满足要求(参看说明书,地址数量有限制)
三、协议代码
1.CRC校验码TABLE
这是协议标准查询的TABLE
const uint8 auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
const uint8 auchCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
2.CRC16校验算法函数(MODBUS用的一般是CRC16校验)
复制来的,出处没记下来
*puchMsg:需要校验的数组,usDatalen:需要校验数组的长度,返回的是16位CRC
uint16 crc16(uint8 *puchMsg, uint16 usDataLen)
&uint8 uchCRCHi = 0xFF ;
&uint8 uchCRCLo = 0xFF ;
&uint32 uI
&while (usDataLen--)
&&uIndex = uchCRCHi ^ *puchMsg++
&&uchCRCHi = uchCRCLo ^
auchCRCHi[uIndex] ;
&&uchCRCLo = auchCRCLo[uIndex]
&return (uchCRCHi &&
8 | uchCRCLo) ;
}//uint16 crc16(uint8 *puchMsg, uint16 usDataLen)
3.串口通信
本文是以avr
mega128为例(什么单片机都一样),直接复制代码即可。这里我采用串口接收中断来接收触摸屏的数据(尽量不影响单片机内其他程序的运行)
定义几个全局变量
byte rec_index=0;//接收到第几个
byte received=6;//1:已经接收到完整命令
byte modbus_sendbuf[200]={0};//发送BUF,长度随便定
byte usart_data[8]={0,0,0,0,0,0,0,0};&
//modbus通信用的数组,依次为:
//站号 功能码 地址高 地址低 数量高 数量低 校验低 校验高
modbus_4x_data[1000]={0};//定义4x数组,对应触摸屏中设置的4x型的寄存器,数据长度任意,不限制
//这里定义串口1跟触摸屏通信,,不校验,接收中断。
void USART1_Init()
&UBRR1H=0;
&UBRR1L=51;&&&&&&//@8MHz,baud=9.6K
&UCSR1B=(1&&RXEN1)|(1&&TXEN1);&&//Enable
&UCSR1C=(1&&UCSZ11)|(1&&UCSZ10);&//Stop
1 bit,8 bits data
&UCSR1B|=(1&&RXCIE1);&&&&&&
//enable interrupt
//发送一个8Bit数字,0-0xff
void outchar1(byte cha)
while ( !( UCSR1A &
(1&&UDRE1)) );
&UCSR1A=(1&&UDRE1);
&UDR1=(byte)
&Delay_ms(3);
//uart1接收中断,THWIN
//假设设置单片机站号为1,
//中断函数中仅对数据进行判断与存储,相应的执行动作到主程序中执行,以节省时间
void Usart1_Interrupt(void)
&tem=UDR1;&&
//接收当前数据
&if((rec_index==0)&&(tem!=0x01))&
//如果第一个数据不是1号设备,则重新计
rec_index=0;
usart_data[rec_index]=
rec_index++;//准备下一个
&if(rec_index==8)//接收满了
rec_index=0;
received=1;
//校验MODBUS上接收到的数据,正确的话返回0,byte=unsigned char, word=unsigned
byte Modbus_Verify(void)
&word crc=0;&&
//将接收到的数组进行CRC校验
crc_get=(((word)usart_data[6])&&8)+usart_data[7];&&
//主机端发出的校验值
&crc=crc16(usart_data, 6);//计算CRC16
&if(crc_get==crc)& //两者相等
&return 0;
&return 1;&
//回复主机的询问(功能吗03的命令的回复),add0:高位地址,byte add1:低位地址,
num0:需要发送的数量的高位,num1:需要发送的数量的低位
void Modbus_Send_4x(byte add0, byte add1, byte num0, byte
&word crc=0;
&word add=Byte2_Word(add0,add1); //变成16位数字
&modbus_sendbuf[0]=0x01;
&modbus_sendbuf[1]=0x03;
&if(!num0)&&&
//if num&255
modbus_sendbuf[2]=num1;
&&for(i=0;i&num1;i++)
&&&modbus_sendbuf[4+2*i]=modbus_4x_data[add+i]&0x00//地位后发
&&&modbus_sendbuf[3+2*i]=(modbus_4x_data[add+i]&0xff00)&&8;//高位先发
&&for(i=0;i&(3+2*num1);i++)
&&outchar1(modbus_sendbuf[i]);
&crc=crc16(modbus_sendbuf, (3+2*num1));
&outchar1((crc&0xff00)&&8);
&outchar1(crc&0x00ff);
//接受主机的设置(功能码06的命令)
void Get_Modbus_Set(void)
&word data=0;
&index=Byte2_Word(usart_data[2],usart_data[3]);
&data=Byte2_Word(usart_data[4],usart_data[5]);
&modbus_4x_data[index]=//接受主机设置,当然可以自由定义设置的意义
&for(i=0;i&8;i++)&&
//回复主机,原样回复即可
outchar1(usart_data[i]);
void Modbus_Excute(void)
if(received)&& //如果主机有命令发过来
for(i=0;i&8;i++)
&&outchar0(usart_data[i]);
if(!Modbus_Verify())//校验正确
&&switch (usart_data[1])
case 0x03://读取4x寄存器
Modbus_Send_4x(usart_data[2],usart_data[3],usart_data[4],usart_data[5]);
case 0x06: //设置寄存器
Get_Modbus_Set();//接收主机设置
//继续添加其他modbus命令的执行方法……
&&received=0;//接受成功标志位归零
//这里说一下word
modbus_4x_data[1000]这个数组,这个相当于触摸屏里定义的4x断电保持寄存器,我们用单片机的时候定义这样一个数组来表示,Modbus_Excute()会自动回复主机想要知道的寄存器数值,然后实际怎么处理用户需要自己编写。
//以上相当于是整个modbus的驱动和基本的执行函数,实际使用的时候,在MAIN()里面循环执行Modbus_Excute()来刷新命令和数据,接受主机设置后(比如设置了word
modbus_4x_data[4].12第12位为1,),可以判断此变量来得知主机想要干什么。比如说该数组里此数字的此位表示某个阀门,那么执行word
modbus_4x_data[4].2时候打开阀门,然后执行相应动作。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何通过单片机直接连接触摸屏_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何通过单片机直接连接触摸屏
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 单片机与显示屏通信 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信