单片机与触摸屏通信 - ModbusRTU 资料说明

合集下载

MODBUS通讯详细说明

MODBUS通讯详细说明

MODBUS通讯教程本篇主要讲解如何使用SKWorkshop(一下简称SK)实现MODBUS通讯。

首先介绍一下SK支持的MODBUS类型,在通讯口属性中连接服务选择modbus,如图1-1:图1-1Modbus RTU Master: 触摸屏做modbus主站,设备做从站(即常规modbus);Modbus RTU Slave: 触摸屏做modbus从站,设备做modbus主站;Modbus ASCII Master: 触摸屏做modbus主站,设备做从站(ASCII通讯);Modbus ASCII Slave: 触摸屏做modbus从站,设备做主站(ASCII通讯);Modbus RTU Special: 触摸屏做modbus主站,设备做从站(写数据使用的功能码是0x10,不管写入数据长短);Modbus ASCII Special: 触摸屏做modbus主站,设备做从站(写数据使用的功能码是0x10,不管写入数据长短,ASCII通讯);Modbus Master TCP/IP: 触摸屏做modbus主站,设备做从站(TCP/IP通讯);Modbus Slave TCP/IP: 触摸屏做modbus从站,设备做主站(TCP/IP通讯)。

选择“参数”选项如图1-2图1-2通讯参数:设置串口参数(波特率、数据位、校验、停止位);触摸屏站号:做从站时设置触摸屏地址(主站时没有用);PLC站号:设置下位设备的地址;地址模式:标准模式(一主一从模式),扩展模式(一主多从模式);PLC连续地址间隔:一次最多读取的连续地址个数(在与单片机设备或者变频器设备通讯时需要注意,如果设备的寄存器地址不是连续的或者寄存器地址不是32的整数倍,比如开发的单片机地址只有20个时,此处可以改成1)。

可操作寄存器及其地址范围寄存器名称 地址格式 输入范围 备注 支持功能码 0x ddddd 0~65535 位:输出线圈 01、051x ddddd 0~65536 位:输入线圈,只读 023x_Bit ddddd.DD 0.00~65535.15 位:16位输入寄存器的位,只读 044x_Bit ddddd.DD 0.00~65535.15 位:16位输出寄存器的位 03、06、103x ddddd 0~65535 字:16位输入寄存器,只读 034x ddddd 0~65535 字:16位输出寄存器 03、06、103x_D ddddd 0~65535 双字:输入寄存器,与3x双字高03、06、10低16位颠倒,只读4x_D ddddd 0~65535 双字:输出寄存器,与4x双字高03、06、10低16位颠倒MODBUS通讯样例:1、触摸屏做主站与多个MODBUS设备同时通讯:新建工程,命名为:MODBUS一主多从样例,设备服务选择MODBUS Modbus RTU Master,参数选项地址模式改为扩展模式,其他参数采用默认。

modbus rtu单片机范例

modbus rtu单片机范例

modbus rtu单片机范例1.引言1.1 概述概述部分:Modbus RTU是一种常用的串行通信协议,广泛应用于工业自动化领域。

本文将介绍Modbus RTU协议的基本原理和特点,并结合单片机的应用场景,探讨如何在单片机中实现基于Modbus RTU的通信。

在工业自动化领域,通信是各种设备之间进行数据交换和控制的重要手段。

Modbus RTU作为一种开放、简单、可靠的通信协议,被广泛应用于监控、控制和数据采集等应用场景。

其优势在于其使用简单、可扩展性好以及兼容性强。

文章的结构将从Modbus RTU的基本原理和数据帧结构入手,介绍其通信流程和通信方式。

并通过具体的单片机应用场景,展示如何利用Modbus RTU进行设备之间的数据交互和控制。

通过这些例子,读者将深入理解Modbus RTU的应用原理和具体操作。

本文旨在为读者提供一个Modbus RTU在单片机应用中的范例,并通过实际案例来展示如何利用该协议进行数据通信。

同时,本文也将探讨当前Modbus RTU在单片机应用中存在的问题和挑战,并提供一些未来研究方向的建议。

通过阅读本文,读者将能够全面了解Modbus RTU协议的基本原理和应用场景,掌握在单片机中实现Modbus RTU通信的方法,以及面临的挑战和未来的发展方向。

希望本文能对读者在工业自动化领域的学习和实践有所启发,为他们的项目开发提供一定的指导和帮助。

1.2 文章结构文章结构是指组织和安排文章内容的方式和顺序。

在本文中,文章结构按照以下方式组织:引言部分包括概述、文章结构和目的;正文部分包括Modbus RTU介绍和单片机应用场景;结论部分包括总结和下一步研究方向。

引言部分将首先提供一个概述,介绍Modbus RTU单片机范例的背景和重要性。

然后,进一步阐述文章的结构,显示读者整篇文章将如何组织和涵盖哪些方面。

最后,明确文章的目的,即讨论和探索有关Modbus RTU单片机范例的相关内容。

基于MODBUS协议的单片机与触摸屏通信_金杰

基于MODBUS协议的单片机与触摸屏通信_金杰

在工业控制中经常需要观察系统的运行状态或者修改运行参数。

触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。

单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。

触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。

Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络(例如以太网)和其它设备之间进行通信的协议。

本文以AT89S51单片机和威纶通科技有限公司的MT6070iH型触摸屏为例,介绍其通信程序的开发过程。

