



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何用单片机通过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。网络上的设备不断侦测:字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。个典型消息帧如下所示:模式起始地址功能数据校验结束ASCII:设备地址功能代码起地址数据数数据数据nLRC高字节LRC低字节<CR>例如:0603006B0003使用RTU模式,两个消息间至少要有3.5个字符时间的停顿间隔,整个消息帧必须作为一连续的流转输,如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将假定下一字节是一个新消息的地址域。同样,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将会认为它是前一消息的延续。这将导致一个错误,所以每一帧间的间隔必须大于3.5个字符时间,而在一帧内每个数据间隔不应大于1.5个字符时间.模式起始地址功能数据校验结束RTU(4T)设备地址功能代码起地址数据数数据数据nCRC高字节CRC低字节(4T)例如0603006B0003三.参考程序:下面以MCS-51单片机作为ModbusRTU从站与eViewMD204L通信例子.联接方式通信按RS232可RS485方式联接.通信速率为19200,数据位为8位,停止位1位,无校验.MD204L选用ModbusRTU协议,按相同方式设置好通信参数.工作原理MCU处理事务的过程中,串口处于侦听状态,当收到数据时,启动计时器,在发现一个大于3.5T的间隔后,判断报文的地址域是否与本身的设备地址一致,如果是的话,对收到的缓冲区内容进行校验,如果通过校验则认为是一个合法的Modbus报文帧,对该报文进行解释,并产生回送报文.示例报文发出:010400020001900A解释:01为站号,0002为起地址,0001为长度(1个字)回复:0104021000B4F0解释:01为回复站,02为字节数,1000为数据参考程序如下对MCU串口进行设置voidprotocol_init(void){//波特率19200,8,1,odd//都用工作方式3,不需要第9位时就将TB8赋1SCON=0xD0;〃工作方式3PCON&=0X7F;〃确保smod1=0;TMOD=0x21;//0x21,timer1,mode2,timer0mode1TH1=0xfd;TR1=1;//TR1:timer1run〃超时等待3.5个字符位以判断帧结束。〃则3.5个字符至多需要12*3.5=42个位,就是42*stop_timest2_time_out=(signedchar)TH1*(42*6);if(!(PCON&0x80))t2_time_out<<=1;T2CON=0;T2MOD=0;TR1=1;//TR1:timer1run〃超时等待3.5个字符位以判断帧结束。TI=0;RI=0;EA=1;ES=1;prepare_recv();}初始化接收状态的函数如下voidprepare_recv(void)small{〃准备接收TR2=0;//初始化T2ET2=1;T2REG=RCAP2=t2_time_out;receiving=1;frame_timeout=0;recv_index=0;recv_error=0;RW485=Rs485Rx;REN=1;}串行通信中断处理程序voidprotocol_serial_process(void)small{unsignedchartmp;if(_testbit_(TI)){trans_index++;〃下一个字节if(trans_index<protocol.buff_len){format_trans_send();//按约写的规格发送一个字节}else{trans_finished=1;prepare_recv();//发送完毕,转为接收状态}}if(_testbit_(RI)){RI=0;if(receiving){TH2=RCAP2H;〃重新装载计时器,等侍3.5T的中断TR2=1;tmp=SBUF;CommBuf[recv_index++]=tmp;if(recv_index>=BUF_MAX_LEN){//帧越界,出错,重收receiving=0;recv_error=1;}}T2定时器用于作为帧结束判断定时器,当发生中断时,意味已经有超过了3.5T的间隔voidtimer2(void)interrupt5〃计时中断2,用于帧超时计时{TR2=0;TF2=0;if(receiving){receiving=0;receive_finished=1;if((recv_index>7)&&(CommBuf[0]==protocol.device_addr)&&(!recv_error)){〃如果与当前设备地址一致并且报文长度有效,则报文进一步分析protocol.buff_len=recv_index;TH2=RCAP2H=DELAY_TIME_H;TL2=RCAP2L=DELAY_TIME_L;ET2=1;TR2=1;REN=0;}elseprepare_recv();〃否则丢弃这次接收,重新开始}else{{if(!recv_error){AnalyzeRecieve();//分析并生成回复报文send_frame_comm();//开始回复报文,按设定的参数格式进行发送}elseprepare_recv();}}}校验采用CRC校验,函数代码如下/*TableOfCRCValuesforhigh-orderbyte*/unsignedcharcodeauchCRCHi[]={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,
TOC\o"1-5"\h\z0x40,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};/*TableofCRCvaluesforlow-orderbyte*/unsignedcharcodeauchCRCLo[]={TOC\o"1-5"\h\z0x00,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,0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年哈尔滨市松北区卫生健康局公开招聘乡村医生10人模拟试卷附答案详解(突破训练)
- 2025河南工学院诚聘国内外高层次人才60人考前自测高频考点模拟试题及参考答案详解
- 2025河南郑州二七区一国企招聘各部门人员9人考前自测高频考点模拟试题及一套参考答案详解
- 2025春季粤规院科技集团招聘模拟试卷及完整答案详解1套
- 2025湖南湘潭湘乡市教育局招聘公益性岗位人员2人考前自测高频考点模拟试题及完整答案详解一套
- 2025广东中山大学附属口腔医院放射科影像技师招聘考前自测高频考点模拟试题及答案详解(夺冠)
- 洗青菜课件教学课件
- 2025年哈尔滨市南岗区人民医院招聘3人模拟试卷及1套完整答案详解
- 2025甘肃省兰州市榆中县中医医院春季招聘15人模拟试卷及答案详解(有一套)
- 安全培训考核奖励申请课件
- 森林防火智能预警监测系统方案
- 2024~2025学年中考数学重难创新题 二次函数性质综合题含答案
- 《 大学生军事理论教程》全套教学课件
- 1200吨黑水虻养殖项目可行性研究报告写作模板-备案审批
- office办公软件试题
- 13《黄鹤楼》公开课课件
- 申办餐饮食品经营许可证:14项管理制度清单
- 第2课 第一框 中国特色社会主义的开创和发展
- 鱼池净化系统施工方案
- 新概念第一册语法汇总
- 第八届全国小动物医师技能大赛考试复习题库(含答案)
评论
0/150
提交评论