一、系统结构实现触摸屏与单片机的通讯,主要是解决通讯协议的问题。

本文使用开放的Modbus通讯协议,以触摸屏作主机(M aster),单片机作从机(Slaver)。

MT6070iH触摸屏本身支持Modbus通讯协议,只要单片机按照Modbus协议进行收发数据,就可以进行通信了。

触摸屏与单片机之间采用RS-485标准接口直接连接,传输速率设置为9600bps。

图1为该系统的电路图。

图1系统电路图将AT89S51单片机的TXD、RXD口设置为异步串行通信模式,经过MAX485芯片将TTL电平转换为RS485电平,再与MT6070iH触摸屏RS-4852W接口相连,即完成了硬件连接,其中P3.2作为收发控制信号。

MT6070iH触摸屏RS-4852W接口的管脚2为485A,管脚1为485B,管脚5为公共地。

二、如何将MT6070iH设定成Modbus装置图2将MT6070iH设定成M odbus装置将MT6070iH触摸屏设定成Modbus装置(以称为M odbus Server),单片机或其它装置只需使用M odbus协议,透过RS232/485接口,即可读写M T6070iH上的数据。

将MT6070iH设定成Modbus装置的方法如下:首先需在MT6070iH使用的MTP程序的设备清单(device table)中增加一个新的设备,此时PLC种类需选择“MODBUS Server”,PLC接口可以选择RS232、RS4852W、RS4854W或Ethernet,这里选择RS4852W。

触摸屏Modbus-RTU通讯协议(2011-8-8更新)

触摸屏Modbus-RTU通讯协议(2011-8-8更新)

信捷触摸屏Modbus RTU功能码一、Modbus 协议简介Modbus 协议是应用于电子控制器上的一种通用语言。

通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。

它已经成为一通用工业标准。

有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。

它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。

它制定了消息域格局和内容的公共格式。

当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。

如果需要回应,控制器将生成反馈信息并用Modbus协议发出。

在其它网络上,包含了Modbus协议的消息被转换为在此网络上可使用的帧或包结构。

这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

二、在Modbus网络上传输标准的Modbus口是使用RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。

控制器能直接或经由Modem组网。

控制器通信使用主—从技术,即某一设备(主设备)能初始化传输(查询),其它设备(从设备)根据主设备查询提供的数据做出相应反应。

典型的主设备:主机和可编程仪表。

典型的从设备:可编程控制器,本章以信捷PLC作为从设备进行Modbus-RTU功能码测试。

主设备可单独和从设备通信,也能以广播方式和所有从设备通信。

如果单独通信,从设备返回一个消息作为回应;如果是以广播方式查询的,则不作任何回应。

Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、错误检测域。

从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和错误检测域。

如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将建立错误消息并把它作为回应发送出去。

ATMEGA16单片机与MCGS通信(MODBUS-RTU协议)

ATMEGA16单片机与MCGS通信(MODBUS-RTU协议)

#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include "ds18b20.h"#define uchar unsigned char#define uint unsigned intvolatile uchar reve_data,renum=0,mend=0,nend=0,a1=1,a2=1,a3=1,a4=1,a5=1,a6=1,a7=1,a8=1,a9=1; void INT_Init();#define BAUD 38400 //波特率38.4kbp/svolatile uchar rx[7]={0x01,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00};uchar tx[30];volatile uchar crcl=0x00,crch=0x00;uchar led=0xff;//发送字符void send_char( uchar data ){/* 等待发送缓冲器为空 */while ( !( UCSRA & (1<<UDRE)) );/* 将数据放入缓冲器,发送数据 */UDR = data;}void inti_port(){DDRB=0xff;PORTB=0xff;DDRC=0xff;PORTC=0x00;}//CRC效验,将结果存储到CRCok变量中。

checkcrc(uchar *q,uchar nend){uint wcrc=0xffff;int j=0,i=0;for(i=0;i<nend;i++){wcrc ^= *q++;for(j=0;j<8;j++){if(wcrc&1){wcrc>>=1;wcrc ^= 0xa001;}else{wcrc>>=1;}}}crcl = wcrc;crch = wcrc>>8;}int main(void){inti_uart();inti_port();INT_Init();sei();while(1){gettemp();_delay_ms(1050);}}SIGNAL(SIG_UART_RECV){rx[renum++]=UDR;if(renum==8){renum=0;switch(rx[1]){case 0x01:if(!rx[3]){tx[0]=rx[0];//leD灯tx[1]=rx[1];tx[2]=0x01;DDRB=0X00;tx[3]=PORTB;DDRB=0XFF;checkcrc(tx,4);tx[4]=crcl;tx[5]=crch;send_string(tx,6);break;}else{tx[0]=rx[0];//继电器和蜂鸣器tx[1]=rx[1];tx[2]=0x01;DDRC=0X00;tx[3]=PORTC;tx[3]>>=7;DDRC=0XFF;checkcrc(tx,4);tx[4]=crcl;tx[5]=crch;send_string(tx,6);break;}case 0x04:tx[0]=rx[0];tx[1]=rx[1];tx[2]=rx[5]<<1;tx[3]=0x00;tx[4]=teml;tx[5]=0x00;tx[6]=temh;checkcrc(tx,nend=tx[2]+3);tx[tx[2]+3]=crcl;tx[tx[2]+4]=crch;send_string(tx,mend=tx[2]+5);break;case 0x05:DDRB=0XFF;switch(rx[3]){case 0x00:if(!rx[4])PORTB &= ~(1<<PB0);elsePORTB |= (1<<PB0);break;case 0x01:if(!rx[4])PORTB &= ~(1<<PB1);elsePORTB |= (1<<PB1);break;case 0x02:if(!rx[4])PORTB &= ~(1<<PB2);elsePORTB |= (1<<PB2);break;case 0x03:if(!rx[4])PORTB &= ~(1<<PB3);elsePORTB |= (1<<PB3);break;case 0x04:if(!rx[4])PORTB &= ~(1<<PB4);elsePORTB |= (1<<PB4);break;case 0x05:if(!rx[4])PORTB &= ~(1<<PB5);elsePORTB |= (1<<PB5);break;case 0x06:if(!rx[4])PORTB &= ~(1<<PB6);elsePORTB |= (1<<PB6);break;case 0x07:if(!rx[4])PORTB &= ~(1<<PB7);elsePORTB |= (1<<PB7);break;case 0x08:if(rx[4])PORTC |= (1<<PC7);elsePORTC &= ~(1<<PC7);break;}send_string(rx,8);break;default : break;}}}//*****************************红外线接收**********************************************////外部中断初始化void INT_Init(void){MCUCR |= _BV(ISC01); //选择外部中断0,下降沿触发中断MCUCR &= ~_BV(ISC00); //10:INT0的下降沿产生异步中断请求GICR |= (1 << INT0); //使能外部中断请求0DDRD &= ~_BV(PD2); //设置为输入,PORTD |= _BV(PD2); //使能上拉电阻}SIGNAL(SIG_INTERRUPT0){cli();uchar i,j,k = 0,addr[4] = {0};renum=0;GICR &= ~(1 << INT0); //禁止外部中断INT0 关闭外部中断,开始接受数据 for(i = 0;i < 14;i++){_delay_us(400);if(PIND & (1 << PD2)) //9MS内有高电平,则判断为干扰,退出处理程序 {GICR |= (1 << INT0); //使能外部中断INT0return;}}while(!(PIND & (1 << PD2))); //等待9ms低电平过去for(i = 0;i < 4;i++) //{for(j = 0;j < 8;j++)//{while(PIND & (1 << PD2)); //等待4.5ms高电平过去while(!(PIND & (1 << PD2))); //等待变高电平while(PIND & (1 << PD2))//计算高电平时间{_delay_us(100);k++;if(k >= 30) //高电平时间过长,则退出处理程序{GICR |= (1 << INT0); //使能外部中断INT0return; //}}addr[i] = addr[i] >> 1; //接受一位数据if(k >= 8){addr[i] = addr[i] | 0x80; //高电平时间大于0.56,则为数据1 }k = 0; //计时清零}}switch(addr[3]){DDRB=0XFF;case 0x07: if(a1){PORTB &= ~(1<<PB0);a1=0;}else{PORTB |= (1<<PB0);a1=1;}break;//1case 0x0b: if(a2){PORTB &= ~(1<<PB1);a2=0;}else{PORTB |= (1<<PB1);a2=1;}break;//2case 0x0f: if(a3){PORTB &= ~(1<<PB2);a3=0;}else{PORTB |= (1<<PB2);a3=1;}break;//3case 0x13: if(a4){PORTB &= ~(1<<PB3);a4=0;}else{PORTB |= (1<<PB3);a4=1;}break;//4case 0x17: if(a5){PORTB &= ~(1<<PB4);a5=0;}else{PORTB |= (1<<PB4);a5=1;}break;//5case 0x1b: if(a6){PORTB &= ~(1<<PB5);a6=0;}else{PORTB |= (1<<PB5);a6=1;}break;//6case 0x1f: if(a7){PORTB &= ~(1<<PB6);a7=0;}else{PORTB |= (1<<PB6);a7=1;}break;//7case 0x23: if(a8){PORTB &= ~(1<<PB7);a8=0;}else{PORTB |= (1<<PB7);a8=1;}break;//8case 0x03: if(a9)//蜂鸣器和继电器{PORTC |= (1<<PC7);a9=0;}else{PORTC &= ~(1<<PC7);a9=1;}break;//8case 0x27: PORTB=0X00;break;//9case 0x2b: PORTB=0XFF;break;//空格*/ default : break;}GICR |= (1 << INT0); //使能外部中断INT0sei();}#ifndef __ds18b20__H#define __ds18b20__H#include <avr/io.h>#include <util/delay.h>#include <avr/interrupt.h>#define uchar unsigned char#define uint unsigned int#define CLR_DIR_1WIRE DDRC &= ~(1<<PC6)//不再变化#define SET_DIR_1WIRE DDRC |= (1<<PC6) //IO改为输入口,高阻态,外部上拉电阻拉高#define SET_OP_1WIRE PORTC|= (1<<PC6) //改为输出口,输出低电平#define CLR_OP_1WIRE PORTC &=~(1<<PC6)#define CHECK_IP_1WIRE ( PINC & 0x40)void init_1820(void);void write_1820(unsigned char x);unsigned char read_1820(void);void gettemp(void);volatile uint Temperature;volatile unsigned char temh,teml;volatile uchar Num[4];void init_1820(void){SET_DIR_1WIRE; //设置PA0 为输出 SET_OP_1WIRE; //输出1CLR_OP_1WIRE; //输出0_delay_us(480); //480us以上SET_OP_1WIRE; //输出1CLR_DIR_1WIRE; //设置PA0 为输入 _delay_us(20); //15~60uswhile(CHECK_IP_1WIRE);SET_DIR_1WIRE;SET_OP_1WIRE;_delay_us(140); //60~240ussei();}void write_1820(unsigned char x){unsigned char m;for(m=0;m<8;m++){CLR_OP_1WIRE;if(x&(1<<m)) //写数据了,先写低位的! SET_OP_1WIRE;else{CLR_OP_1WIRE;}_delay_us(40); //15~60usSET_OP_1WIRE;}SET_OP_1WIRE;}unsigned char read_1820(void){unsigned char temp,k,n;temp=0;for(n=0;n<8;n++){CLR_OP_1WIRE;SET_OP_1WIRE;CLR_DIR_1WIRE;k=(CHECK_IP_1WIRE); //读数据,从低位开始 if(k)temp|=(1<<n);elsetemp&=~(1<<n);_delay_us(50); //60~120usSET_DIR_1WIRE;}return (temp);}void gettemp(void) //读取温度值{cli();init_1820(); //复位18b20write_1820(0xcc); // 发出转换命令write_1820(0x44);//_delay_ms(10); //不延时也好使,不知道怎么回事! init_1820();write_1820(0xcc); //发出读命令write_1820(0xbe);teml=read_1820(); //读数据temh=read_1820();sei();}#endif。

Modbus-RTU通信协议在计算机和单片机通信中的应用

Modbus-RTU通信协议在计算机和单片机通信中的应用

Modbus-RTU通信协议在计算机和单片机通信中的应用摘要:Modbus协议是应用与电子控制器上的一种通讯约规。

通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。

它已经成为主流的工业标准之一。

他为符合Modbus协议的不同厂商生产的控制设备可以连成工业网络,进行集中监控。

本文在介绍MODBUS的基础上,讨论基于Modbus-RTU通信协议实现STC12C5616AD 单片机与计算机通信,以STC12C5616AD为单片机制作的万年历与计算机通信为例以此实现研究Modbus-RTU通信协议在计算机和单片机中的应用。

Abstract:Modbus protocol is used and electronic controller is a kind of communication about rules. Through this agreement between, controller, controller through network (such as Ethernet) and other equipment can be had between communication. It has become the mainstream of the industrial standard one. He Modbus agreement for with the different manufacturer of industrial control equipment can connect, centralized monitoring network.Based on the introduction of MODBUS, on the basis of the discussion MODBUS communication protocol realized based on STC12C5616AD microcontroller and computer communication, to STC12C5616AD for single-chip computer communication and making the calendar for example therefore realize research MODBUS - RTU communication protocol in computer and MCU application.关键词:Modbus、Modbus-Rut、单片机、计算机Keywords: Modbus, Modbus - Rut , single-chip microcomputer, computer目录1 绪论 (1)1.1开发设计指导思想 (1)2M DUBUS-RTU协议简介 (1)3 上位通信软件设计方案 (8)3.1初始化程序设计 (8)3.2命令字发送 (8)3.3上位机接收数据和处理 (9)3.4CRC校验的实现方法 (9)4下位机工作系统设计简介 (10)毕业设计总结 (11)参考文献 (11)1 绪论工业控制已从单机控制走向集中监控、集散控制,如今已进入网络集约制造时代。

单片机的modbus RTU的通俗讲解

单片机的modbus RTU的通俗讲解

自己对单片机的modbus RTU的详细解释Modbus一个工业上常用的通讯协议、一种通讯约定。

Modbus协议包括RTU、ASCII、TCP。

其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现。

虽然RTU比较简单,但是看协议资料、手册说得太专业了,起初很多内容都很难理解。

所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号。

现在就来定义一个新的最简单协议。

例如,协议:“A”--“LED灭”“B”--“报警”“C”--“LED亮”单片机接收到“A”控制一个LED灭,单片机接收到“B”控制报警,单片机接收到“A”控制一个LED亮。

那么当收到对应的信息就执行相应的动作,这就是协议,很简单吧。

先来简单分析一条MODBUS-RTU报文,例如:01060001001798040106000100179804从机地址功能号数据地址数据CRC校验这一串数据的意思是:把数据0x0017(十进制23)写入1号从机地址0x0001数据地址。

先弄明白下面的东西。

1、报文一个报文就是一帧数据,一个数据帧就一个报文:指的是一串完整的指令数据,就像上面的一串数据。

2、CRC校验意义:例如上面的9804是它前面的数据(010*********)通过一算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。

(累加和:就是010*********加起来的值,然后它的算法就是加法)。

作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。

比如主机发出0106000100179804,那么从机接收到后要根据010*********再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(9804主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。

3、功能号意义:modbus定义。

见附录1。

作用:指示具体的操作。

MODBUS-RTU一、一个报文分析先声明下我们的目的,我们是要两个设备通讯,用的是MODBUS协议。

台达触摸屏与单片机通讯说明

台达触摸屏与单片机通讯说明

台达触摸屏与单片机通讯说明1、新建项目,选择您的触摸屏型号,点下一步;
2、通讯设定:最左边的COW是根据您的具体接线选择而勾选的;在控制器下拉框中选择MODBU前片机中需写标准的MODBUS议),按照您的单片机程序进行选择,不论是ASCII或者RTU需将触摸屏选择MASTER主)。

选择好此栏后,下面的“一般”对具体的通讯参数进行设备,如站号,通讯方式(232、485),停止位、波特率等,这些选择需与单片机中的程序一致才能通讯上。

选择好后点完成,就可以编写人机画面了。

3、接线
232:触摸屏端9针母头:2(RX)、3(TX)、5(GND)
485:触摸屏端9针母头:1(D+)、6(D-)。

MODBUS RTU 中文使用说明书

MODBUS RTU 中文使用说明书

7 Modbus RTU的冗余型 ·····························································································15
8 连接状态和故障信号··································································································16
3 技术数据及功能···········································································································7
3.1 带Modbus RTU总线接口的SIPOS 5 Flash电动执行机构··························································7 3.2 带Modbus 总线接口的SIPOS 5 Flash电动执行机构 – 基本功能···············································8 3.3 带Modbus总线接口的SIPOS 5 Flash电动执行机构 – 附加的功能 ··········································10 3.4 电气连接(铜缆或光纤) ········································································································11
4 设置Modbus RTU的通讯参数···················································································13

Modbus RTU相关常识和通信示例

Modbus RTU相关常识和通信示例

Modbus RTU –基本功能1 关于ModBusModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。

其系统结构既包括硬件、亦包括软件。

它可应用于各种数据采集和过程监控。

1.1 报文结构以串行数据传输为基础,通过一位接着一位进行传送。

1.2协议数据单元(PDU)1.2.1 Modbus PDU(协议数据单元)由功能码和实际数据两部分组成。

1.2.2 Modbus 串行通讯的消息帧站号(站地址)站号字段为1字节长,可能选择0~247站点。

选择0 地址表示选择所有的子机站,代表广播消息的意思。

FC(RTU功能代码)FC字段为1字节长,用以下所示的0~255的值进行定义。

带有网格部分表示使用的FC。

请不要使用未使用的FC。

否则会成为异常应答。

常用ModBus的功能码FC定义如下:01 READ COIL STATUS 01 读取线圈状态02 READ INPUT STATUS 02 读取离散量输入。

03 READ HOLDING REGISTER 03 读取保持寄存器。

04 READ INPUT REGISTER 04 读取输入寄存器。

05 WRITE SINGLE COIL 05 强置单线圈。

06 WRITE SINGLE REGISTER 06 预置单寄存器15 WRITE MULTIPLE COIL 07 15 强置多线圈。

16 WRITE MULTIPLE REGISTER 16 预置多寄存器数据区数据字段包含所有的信息(功能代码(地址)、字节计数、数据数、数据等)。

有关各消息类型(广播、查询、正常应答、异常应答) 的信息字段的详细情况;CRC校验CRC-16 检查方式的2字节长数据。

由于信息字段的长度为可变,由FC和字节计数数据计算出在CRC-16代码的计算中所必要的帧长。

CRC-16计算的详情和算法请参照「CRC-16」。1.2.3 PDU消息类型–通讯过程一般工业设备中,消息类型有查询、正常应答、异常应答、广播4种。

广州微嵌触摸屏人机界面与单片机通讯方法

广州微嵌触摸屏人机界面与单片机通讯方法

单片机与触摸屏通讯单片机与触摸屏通讯有两个方案:一是用modbus—rtu协议,二是自由通讯协议;本实例采用广州市微嵌计算机科技有限公司的人机界面作为参考,因为公司提供一系列的技术支持和公布单片机源代码,开发工程方便有效。

公司网站:方案比较:方案一modbus—rtu协议:优点:工业标准通讯协议,具有通用性,,传输数据量大缺点:需要时间去了解协议的格式和以及按照规定编写通讯程序(我们提供MODBUS-RTU源代码,客户直接移植就可以,不必费心)方案二自由协议:优点:数据格式客户自己定义,灵活多变,定制性强,可以模拟任何已知报文的通讯协议缺点:传输数据量不大,通用性不强,移植不方便客户可以根据以上两种通讯协议的优缺点来选择理想的方案;实现方法:首先下载公司的人机界面组态软件,下载地址是:/new/league.asp?keyno=34组态软件WQTDesigner方案一:1.工程属性选用MODBUS-RTU协议;2.先了解MODBUS-RTU协议,基本的01 03 05 06 16 的功能码需要了解,其他可以不去深究;提供相关的资料3.使用我们提供的MODBUS-RTU协议(C语言)开发源代码,把主要的01 03 05 0616 函数移植到单片机通讯上,大大节省了开发时间;方案二: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。

Modbus协议下51系列单片机与eView触摸屏的通讯方法-图文

Modbus协议下51系列单片机与eView触摸屏的通讯方法-图文

Modbus协议下51系列单片机与eView触摸屏的通讯方法-图文以下是为大家整理的modbus协议下51系列单片机与eView触摸屏的通讯方法-图文的相关范文,本文关键词为modbus,协议,系列,单片机,eView,触摸屏,通讯,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。

modbus协议下51系列单片机与eView触摸屏的通讯方法(组图)modbus协议由于其具有开放性、透明性、本钱低、易于开发等特点,已成为当今产业领域通讯协议的首选。

本文介绍了一种基于modbus通讯协议的eView触摸屏与常用的51单片机的通讯方法。

该方法通过c51编程实现modbus通讯,在51系列单片机上具有通用性,有一定的鉴戒作用。

产业控制中经常需要观察系统的运行状态或者修改运行参数。

触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。

单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。

触摸屏与单片机通讯,需要根据触摸屏采用的通讯协议为单片机编写相应的通讯程序。

modbus协议是美国modicon公司推出的,一种有效支持控制器之间以及控制器经过网络(如以太网)与其他设备之间进行通讯的协议。

本文以sTc89c51单片机和人机电子有限公司的eView触摸屏为例,介绍其通讯程序的开发过程。

1系统结构实现触摸屏与单片机的通讯,主要是解决通讯协议的题目。

本文使用开放的modbus通讯协议,以触摸屏作主站,单片机作从站。

eView 触摸屏本身支持modbus通讯协议,假如单片机也支持modbus协议,就可以进行通讯了。

eview触摸屏支持Rs-232和Rs-485两种通讯接口。

在产业控制领域,由于Rs-485具有可靠性高、传输间隔远、抗干扰能力强等优点,所以在本系统中触摸屏与单片机通讯采用Rs-485连接,传输速率设置为9600kbps。

单片机与触摸屏基于MODBUS协议通信的应用

单片机与触摸屏基于MODBUS协议通信的应用

单片机与触摸屏基于MODBUS协议通信的应用作者:黄月明来源:《中国新技术新产品》2017年第07期摘要:本文以自动温控鼓风机为例,介绍了触摸屏与单片机控制系统组成人机交换界面。

重点讲述了基于MODBUS RTU协议的触摸屏与单片机的通信方法,并讲述应用程序设计方法,提供了通用的软件硬件设计方法。

目前该系统已通过实践证明可以可靠稳定地运行。

关键词:触摸屏;单片机控制系统;MODBUS协议中图分类号:TP393 文献标识码:A自动控制系统经常需要观察运行状态或输入输出相关的参数,触摸屏能直观生动地显示运行参数和状态,具有良好的人机交互性。

单片机广泛应用于工业控制中,与触摸屏配合使用可以构成良好的人机交互界面。

但现有工控触摸屏都只支持与PLC的接口通信,没有支持与单片机的接口通信的工控触摸屏,故给单片机和工控触摸屏组成控制系统带来了很大的障碍。

本文以自动温控鼓风机项目为例,以MODBUS协议为载体,搭建单片机与工控触摸屏通信的通用平台。

一、MODBUS通信协议介绍1. MODBUS协议简述Modbus协议是广泛应用于电子控制器上开放性通用语言。

MODBUS协议在一根通信线上使用主从应答式连接,在一根单独的通信线上信号沿着相反的两个方向传输。

首先,主计算机的信号寻址到一台唯一的终端设备,然后,终端设备发出的应答信号以相反的方向传输给主机。

MODBUS协议只允许在主机和终端设备之间通信,而不允许独立的终端设备之间的数据交换,这样终端设备不会在它们初始化时占据通信线路,而仅限于响应到达本机的查询信号。

2.查询查询消息中的功能代码告之被选中的从设备要执行何种功能。

例如功能代码03是要求从设备读保持寄存器并返回它们的内容。

数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量及错误检测。

3.回应如果从设备产生正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。

数据段包括了从设备收集的数据:如寄存器值或状态。

自己对单片机的modbusRTU的详细解释

自己对单片机的modbusRTU的详细解释

Modbus 一个工业上常用的通讯协议、一种通讯约定。

Modbus协议包括RTU、ASCII、TCP。

其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现。

虽然RTU比较简单,但是看协议资料、手册说得太专业了,起初很多内容都很难理解。

所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号。

现在就来定义一个新的最简单协议。

例如,协议:“A” --“LED灭”“B” --“报警”“C” --“LED亮”单片机接收到“A”控制一个LED灭,单片机接收到“B”控制报警,单片机接收到“A”控制一个LED亮。

那么当收到对应的信息就执行相应的动作,这就是协议,很简单吧。

先来简单分析一条MODBUS-RTU报文,例如:01 06 00 01 00 17 98 0401 06 00 01 00 17 98 04从机地址功能号数据地址数据CRC校验这一串数据的意思是:把数据0x0017(十进制23) 写入1号从机地址0x0001数据地址。

先弄明白下面的东西。

1、报文一个报文就是一帧数据,一个数据帧就一个报文:指的是一串完整的指令数据,就像上面的一串数据。

2、CRC校验意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)通过一算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。

(累加和:就是0加起来的值,然后它的算法就是加法)。

作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。

比如主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。

3、功能号意义:modbus 定义。

见附录1。

作用:指示具体的操作。

MODBUS-RTU一、一个报文分析先声明下我们的目的,我们是要两个设备通讯,用的是MODBUS协议。

STM32F103系列单片机与具备MODBUS_RTU通讯协议的设备通讯案例

STM32F103系列单片机与具备MODBUS_RTU通讯协议的设备通讯案例

STM32F103系列单片机与具备MODBUS_RTU通讯协议的设备通讯案例STM32F103系列单片机是一款高性能、低功耗的微控制器,广泛应用于工业自动化领域。

其中,MODBUS_RTU通讯协议是工业现场常用的一种通讯协议,用于实现设备之间的数据交换。

本文将介绍一种基于STM32F103系列单片机与具备MODBUS_RTU通讯协议的设备通讯的实例。

首先,我们需要了解MODBUS_RTU通讯协议的具体内容。

MODBUS_RTU 是一种串行通讯协议,采用二进制格式进行数据传输。

通讯协议中定义了各种功能码,用于实现不同的操作。

在通讯过程中,主机发送请求命令给从机,从机执行相应的操作并返回结果给主机。

接下来,我们以STM32F103系列单片机作为主机,与一个带有MODBUS_RTU通讯协议的温湿度传感器进行通讯为例。

首先,在STM32F103单片机上,我们需要配置串口通讯模块。

可以使用STM32库函数来简化配置过程。

首先,我们需要初始化串口通讯模块的引脚和参数,包括波特率、数据位、停止位等等。

然后,我们需要开启串口发送和接收中断,以便及时处理收到的数据。

在通讯过程中,STM32F103单片机作为主机,需要发送请求命令给温湿度传感器,并接收传感器返回的数据。

在发送请求命令时,需要构造MODBUS_RTU通讯协议的数据包,包括起始码、设备地址、功能码、数据等等。

在接收数据时,我们需要进行数据的解析和处理。

可以使用STM32库函数提供的串口中断处理函数来实现。

接下来,我们需要了解温湿度传感器的通讯协议。

通常情况下,温湿度传感器会提供详细的通讯协议文档,其中包括设备地址、功能码、数据格式等等。

根据通讯协议文档,我们可以构造请求命令,并根据返回数据解析结果。

在实现通讯功能之前,我们需要搭建好硬件平台。

可以选择将STM32F103单片机与温湿度传感器通过串口连接起来,同时确保电源供应的正常。

在软件开发方面,我们可以使用Keil MDK或者STM32CubeIDE等集成开发环境,选择适合的编程语言,如C语言或者汇编语言。

单片机通过Modbus协议与HMI通信

单片机通过Modbus协议与HMI通信

如何用单片机通过MODBUS协议与HMI通信一.Modbus简介Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(SchneiderAutomation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。

此协议支持传统的RS-232、RS-422、RS-485和以太网设备。

许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。

Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。

Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验。

ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。

但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII 都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。

所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。

二.ModBus消息帧使用ASCII模式,消息以冒号(: ASCII码 3AH)开始,以回车换行(ASCII码 0DH,0AH)符结束。

其它域可以使用的传输字符0...9,A...F。

网络上的设备不断侦测 : 字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。

触摸屏与单片机的通信实现

触摸屏与单片机的通信实现

触摸屏与单片机的通信实现 随着触摸屏的应用和产量的增加,价格下降。

因而有可能使用触摸屏作为单片机控制设备的键盘和显示装置,提高单片机控制设备的档次。

触摸屏与PLC联合使用时,触摸屏的主要功能是: ①显示PLC输入,输出端13或辅助继电器的开关状态。

②用触摸按键强制PLC输入,输出端口或辅助继电器的开/关。

③显示PLC中定时器、计数器和数据寄存器的内容。

④用触摸屏键盘把设定数据送入PLC的数据寄存器中。

可规纳成触摸屏与PLC问对应地址的数据位、字的读和写。

因此可以利用MODBUS通信协议来实现触摸屏与单片机的通信和控制,或触摸屏与多台单片机通信,构成一个集散控制系统。

1 触摸屏与单片机的硬件联接 采用MT500触摸屏与AT89C52单片机一对一通信。

把触摸屏的PLC232 9针插座与带有RS232接口的AT89C52单片机相连接。

如图1所示。

注意:通信电缆DB9是2-2、33、5-5。

这种接法的电缆也可用于与PC机通信或做通信摸拟。

作PC机通信时在连接PC机端的DB9短接46、78。

由于AT89C52单片机无RS232接口,因此需要扩展一片MAx232,把RXD、T&TImes;D的TTL电平转换成RS232电平。

 图1 触摸屏与单片机通信联接方法 2 建立触摸屏与单片机的内部存储器地址对应关系 打开触摸屏组态软件,从[编辑]下拉菜单中选[系统参数],弹出如图2所示参数设置对话框。

触摸屏的系统参数中PLc类型设置成MODBUS RTU,通信参数设置必需与单片机通信参数设置一致。

通信口类型设置成RS232,数据位设置成8位,1个停止位,波特率9600,校验位设置与单片机编程一致,PLC站号是单片机定义的站地址一样,站号需从1开始。

参数设置完成,按确定键。

 图2参数设置对话框 这时触摸屏的可操地址范围如表1所示。

 表1 触摸屏在设置成MODBUS RTU摸式时可操作地址范围 Ox1Ox9999、1&TImes;11x9999用于位操作的存储器,3xl一3x9999、4xl一4x9999用于字操作的存储器。

基于Modbus协议的单片机与触摸屏通信设计

基于Modbus协议的单片机与触摸屏通信设计

基于Modbus协议的单片机与触摸屏通信设计顾波飞;赵伟杰;吴开华【摘要】In order to solve the problems of human computer interaction of automatiac irrigation systeam, a kind of hunman computer interaction system was designed using touch panel as interface. The communication method was studied mainly between touch panel and micro controller unit for the automatic irrigation system which was powered by solar energy. Based on Modbus potocol, touch panel was used as host to sent data acquisition or operation request message and micro controller unit was used as slave to receive the request, judge the request and return the data and state or execute corresponding action. The research results show that the method solves the data real time communication between touch panel and micro controller unit for the automatic irrigation system which is powered by solar energy.%为解决太阳能自动灌溉系统中的人机交互问题,使用触摸屏作为人机界面设计了一种人机交互系统.重点研究了人机交互系统中单片机与触摸屏的通信方法,包括基于Modbus协议,触摸屏作为主机发出获取数据请求或操作请求,单片机作为从机接收并分析请求,返回相应的数据和状态或执行相应的动作.研究结果表明,该方法解决了太阳能自动灌溉系统中单片机和触摸屏之间的数据双向实时通信问题.【期刊名称】《机电工程》【年(卷),期】2012(029)001【总页数】4页(P104-107)【关键词】串行数据通信协议;单片机;触摸屏;自动灌溉;太阳能【作者】顾波飞;赵伟杰;吴开华【作者单位】杭州电子科技大学生命信息与仪器工程学院,浙江杭州310018;杭州电子科技大学生命信息与仪器工程学院,浙江杭州310018;杭州电子科技大学生命信息与仪器工程学院,浙江杭州310018【正文语种】中文【中图分类】TP393;TH390 引言太阳能自动灌溉系统结合光伏技术和测控技术,具有节能、节水等优点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Modbus C51_V1509程序说明
一.文件分布
MCU相关的文件,移植到其它单片机时,主要改这一部分
Modbus RTU协议相关的文件,
这部分基本是通用的,在移植时改动很少
这里面是, 51单片机的一个Keil工程文件,
直接使用keil软件打开里面的工程即可
二.硬件基本要求
1. MCU必须保留有UART串行通信接口;
2. 须要使用一个定时器,用作modbus数据帧的接收计时处理;
3. 选择合适的晶振,使得串口通信的波特率差误最小;
三.程序配置
a. 打开"includefile.h" ,
修改实际使用的晶振频率
b. 打开"main.c" ,
根据实际须要修改:波特率,校验和站号
c. 打开"C51uart.h" ,配置485控制端口如果没有使用485,可以跳过这一步
. e. 打开"Modbus_CFG.h" , 根据实际须要配置功能码,
以及各功能码的起始地址和数量
d. 打开"C51uart.h" 配置串口缓存,或者 在工程选项卡里面配置;如果选项卡里面 定义了,则程序上面的配置无效;
注意:串口缓存应根据单片机 RAM 容量合理配置!
f. 打开"App.c" ,仿照里面的例子进行modbus数据传递;
须要取得主机传递的数据,直接读取相应功能码数组的值即可;
须要向主机传递数据时,先准备好要传递的数据,再把数据
赋值给相应的功能码数组即可;
四. 与主机进行通信
可以使用modbus 调试软件进行测试本程序;
软件很多,可以在网上下载;这里使用modbus poll
打开软件界面如下图
a. 点 "Connection"
弹出串口连接界面
b. 根据实际情况,选择串口参数, 然后"OK" 串口参数一定要与从机程序配置的一致;
c. 这里会提示通信状态
图中这个是由于访问的地址超出了
从机程序定义的范围;
d. 点"Setup --> Read/Write Def....." ,
弹出配置窗口;
01,02,03,04功能码都是读取操作, 这里面以
3x 的04功能码为例说明,其它的方法类似;
从机的站号
这里选择功能码,一般只使用前面4个
须要访问的寄存器起始地址
须要访问的寄存器数量
这个勾上,会自动发送设定的命令
e. 配置好相关参数后,点OK .
注意,配置的参数一定要和从站
的配置一致;
f. 这时候通信状态指示 Err=0,通信正常;
表格里面的值即为从机的寄存器数据;
RegBuf_Input[0]=
......
......
......
......
RegBuf_Input[7] =
05功能码,写单个线圈 :
15功能码,写多个线圈 : a. 点05 功能码,弹出窗口
b. 输入从机站号和寄存器地址,
然后设置状态:On或者Off
c. 点"Send",发送命令
d. 如果显示".. OK",则成功
否则会通信状态会显示相应的信息
a. 点15 功能码,弹出窗口
b. 输入从机站号,须要写的
寄存器起始地址,数量
c. 输入数量后,则边框会出现相应数量的选项,把须要输出1的位置勾上,输出0的不用勾;
d. 设置好之后,点"Send"送出命令如果成功,会有"... OK"字样出现, 否则,会在通信状态指示相应的信息
06功能码,写单个保持寄存器:
a. 点06 功能码,弹出窗口
b. 输入从机站号和寄存器地址和
须要写的值; (数值范围:16)
c. 点"Send",发送命令如果成功,
会有"... OK"字样出现,否则,会在
通信状态指示相应的信息
16功能码,写多个保持寄存器:
a. 点16 功能码,弹出窗口
b. 输入从机站号,须要写的
寄存器起始地址,数量
c. 输入数量后,则边框会出现相应数量的选项,在相应的位置填写须要的数值
d. 设置好之后,点"Send"送出命令如果成功,会有"... OK"字样出现, 否则,会在通信状态指示相应的信息
观察/截取串口的命令数据
a. 点101 ,弹出窗口
c. 须要复制命令数据时,点一下"Stop"
b. 这里记录了每一条命令数据
d. 选择须要复制的命令数据
e. 选择数据后,点"Copy",
数据即可复制到剪贴板
f. 在其它须要这数据的地方,
粘贴一下即可;须要返回,观察
数据窗口,点一下"Continue"
Modbus poll 软件还有其它很多用法,这里就不一一说明了!。

相关文档
最新文档