首页 > 文章中心 > modbus协议

modbus协议

开篇:润墨网以专业的文秘视角,为您筛选了八篇modbus协议范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

modbus协议范文第1篇

[关键词] modbus; 监控; 功能码

1 引言

在油库和各种石化单位,定量装车作业十分繁忙,装车操作过程又要求相对精确。更加重要的是,涉及石化产品具有一定危险性。为了提高了装车精度和效率,降低损耗,减轻工人的劳动强度,同时尽可能保证安全作业,本文设计了基于Modbus协议的定量装车自动监控系统,并交付某公司使用。实际应用表明系统监控画面直观,人员操控方便,具备一定的主动安全保障能力。

2 Modbus协议

Modbus通信协议是美国Modicon公司开发的一种通信协议,它采用Master/Slave方式工作,一个主站可以连接多个从站,从站只能根据主站的请求作出相应的应答。它是一种开放、标准、免收许可费的通信协议。目前该协议已经广泛应用于自动化控制和测控仪表,并且已经成为我国工业自动化网络协议规范的国家标准之一。

Modbus协议有2种传输模式,即RTU模式和ASCII模式,相对于ASCII模式,RTU模式表达相同的信息需要较少的位数,且在相同通信速率下具有更大的数据流量,因此本系统选用该模式完成设计与实现。

Modbus协议的采用LRC和CRC两种校验模式来保证控制命令传输无误。本文采用CRC-16校验方式,该方式会根据当前发送或接收的命令字节码,计算对应的2个字节的CRC校验码。并将其加到命令字节码之后一并发送,组合之后的命令字节码格式为:

系统在实现过程中,考虑到最终将会采用普通的X86系列PC机作为监控终端,而该型机都是big-endian方式做多字节数据存储,与Modbus协议要求的little-endian刚好相反, CRC的计算结果必须满足这一要求。本文稍微调整了CRC-16校验码的产生方式如下:

Step1:将0xFFFF装入CRC寄存器;

Step2:将命令字节码的第一个字节与CRC寄存器异或,结果存放在CRC寄存器中;

Step3:CRC寄存器右移1位,高位填充0;

Step4:检查CRC寄存器的最低有效位,如果该位为0,则重复Step3;如果该位为1,则将CRC寄存器的值与0xA001异或;

Step4:重复Step3和4,直到完成8次移位之后,完成命令字节码中的对一个字节的处理;

Step5:对命令字节码的下一个字节重复Step2到Step5的处理,直到所有的字节都处理完成为止;

Step6:最终CRC寄存器中的内容就是该条命令字节码对应的CRC校验值;

例如,某命令字节数据[ 1 | 15 | 0 25 | 0 12 | 2 | 168 3 | 216 120 ]的含义为:给1号地址设备15号命令(写多个线圈),从它的25号起始地址开始(0 25),连续写12个线圈(0 12),写入内容为命令数据区的1010 1000 0011(168 3),根据命令计算出CRC校验码为(216 120)。

3 系统工作原理

本系统采用典型的RS232/485总线将上位机服务器端、上位机客户端以及各个下位机组成一个工业可控以太网,各下位机选取符合Modbus plus规范的相关设备,便于直接获取的操作过程中的各种数据信息,并封装成协议标准进行传输和通讯。主操作界面如图1所示。

系统工作原理框架如下:

(1)下位机通过传感器采集温度计、流量计、比重计等相关数据,并封装成Modbus协议格式数据供上位机客户端查询。

(2)上位机客户端通过串口和桥接器连接各个下位机,利用多线程串口读取函数主动进行数据收集,下位机按照上位机客户端的要求回传相应数据。然后,上位机客户端将收到的数据按功能码进行解析,并以图例、表格、文本等多种形式实时显示和记录。

(3)上位机服务器端通过TCP/IP网络与各个上位机客户端相连,对多个上位机客户端的状态信息进行收集、分析和存档,并通过主动发送命令的方式给上位机指令,进而通过上位机客户端给下位机下达控制命令,达到“监视――控制”双功能。

4 软件系统设计

上位机服务器通过接收Modbus请求,与上位机客户端进行交互,并对操作过程实时监控,利用成熟的数据库管理系统,接收、存储、处理和备份整个过程中产生的所有数据,为客户提供服务,并为进一步的数据分析提供历史依据。上位机服务器端主要功能包括:

(1)系统管理:该模块包括了各类管理员,操作人员的用户注册,授权和管理等等,防止非法操作人员恶意登录造成操作失误,也避免非授权操作员随意更改系统工作参数可能造成系统运行偏差。

(2)数据库管理:该部分模块选择成熟的数据库管理系统SQL Server2005对整个系统运行过程中所需要记录的所有数据信息就行存储和管理,为整个系统的运行和监控提供可靠的数据支持;

(3)系统工作状态显示:该模块负责以图像模拟显示多种数据状态,有利于管理人员实时监控各下位机客户端的操作情况。并且提供多种显示图像帮助管理人员分析各种操作情况,这是系统的核心功能之一, 在实现获取个下位机状态之后,对下位机进行直接控制是系统必需的核心功能之一,虽然在实际装车控制中主要使用的功能码只有2、4、15、16号命令,但是本系统实现了全部Modbus功能码,便于今后对新设备的扩充。。

(4)Modbus协议命令:该模块能够按照标准的Modbus协议,接收来自上位机客户端传送来的Modbus请求,完成数据采集、数据分析和数据存储工作,是系统工作状态显示实现的基础;

(5)安全警报功能:授油工作本身是具备一定危险性的工作,安全责任事故问题必须引起足够的重视。可以根据各种系统状况进行报警处理,保证系统工作状态安全可靠,避免业务事故的发生,并且具备自动报警信息记录功能,收集历史上曾经出现的安全事故信息,为安全人员分析发现安全事故规律,查找安全隐患提供数据支撑。

上位机客户端能有效地按照预定订单号自动完成装车作业,或者在操作员的控制下,进行控制参数设置,定量控制、数据采集、业务受理和报表打印等具体业务。上位机客户端主要功能包括:

(1)实时授油监视:该模块负责实时动画模拟显示整个下位机控制分组内所有鹤管的出油状况,及相关关键参数数值显示。例如:发油订单号、车号、油品类型、参数设定、误差范围等等;

(2)强制发油控制:该模块在特殊情况下,可以人为指定操作指令,以取代自动发油过程,控制启动发油、暂停发油、恢复发油、强制结束等方式来进行特殊操作,扩展控制功能,更加适应实际操作的变化;

(3)业务计划管理:该模块下,客户可以根据预约过的订单号,自动完成装车过程。也可以在没有订单号的情况下,有操作人员生成新的装车业务,并进行结算;

(4)业务查询:该模块按照操作员和客户要求的方式(诸如进行订单号、装车时间、油品类型、装车单位、操作员编号等等)进行多种关键字查询和统计功能,并且自动生成相关联报表。

(5)打印功能:其自定义打印功能,更加贴近实用,可以由用户自主选择打印;

5 结论

本设计采用OOAD思想,用UNL建模,并使用Borland C++作为开发工具,规范化的设计和编程过程,以及大量集成的成熟控件足以支撑本软件系统的快速开发。结果表明,软件系统既可以对标准Modbus功能码进行调试,也可以对自定义功能码进行设置,还可以实时监测和控制下位机状态,并结合数据库功能记录所有关键操作和核心设备配置参数信息,保障差错恢复。系统运行稳定可靠,使用简明方便,很好地满足项目要求。

[参考文献]

[1] AEG Schneider Automatic Inc. Modicon IBM host based devices user’s guide Apr.1996

[2] 张克涵,张呼和,顾李冯.VC环境下的电机状态监测软件设计[J].测控技术2012年第31卷第2期

[3] 吕国芳,唐海龙,李进.基于ModbusRTU的串口调试软件的实现[J].计算机技术与发展 2009年第19卷第9期

[4] 袁辉,李延香.基于Modbus通讯协议数据采集系统的设计[J].科技咨询导报 2007 No.19

[5] 陈柏金.通过串行口访问modbus现场控制网络[J].微计算机信息 2003.19(1)

[6] 王念春.基于Modbus的PC与下位机PLC间的通信程序[J].自动化仪表 第22卷第8期 2001年8月

[7] 徐涛,闫科.基于Modbus协议的串行接口实现与DCS通讯[J].工业控制计算机 2002年4月

[8] 罗朝霞,张高记.基于TMS320F240TA DPS的Modbus通信协议的实现[J].微计算机信息2005.21(72)138-139

[9] 房传礼,李建华.基于Modbus协议的大屏幕在线监视系统设计[J].自动化与仪表 2010年7月

[10] 卢文俊,冷杉.基于Modbus协议的控制器远程监控系统[J].电力自动化设备 2003年第23卷第6期

[11] 甑君,卫强,于耀.应用多线程技术实现串行通信与信号采集识别的同步[J].计算机工程 2003(10)196-197

[12] 李俊,徐红兵.基于Modbus协议的汽轮机保护系统通讯设计[J].自动化与仪表 2006年7月

[13] 方羽,梁广瑞.基于uCOS的Modbus协议的实现.装备制造技术[J] 2009年第1期

modbus协议范文第2篇

关键词:MODBUS;光伏;监控

中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2013)19-0069-02

1 引言

目前我国依然是煤炭能源消耗大国,从能源消费的结构上看还属于粗放型能源利用方式,与现代集约型经济发展的要求还有一定的差距。所以,从可持续发展的角度看,包括太阳能在内的新能源和可再生能源将大力发展,以逐步改善以煤炭为主的能源结构,促进常规能源资源更加合理有效地利用,使我国能源、经济与环境的发展相互协调,实现可持续的战略目标。到2015年,我国将大规模推广应用新能源和可再生能源技术,其中光伏发电可以替代部分煤电,减轻能源对外依靠的压力,对改善我国能源结构和走能源可持续发展的道路是十分必要的。本文以Modbus协议为基础在B/S框架下对光伏电场监控系统进行研究。

2 Modbus协议

2.1Modbus协议及其特点

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。在我国,Modbus协议已经成为国家标准GB/T19582-2008。据不完全统计,截止到2007年,Modbus的节点安装数量已经超过了1000万个。Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了控制器请求访问其他设备的过程,如回应来自其他设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其他网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

Modbus具有以下几个特点:

(1)Modbus协议的帧格式非常紧凑和简单,而且通俗易懂。

(2)Modbus协议可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。本套光伏电场监控系统就是利用RS-485接口来实现数据传送。

(3)标准开放,用户可以完全免费放心地使用Modbus协议,不需要交纳许可证费,不存在侵犯知识产权的问题。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。

2.2Modbus协议在B/S模式下实现

本光伏电场监控系统采用B/S架构模式开发,其中Web服务器由C#编写,利用Visual Studio 2005软件实现,数据库由SQL Server 2005完成。在系统编写过程中必须遵循Modbus协议,利用modbus_Master和modbus_Slave完成数据的传送。

2.2.1modbus_Master的应用

作为Modbus客户端模式的应用,主要是准备请求并向服务器设备发送请求,并等待服务器的响应,以此来完成对服务器设备的访问和控制。

2.2.2modbus_Slave的应用

作为Modbus服务器模式的应用,主要实现了对于ModBus应用报文的分析与响应,为了方便使用,在modbus_Slave软件包中通过函数指针的形式,实现了接口函数的自动加载,将应用数据处理和ModBus应用报文响应关联起来,通过专门的一个CPP文件DataProvider.cpp来实现相应的功能。为了及时地响应Modbus应用报文,程序设计时利用一个线程反复调用modbus_Slave执行函数,该函数为阻塞模式。

3 光伏电场监控系统的功能设计与实现

3.1光伏电场监控系统的功能设计

整个系统实现全站的逆变器的监控和环境数据的监控。监控装置主要包括PC机、数据采集仪、环境数据传感器、监控软件和液晶显示屏。几个机房分别配置若干台数据采集仪,通过RS485通讯方式采集逆变器数据,数据采集仪通过以太网与PC机通讯获取数据,汇总并在本地的液晶显示屏显示。

并网逆变器提供RS485通讯接口,采用标准Modbus协议,每个逆变器室的逆变器通讯线并联后接入数据采集器,由数据采集器实现逆变器的数据向主控室传输。光伏电站监控系统的监控部分的设计主要突出两大功能:向公众展示电站发电数据,为专业调试人员和维护工作人员提供双向数据服务。

3.2光伏电站监控系统实现

光伏电站监控系统可以实时显示电站的当前发电总功率、日总发电量、累计总发电量、累计CO2 总减排量以及每天发电功率曲线图。可查看每台逆变器的运行参数,监控所有逆变器的运行状态,采用声光报警方式提示设备出现故障,可查看故障原因及故障时间。监控软件具有集成环境监测功能,能实现环境监测功能,主要包括日照强度、风速、风向、室外温度、室内温度和电池板温度等参量。可每隔5 分钟存储一次电站所有运行数据,包括环境数据。故障数据需要实时存储。能够分别以日、月、年为单位记录和存储数据、运行事件、警告、故障信息等。可提供多种远端故障报警方式,如SMS(短信)方式或者E_MAIL 方式等。光伏电站监控系统具有故障预警和报警功能,系统监控部分可采集和显示多种数据,包括系统运行数据(电流、电压、功率)和环境数据(太阳辐照度、温度等),并且系统会自动记录历史数据,方便查询和追溯;也可为学习、分析、研究光伏电站提供参考和帮助,系统外接大屏幕向公众展示太阳能光伏发电系统运行情况。鉴于每个发电单元设备所处位置比较分散,不在同一个地点,采用RS485和Modbus协议通讯方式建立监控系统,实现发电数据网络共享。监控主机同时提供对外的以太网接口,即用户可以通过网络方式,异地实时查看并网逆变系统的实时运行数据以及历史数据和故障数据。

4 小结

这套基于Modbus协议的光伏电站监控系统经过近半年的运行,效果良好,系统稳定,能基本满足日常监控需要,实现了系统的全自动智能化运行,无须人员值守,性能价格比最佳。当然,由于系统运行时间不长,将出现一些不足,这需要在以后的工作中逐步完善。

参考文献:

[1]杨海柱.金新民.光伏并网逆变器监控系统设计[J].电工时代,2006,(1).

[2]舒杰.光伏系统的远程监控技术与实现[J].华南理工大学学报,2005,33(5).

modbus协议范文第3篇

本文通过着重阐述对HONEYWELL PKS 和S7-200的modbus rtu 通讯的各种参数的设置,以实现HONEYWELLPKS 和S7-200之间的通讯。

主要参数设备:S7-200CPUMBUS_INIT MBUS_SLAVE终端服务器 交换机等

中图分类号:TP368文献标识码: A

引言:

在鞍山热能研究院碳素总厂针状焦工程中,通过一年多的工作,我们通过在HONEYWELL PKS 的画面与下位机的编程调试过程中,接触了多种通讯协议,使我对HONEYWELL PKS 和S7-200之间的通讯有个更深刻的认识,以下是我对HONEYWELL PKS与S7-200之间MODBUS RTU从站协议通讯的论述。

在S7-200中MODBUS RTU从站指令库只支持CPU上的通信0口(Port0), 是通过S7-200的自由口通信模式实现,它支持 STEP 7-Micro/WIN32 V3.2以上版本的编程软件,通讯前我们要检查Micro/WIN的指令树中是否存在MODBUS RTU从站指令库,库中应当包括MBUS_INIT和MBUS_SLAVE两个子程序。如果没有,必须安装Micro/WIN32 V3.2的Instruction Library(指令库)软件包,如图:

在编程时,我们一般使用SM0.1 来初始化MBUS_INIT,使用SM0.0来调用MBUS_SLAVE。

在我们对MBUS_INIT和MBUS_SLAVE进行编程设置时,我们一定要先明白每个管脚的意义与作用,下面我们对管脚逐一的剖析认识一下。

图1

在MBUS_INIT中,Mode模式选择:启动/停止MODBUS, 1=启动;0=停止

Addr 从站地址:MOUBUS从站地址,取值1~247

Baud 波特率:可选1200,2400,4800,9600,19200,38400,57600,115200

Parity奇偶校验: 0=无校验;1=奇校验;2=偶校验

Delay 延时:附加字符间延时,缺省值为0

MaxIQ最大I/Q位:参与通信的最大I/O点数,S7-200的I/O映像区为128/128,缺省值为128

MaxAI最大AI字数:参与通信的最大AI通道数,可为16或32 MaxHold最大保持寄存器区:参与通信的V存储区字(VW)

Holdst~保持寄存器区起始地址:以&VBx指定(间接寻址方式)

Done : 初始化完成标志:成功初始化后置1

Error :初始化错误代码

在MBUS_SLAVE中,Done :MODBUS执行:通信中时置1,无MODBUS通信活动时为 0

Error : 错误代码:0=无错误

MaxHold和HoldStart指定的保持寄存器区,是在S7-200 CPU的V数据存储区中分配,此数据区不能和库指令数据区有任何重叠,否则在运行时会产生错误,不能正常通信。我们一定要注意Modbus 中的保持寄存器区是按“字”寻址,即MaxHold规定的是VW而不是VB的个数。在图1的例子中,规定了 MODBUS 保持寄存器区从 VB700开始(HoldStart = VB700,保持区不一定要从VB0开始),并且保持寄存器为500个字(MaxHold=500),因保持寄存器以字(两个字节)为单位,实际上这个通信缓冲区占用了VB700~VB1699共1000个字节。因此分配库指令保留数据区时不能在VB700~VB1699之内。同时我们要注意的是V存储区大小与CPU型号有关,不同型号的CPU的V数据存储区大小不同,所以我们应根据需要选择MODBUS保持寄存器区域的大小.在这里我们对MBUS_INIT和MBUS_SLAVE进行如图1的设置。

我们通过一个终端服务器来实现485通讯转换为以太网通讯,如图2:

485通讯电缆

以太网通讯电缆

以太网通讯电缆

图2

注意:用以太网线连接终端服务器和交换机时,要注意它们连接的端口间的传输速率是否相同,不相

同一定要把它们设为相同的传输速率,这样终端服务器和交换机之间才能进行通讯。

在S7-200与MODBUS的地址转换中我们参照如图3:

Modbus地址 S7-200数据区

00001 ~ 00128 Q0.0 ~ Q15.7

10001 ~ 10128 I0.0 ~ I15.7

30001 ~ 30032 AIW0 ~ AIW62

40001 ~ 4xxxx T ~ T + 2 * (xxxx -1)

图3

T代表S7-200中的起始地址的数值,如图1中HoldStart = VB700,T就等于700.对应的MODBUS地址就是40001.

在HONEYWELLPKS中,我们要在QuickBuilder (CONFIGURATIONSTUDIOCONTROLSTRATEGYSCADACONTROL)中对通道、控制器、点进行设置,如图4

图4

在进入下面的画面时,我们单击图5标栏中的“+”会弹出一个窗口如图6:

图5

modbus协议范文第4篇

关键词:Modbus协议;交流电压峰值;MSP430F449;MAX1270

中图分类号:TB971,TP368.1文献标识码:B

文章编号:1004-373X(2009)10-146-03

Design of AC Voltage Peak Detection Instrument Based on Modbus-RTU

WANG Jichang

(Seismic Geophysical Company of Shengli Oil Field,Dongying,257100,China)

Abstract:The peak voltage detection of AC is an important index in industry power safety monitoring.AC voltage peak detection system based on hardware of MSP449,MAX1270 and RS 485,and protocol of Modbus-RTU are introduced.This system have been used in AC voltage peak detection successfully.This system has advantages of portable,low power and so on.Meanwhile,it is easy to interface with PC or controller in accordance with Modbus-RTU protocol to construct remote monitoring and control system conveniently.

Keywords:Modbus protocol;AC voltage peak;MSP430F449;MAX1270

收稿日期:2008-10-23

0 前 言

交流电压峰值是指交流电压的最大值(正峰值)或最小值(负峰值),是工业生产过程中一个非常重要的参数。为保证用电设备的安全,对供电电压的峰值[1]进行检测具有重要意义。测量峰值的方法主要有示波器法、间接计算法、专用峰值表法。利用示波器虽然可直观地显示电压的波形和峰值,但在成本和便携性上示波器均不能作为现场监视设备;间接计算法只适用于标准正弦波,实用性不大;专用峰值表大都存在体积较大,携带不便,且与电脑或控制设备相连不便的缺点。针对以上缺点,采用MSP430[2]系列单片机、MAX1270模/数转换器,并利用Modbus-RTU协议,成功地开发出了低成本、便携、智能的峰值表设备。

1 测量原理

由于供电电网的波动及电网的电压波形是一种非标准正弦波,其峰值不能通过平均值或有效值间接计算。该系统采用对非标准正弦波在一个周期内多次采样,并通过冒泡法比较采样值,得到电压的最大值或最小值作为其正峰值和负峰值。显然只要采样密度适当,完全可以得到真实的电压峰值。我国交流电的频率为50 Hz,设计中采样频率设置为10 kHz,即每个交流波形周期中采样200次,足以正确地反映出电压的变化情况,从而确定电压的峰值。

2 硬件设计

设计中,以MSP430F449[3]单片机、MAX1270模/数转换器为主要器件。前端A/D输入采用电阻分压方式将交流电进行降压;采用RS 485芯片作为通信接口芯片,硬件框图如图1所示。

图1 硬件框图

2.1 A/D输入调理保护电路设计

以220 V交流电为例,其理论峰值电压为311 V,但考虑到电网波动、正弦波失真等,电压峰值很可能超过311 V,这时可根据工作经验和实测情况,选定一个电压值作为电压可能达到的最大值,假定为500 V。如果MAX1270的输入范围设置为±5 V,则分压电阻的分压比应设置为100∶1。分压后的电压经过运放缓冲后作为A/D芯片的输入,为保护后级A/D转换芯片,设置两个稳压二极管组成限幅电路。输入调理电路如图2所示。

图2 A/D输入信号调理保护电路

2.2 A/D转换电路

A/D转换电路采用MAX1270[4]芯片,MAX1270是8通道、多量程双极性输入、串行输

出、逐次逼近型12位A/D转换器,最高采样率为110 kS/s。在单+5 V电源供电下,可通过编程实现±5 V,±10 V,5 V,10 V量程。其中,双极性输入十分适合作为交流电压测量。

MAX1270转换电路如图2所示,由MSP430F449的I/O口线控制MAX1270的串行接口。由于MAX1270在5 V电压供电下,输出4.5 V以上高电平,而MSP430F449的I/O口电平为3.3 V,因此必须附加一个接口芯片,以实现5~3.3 V的电平转换,这里采用MAX3001双向电平转换芯片。A/D转换电路如图3所示。

2.3 RS 485接口电路

该设计采用RS 485总线[5],可通过电缆或光纤将信号有效地远传上千米,配合Modbus-RTU协议,可方便地与符合Modbus-RTU协议的控制设备连接。设计中采用MAX3485芯片作为RS 485接口芯片,电路如图4所示。

图3 A/D转换及电平转换电路

图4 RS 485接口电路

3 软件设计

设计中,主要的软件模块包括A/D转换,Modbus-RTU协议和串口编程。对于串口编程不再赘述,主要对MAX1270[6]和Modbus-RTU[7]协议进行说明。

3.1 MAX1270编程

MAX1270的控制字格式如表1所示,最高START为起始位,保持为“1”;SEL2~SEL0为输入通道选择位;RNG,BIP分别为量程和极性选择位;PD1和PD0为掉电和时钟模式选择位。各位的具体意义请参考MAX1270数据手册。该设计中,MAX1270设置为:量程10 V,双极性输入(即实现±5 V测量)、外部时钟25 CLK/s正常操作模式,使用通道CH0作为输入通道,控制字的格式为10000101。

表1 MAX1270控制字

BIT7(MSB)BIT6BIT5BIT4BIT3BIT2BIT1BIT0(LSB)

STARTSEL2SEL1SEL0RNGBIPPD1PD0

/*函数:max1270_ACQ()功能:读取A/D转换数据*/

unsigned int max1270_ACQ()

{

unsigned char cmd;

cmd=0x85;//双极性正负5 V输入范围,通道0,常规操作、外部时钟模式

unsigned char t=8;

do//写入控制字

{

max1270_CLK_CLR;

_NOP();

if((cmd & 0x80)==0x80)

max1270_DI_SET;

else

max1270_DI_CLR;

cmd

_NOP();

max1270_CLK_SET;

_NOP();_NOP();

}

while (--t!= 0);

max1270_DI_CLR;

//等待转换完成

for(int i=5;i>0;i--)

{

max1270_CLK_CLR;//时钟下降沿

_NOP();_NOP();

max1270_CLK_SET;//时钟上升沿

_NOP();_NOP();

}

//读出转换结果

unsigned int dat=0;

t=12;

do

{

max1270_CLK_CLR;

_NOP();

dat

if(max1270_DO)//DO的输出为1

dat++;

max1270_CLK_SET;

_NOP();

}

while (--t!=0);

_NOP();_NOP();

max1270_DI_CLR;

max1270_CLK_CLR;

_NOP();_NOP();

return dat;

}

3.2 Modbus-RTU协议

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。Modbus-RTU是Modbus[8]协议的一种传输模式,在该模式下,消息中的每个8 b包含2个4 b的16进制字符。Modbus协议的核心程序是CRC校验[9]程序的编写。该系统中采用CRC-16校验法,具体程序实现如下:

//CRC生成和校验:用于CRC生成和校验,其中frame为数组指针,n为数据个数//

unsigned int CRC(unsigned char *frame,int n)

{

int i,j;

unsigned int flag,crc;

crc=0xffff;

for(i=0;i

{

crc^=*frame++;

for(j=0;j

{

flag=crc&0x0001;

crc>>=1;

crc&=0x7fff;//crc高位补零

if(flag)

{

crc^=0xa001;//crc xor A001

}

}

}

flag=crc%256;//取模求余得到crc低字节

i=(crc-flag)/256;

crc=flag*256+i;//高低字节交换

return(crc);

}

3.3 其他重要子程序

程序中采用定时器中断触发每次采样,保证采集周期的精度,同时每次采集时都以过零点作为采集数据的开始。这两点都有利于提高系统精度。

//定时器设置

CCR0=399;//400×0.25 μs=0.1 ms,即采样周期

设定为10 kHz(10 k/50=200)

TACTL=TASSEL_2+MC_1+TACLR;//MCLK=4 M,Up Mode,CCTL0=CCIE;//CCR0中断使能

//正过零点判断

if(AD_Result

Start_Flag=1;//Start_Flag为开始存储数据的标志

else

Start_Flag=0;

4 测试结果

通过施加标准正弦波、非标准正弦波、三角波测试,可使该表的峰值测量精度高于1级,完全满足工业现场设备供电检测的需求。该表与工控组态软件MCGS[10]配合,工作良好。此外,该表除了测量峰值以外,还扩展了电压平均值、有效值的计算,设计成一个具有多功能的智能仪表。

5 结 语

该设计以MSP430F449单片机、MAX1270为核心,编写了Modbus-RTU协议,同时利用RS 485接口可方便地进行数据远传或与符合Modbus-RTU协议的设备相连,该表的体积小,功耗低,可使用干电池或蓄电池供电,非常适合作为编携式设备,随身携带,也可作为功能模块直接安装在工业现场设备对电网供电电压峰值、有效值等参数进行监测。

参考文献

[1]李玉峰.自动切换量程的峰值电压检测系统[J].电测与仪表,1999,36(12):14-16.

[2]陶维青.基于430单片机的新型配电变压器远方终端的开发[J].继电器,2005,33(19):66-69.

[3]魏小龙.MSP430系列单片机接口技术及设计实例[M].北京:北京航空航天大学出版社,2002.

[4]王立新.串行A/D转换器MAX1270及其应用[J].微计算机信息,2006(12):305-307.

[5]陈树广,武君胜.RS 485总线在智能抄表系统中的应用研究[J].微计算机信息,2008(13):148-150.

[6]Maxim Corporation.MAX1270 Datasheet\.2007

[7]王兴贵,张明智,杜莹.Modbus RTU通信协议在智能仪表与工控机通信中的应用[J].低压电器,2008(2):8-11.

[8]Modbus协议[EB/OL].,2007.

modbus协议范文第5篇

关键词:Modbus;协议;模块

中图分类号:TP301 文献标识码:A 文章编号:1009-3044(2016)22-0193-02

Abstract: With the development of informatization, application of Modbus device is more and more widely, this paper introduces the Modbus communication protocol, Modbus serial link protocol, Modbus/TCP protocol, and connecting with the actual work introduces some standard Modbus modules: ioLogik E2000, MB3280, DAM - 3601, and the use of these module method and the matters needing attention.

Key words: Modbus; protocol; module

1 概述

随着科学技术的发展,也随着无线局对信息化的重视,大功率短波发射机房内的设备自动化程度越来越高,发射机自动化系统、天线自动化系统以及附属设备温度自动控制系统普遍应用。在附属设备温度自动控制系统开发过程中,采用厂商的标准Modbus模块能大大缩短系统开发过程,本文结合实际开发过程,针对一些模块的使用与大家探讨交流。

2 Modbus协议介绍

Modbus 通信协议是 Modicon 公司在1979年开发的一种通信协议,是一个请求应答的协议,也是一种串行的、非同步的通讯协议,支持传统的RS-232、RS-422、RS-485和以太网设备。MODBUS 是一项应用层报文传输协议, 用于在通过不同类型的总线或网络连接的设备之间的客户机/服务器通信。Modbus 通信协议是一种真正开放、标准的、免收许可费的网络通信协议,现已成为一种公认的通用工业标准。基于Modbus 协议,不同厂商生产的控制设备可以连成工业网络,从而可以集中监控。

MODBUS 协议允许在各种网络体系结构内进行简单通信。各种设备包括PLC、HMI、驱动程序、动作控制、输入/输出设备都能使用 MODBUS协议来启动远程操作。这些设备可以在串行链路和以太 TCP/IP 网络的 MODBUS 上进行通信。通过使用网关设备可以使不同的设备在使用 MODBUS 协议的总线或网络之间进行通信。Modbus 协议有 2 种传输模式即 RTU 模式和 ASCII 模式,一般工业智能设备都是采用 RTU 模式的Modbus 协议。

Modbus 串行链路协议是一个主-从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线。由主节点发起通信,子节点在没有收到来自主节点的请求时,从不会发送数据。子节点之间不会互相通信。

Modbus串行链路协议上帧格式如图1所示,地址域为子节点地址,功能码指明服务器要执行的动作,后面跟有表示含有请求和响应参数的数据域。

在 TCP/IP 上的MODBUS 协议是一种报文传输服务,提供以太网上设备之间的客户机/服务器通信,MODBUS 通信前需要建立客户机与服务器之间的 TCP 连接,通信使用一种专用报文头识别 MODBUS 应用数据单元,这种报文头称为 MBAP 报文头。帧格式如图2所示。

3 典型模块介绍

3.1 MOXA 以太网RTU控制器 ioLogik E2200

ioLogik E2000系列产品是一种新型的以太网RTU控制器,是一种智能以太网远程I / O设备,可以连接传感器和开/关,基于PC进行数据采集与设备控制,通过基于事件的PUSH通信方式,实现实时数据采集和报警。E2212配备有8路可设置的 DI/O 通道, 有最简单的本地控制逻辑程序Click&GO,Click&GO还支持一个特殊功能,即“继电器计数”,可以提供继电器开关的计数,实现继电器报废提醒功能,当继电器快要报废时,事先提前通知维护人员替换继电器从而避免系统失效。

在机房附属设备温度控制系统中,E2212可用来控制风机、百叶窗等的开关和证实。使用E2212时要使用配置软件进行IP地址设定,在程序中建立SOCKET连接后,就可以发送相关命令进行设备控制和检测。

开命令:0x00,0x00,0x00,0x00,0x00,0x06, 0x01, 0x05, 0x00,0x01,0xFF,0x00

MBAP 报文头设备地址 功能码写 通道01 状态:ON

关命令:0x00,0x00,0x00,0x00,0x00,0x06,0x01,0x05,0x00,0x01,0x00,0x00

查询开关状态命令:

0x00,0x00,0x00,0x00,0x00,0x06, 0x01, 0x02, 0x00,0x00,0x00,0x08

MBAP 报文头 设备地址 读输入 首地址 读8个

3.2 标准的Modbus网关MB3280

MB3280是标准的Modbus网关,它可以完成Modbus TCP和Modbus RTU/ASCII协议之间的转换。同时支持16个Modbus TCP master连接,每个端口可以连接31个RTU/ASCII slaves设备,对于RTU/ASCII master最大可以支持 32个TCP slave。是为快速整合Modbus TCP和RTU/ASCII 网络而设计的,使用MB3280,Modbus串口slave设备可以无缝地整合到现有的Modbus TCP网络中,并且Modbus TCP slave也可以和serial master正常通讯,使用MB3280最多可以管理62个串口slave节点,可以为每个通道的Modbus RTU或Modbus ASCII 配置不同的波特率,允许不同的Modbus网络整合到一个Modbus TCP网络上来。

在机房附属设备温度控制系统中,利用MB3280的网关转换功能,可以把串口485的设备例如变频器、温度采集模块等转接到以太网中,方便现场布线,原有的设备控制命令只需要加上MBAP 报文头即可正常使用。

3.3 温度采集模块DAM-3601

DAM-3601是一种远程数字化温度采集系统,可同时连接128个数字温度传感器(共8通道,每路最多16个),以RS485方式同上位机通讯。模块采用DC/24V直流供电,带电源极性保护,测温范围:-55~+125℃,测温距离:≤200m。DAM-3601可使用厂家提供的软件进行模块地址的修改、传感器编号、温度查看等,也可以在程序中发送相关的命令进行温度的采集。

DAM-3601和数字温度探头DS18B20配合使用可用来测量环境温度,DS18b20传感器与模块之间的导线连接应选用绞线连接,如果现场环境电磁干扰比较大,应选用带屏蔽的绞线进行连接,距离超过50米,需要提供单独的5V电源。如果DAM-3601与计算机的485串口连接,发送的相关命令为:

查询温度命令: 0x01, 0x03, 0x00,0x00, 0x00,0x08

模块地址 读 探头首地址 读8个探头

若DAM-3601通过网关MB3280连接到计算机,查询命令需要加上MBAP 报文头。

查询温度命令为:0x00,0x00,0x00,0x00,0x00,0x06,0x01,0x03,0x00,0x00,0x00,0x08

3.4 串口联网服务器

串口服务器能够将RS-232/485/422串口转换成TCP/IP网络接口,使得串口设备能够立即具备TCP/IP网络接口功能,连接网络进行数据通信。串口服务器与网关不同,串口服务器的串口只能连接一个串口设备,与设备连接后,控制命令与原来一样。

3.5 DS18B20

DS18B20是常用的数字智能温度传感器,具有抗干扰能力强,精度高的特点。DS18B20温度传感器接线方便,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现组网多点测温,测温范围:-55℃~+125℃。

4 结束语

MODBUS 协议应用相关的模块还有很多,但是只要模块遵守MODBUS 协议,使用方法和控制命令就相似。使用这些标准模块,可以快速的开发温度控制系统,从而实现对发射机房附属设备的自动,使发射机更加稳定运行。

参考文献:

modbus协议范文第6篇

【关键词】ModbusRTU协议 Delphi编程环境 软件实现

随着近年来我国信息技术的快速发展成熟,我国的工业控制技术已经实现了自动化的发展,包括测控装置和被控对象在内的各类设备之间的交互性信息发送量也在逐步增加,但是,常规的控制系统已经不能满足及时有效的数据交换需要,而以太网技术则具有应用广泛、低成本、高速率等明显优势,并在工控领域的道路广泛的应用,逐步发展完善为现阶段较为现金的以太网技术。Modbus是属于工业领域中得到广泛使用的一种完全标准、开放的通信网络协议。在冶金、制造业、基础设施建设、电力、供水和交通等工业领域行业众,Modbus能够达成过程控制和数据采集等目标,并成为了业界一致认可的工业通用准则。Modbus 协议在PLC结构特征的基础上,还具有较高的性价比,且其主/从式通信机理可以实现数据的实时性传输,大部分的智能化仪表和PLC都能够为该协议的内部资源提供直接的支持。

1 Modbus RTU协议介绍

Modbus 协议属于分布式控制和工业通信系统协议的一种。对于该协议而言,控制器之间能够利用网络及其相关设备实现相互通信。Modbus协议可以被视为一个能够帮助控制器识别的消息结构,且可以适用于所有的网络通信过程。该协议属于主从应答方式通信协议的一种,其主站能够与一个甚至多个从站相对应,因而协议更加易于实现,且更简单。

在Modbus系统中,可通过TCP 模式、ASCII 模式和RTU 模式等三种常用的模式进行传输,先对其进行简要说明:在ASCII系统模式运行过程中,所有的信息帧均以每8位字节为2个ASCII字符的形式进行传输,而RTU模式则是将所有信息中的8位数据转化为1个8位16进制的字符进行传输,因此,与ASCII 模式相比,RTU模式仅需要较少的位数即可以表达同样的信息,而且在通信速率相同的情况下数据的流量也更大[3]。同时,TCP模式能够与以太网 TCP/IP 协议相互结合,并为XML和HTTP等开放Internet 协议提供支持,且保留了传统Modbus 协议的应答/命令方式以及ASCII和RTU两种数据格式等基本特征,这就造成Modbus/TCP能够在使用现场总线的基础上,将网页服务器置入设备中,从而有助于处理现实的问题。在Modbus RTU协议中,主机设备将会发出一个信息,而从机设备也会相应地反馈一个信息,若相反,则从机设备接收到信息后,其会组织处一个向从机设备提供响应的信息,后将所发送的信息返回到主机设备。Modbus RTU 的查询响应示意图,见图1。

2 软件的设计和实现方法

2.1 CRC16的设计和实现

根据Modbus协议所规定的校验方式,RTU模式应选择的CRC的校验方法。CRC也就是循环冗余码校验,其能够通过多项式的生成产生校验位编码。按照不同的生成多项式,CRC 校验主要包括下述几类,即CRC-32、CRC-CCITT、CRC-12和CRC-16。现阶段,CRC-16校验码是仪表类中较为常用的一种校验码。由其算法实现方面来看,通常首先可以设置一个16位的寄存器,再将16位的CRC寄存器与8位的2进制数据低8位异或,后在CRC寄存器中放置结果,同时右移寄存器内容,最高位以0填补,并对右移后发生的移出位情况进行检查。

2.2 Modbus 协议类的实现

上位机通信软件通常在Delphi编程环境中进行开发,并在Delphi编程环境通过spcomm 控件进行串口编程。这一空间设计的主要对象为RS-232通用串口。Modbus RTU 协议通过面向对象技术封装的类,能够实现软件的重用、扩展和维护。Modbus 类的基本内涵主要包括下述三个基本成分,即功能码处理、报文处理和报文存储。ModBus 协议类的通讯标准可以定义为:在从机设备接收到主机设备发送的通讯命令后,对应地址码的设备能够收到相应的通讯命令,将地址码去除后,读取信息,若未发生错误,则立即执行相应的命令,再将执行的结构反馈到发送者处。

3 总结

综上所述,在Delphi编程环境下根据本文所述的的方法,实现了Modbus RTU 协议串口通讯上位机软件的编制和运行,研究结果表明,这一软件能够在最短的时间内实现最大量的信息传输,同时实现了系统通讯可靠性、稳定性和高速性的目标,能够对下位机进行数据处理和监控。本文所述的母性具有通用性强、开发成本低以及模型实现简单等显著优势,因而在工业控制领域中得到了广泛的应用,可作为各类数据通讯设备的首选软件系统。

参考文献

[1] 张立国,窦满峰.基于Modbus协议多通信接口的工控组态软件PMSM控制[J].海特电机,2013,41(7):56-57.

[2] 张成鹤,王平,郑林华等.可编程多协议收发器 MAX3160 的原理与应用[J].国外电子元器件,2002,2(12):62-64.

modbus协议范文第7篇

关键词: μC/Modbus; μC/OS?Ⅱ; STM32F103; 从站

中图分类号: TN919?34; TP368.1 文献标识码: A 文章编号: 1004?373X(2014)24?0090?04

Transplantation of μC/Modbus on STM32 and slave device design

CHEN Wen?li, RAO Yi, GAO Xiang

(Tangshan Kaicheng Electric Control Equipment Group Co., Ltd., Tangshan 063020, China)

Abstract: In order to reduce instrumentation quantity, realize communications protocol compatibility and solve networking difficulty of industrial measurement and control system, a design method of Modbus slave is presented in this paper. The slave device platform is based on STM32F103 processor and μC/OS?II real?time embedded operating system. Modbus RTU slave communication function is realized by porting μC/Modbus protocol stack. The μC/Modbus architecture and workflow are analyzed in this paper. The transplantation and use methods are given to help readers to develop a qualified Modbus slave device quickly.

Keywords: μC/Modbus; μC/OS?II; STM32F103; slave device

随着计算机技术的飞速发展,现代工业测控系统变得越来越复杂,仪表种类繁多且来自不同厂家,因此通信协议的标准化、统一化对整个系统的联网显得尤为重要。Modbus 协议是电子仪器仪表的一种通用语言,协议定义了电子设备能识别和使用的信息结构,广泛用于工业通信领域,其优点是实时性好,可靠性高,适用于小到中等规模的数据传输。

自1979年由莫迪康公司发明以来,逐渐成为工业领域最流行的协议。尽管目前各种工业通信协议不断涌现,但Modbus凭借其简单而精致的结构以及开放性和无会员限制的特点仍得到越来越多的支持。国内企业对Modbus 则更为青睐。几乎所有工业设备、智能仪表等都在使用它作为通信标准,HMI和组态软件也都把它作为所支持的通信协议之一。

μC/Modbus是一个针对嵌入式应用的通用Modbus 协议栈,具有结构清晰简单,响应速度快,占用资源少,单任务多通道等特点。将μC/Modbus移植到 ARM Cortex?M3 处理器上就可以构架出高性价比的嵌入式产品,对于减少开发周期和提高产品的质量等方面有着重要的意义。

1 μC/Modbus的架构及工作流程

μC/Modbus源代码包括有4个文件夹:Source、OS、Ports、Product。其中Source文件夹下的程序是相对独立的、与硬件平台和操作系统无关的部分,也就是说这部分在使用时不需要做任何改动。包含文件:MB.C、MB.H,MB_DEF.H,MB_UTIL.C,MBS_CORE.C 。

以下3个文件文件的程序是需要用户根据使用的软硬件平台和应用需求做相应移植和修改的:

OS???μC/Modbus与操作系统的接口程序。包含文件:MB_OS.C,MB_OS.H。

Ports???μC/Modbus与CPU的接口程序。包含文件:CPU.H,MB_BSP.C。

Product???μC/Modbus的配置文件和用户应用程序。包含文件:MB_CFG.H,MB_DATA.C。各模块之间的关系如图1所示。

μC/Modbus协议栈要求处理器具有一个或多个串行接口、能够容纳Modbus数据帧的RAM空间和一个定时器。对操作系统的要求是能够建立一个接收任务和一个消息事件队列。μC/Modbus采用一个任务处理所有通道接收的数据帧,空闲时任务只是等待消息队列上的事件。当任何通道接收到数据帧时,一个指向收到数据帧通道的指针被到消息队列上,任务收到消息后解析该数据包,并做相应的回复响应。

μC/Modbus为每个通道分配一个MODBUS_CH类型的数据结构,MODBUS_CH数据结构里包括通道号,工作模式,节点地址,通信参数,超时计数,发送缓存,接收缓存等。串口接收中断服务程序会把收到的字节放置在接收缓存中,直到收到结束标志。如果该通道被配置用于Modbus ASCII模式,包的末端为一个换行字符(即0x0A)。如果该通道被配置为Modbus RTU模式,一个数据帧发送结束后至少要有3.5个字节的空闲时间(参见Modbus RTU通讯规范)。本设计采用Modbus RTU模式,需要CPU提供一个定时器,以保证数据帧接收结束超时机制。如图2所示,μC/Modbus为每个通道分配的MODBUS_CH数据结构里都包含一个超时计数器TimeoutCtr。串口初始化时,μC/Modbus会根据所设置的波特率计算出一个超时计数值。每次收到数据,该通道的RTU计数器都会重置为超时计数值。例如一个通道配置为9 600 b/s,那么3.5个字符的传输时间为3 646 μs,假如CPU定时周期为1 ms,那么超时计数值为4,为了提高容错性μC/Modbus会在理论值上多一个定时周期,也就是此例最终的超时计数值等于5。串口每次接收数据都会对计数器重置,在定时中断里,计数值递减。当计数值递减到0时,就会发送一个指向该超时通道的消息指针。μC/Modbus RTU模式下代码工作流程如下:

MB_CommRxTxISR_Handler() ??? MB_BSP.C

串口收到数据,并触发接收中断,中断服务函数MB_CommRxTxISR_Handler调用MB_RxByte()函数进行处理:

MB_RxByte() ??? MB.C

根据通道的工作模式,将接收的数据传递给ASCII或RTU 处理程序。如果是RTU调用 MB_RTU_RxByte()。

MB_RTU_RxByte() ??? MB.C

串口接收到的数据存放到接收缓存RXBUF[]里。由于RTU帧结束是按时间定界的,MB_RTU_RxByte()重置通道RTU定时计数器??,表示接收帧还没有结束。一个完整帧的接收完成信号是通过前面所述的RTU计时超时产生的(参见 MB_RTU_TmrUpdate()???MB.C)。

MB_OS_RxTask() ??? MB_OS.C

μC/Modbus所有通信都是由MB_OS_RxTask()接收任务来处理。任务等待来自RTU定时器的超时消息,表明一个数据帧已接收结束。该消息实际上是一个指向Modbus通道的指针。然后调用MB_RxTask()(MB.C)判断是Master还是Slave工作模式,如果是Slave模式则调用 MBS_RxTask()(MBS_CORE.C)。 MBS_RxTask()根据ASCII或RTU模式调用MBS_ASCII_Task()(MBS_CORE.C)或MBS_RTU_Task()(MBS_CORE.C)做该消息的实际处理:

MBS_RTU_Task() MBS_CORE.C

MBS_RTU_Task()首先判断接收的帧是否完整,然后调用MB_RTU_RxCalcCRC验证数据是否正确。如果是一个有效的帧,则调用MBS_FCxx_Handler()来解析:

MBS_FCxx_Handler() ??? MBS_CORE.C

该函数根据收到的功能码,调用相应的功能码处理函数。并生产回复数据帧存放在TxFrameData[]数组里。

MB_RTU_Tx() ??? MB.C

如果从站需要回复一个数据帧给Modbus主站,这个函数就会被调用。 MB_RTU_Tx()将TxFrameData[]里的数据复制到发送缓存TXBUF[]中。 并是通过调用MB_RTU_TxCalcCRC()计算CRC校验。然后调用MB_Tx()来启动传输。

MB_Tx()?MB.C

这个函数用来将回复的数据帧发送到Modbus主站。将指针TxBufPtr指向TXBUF[]并使能发送完成中断。通过调用MB_TxByte()来发送第一个字节,在发送完成中断里TxBufPtr递增以发送下一个数据,直到全部发送完成:

MB_TxByte()?MB.C

首先检查剩余待发送的字节数TxBufByteCtr,如果TxBufByteCtr等于0则表明消息帧全部发送完成,则关闭发送中断。如果TxBufByteCtr大于0,则调用MB_BSP.C文件里的串口发送函数MB_CommTx1(),将TxBufPtr指向的字节数据发送到串口。TxBufPtr加1以指向下一个数据,TxBufByteCtr减1以记忆剩余待发送的字节数。

2 μC/OS?Ⅱ操作系统接口部分移植

为了建立Modbus接收任务及实现消息机制, μC/Modbus需要在MB_OS.C文件里实现3个函数和一个接收任务。

MB_OS_Init()

MB_OS_RxSignal()

MB_OS_Exit()

MB_OS_RxTask()

首先用户需要定义消息事件变量、任务优先级及任务堆栈大小,其中消息单元数等于Modbus通道数[1]。

static OS_EVENT *MB_OS_RxQ;

static void *MB_OS_RxQTbl[MODBUS_CFG_MAX_CH];

#define MB_OS_CFG_RX_TASK_PRIO 3

#define MB_OS_CFG_RX_TASK_ID MB_OS_CFG_RX_

TASK_PRIO

#define MB_OS_CFG_RX_TASK_STK_SIZE 256

MB_OS_Init ()

用于初始化μC/OS?II操作系统接口,创建一个消息队列和一个等待要接收的数据包的任务。主要代码如下[2]:

MB_OS_RxQ=OSQCreate(&MB_OS_RxQTbl[0], MODBUS_CFG_MAX_CH);

(void)OSTaskCreateExt((void (*)(void *)) MB_OS_RxTask,

(void *) 0,

(OS_STK *)&MB_OS_RxTaskStk[MB_OS_CFG_RX_TASK_STK_SIZE ? 1],

(INT8U ) MB_OS_CFG_RX_TASK_PRIO,

(INT16U ) MB_OS_CFG_RX_TASK_ID,

(OS_STK *)&MB_OS_RxTaskStk[0],

(INT32U) MB_OS_CFG_RX_TASK_STK_SIZE,

(void *) 0,

(INT16U)(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));

MB_OS_RxSignal()

一个数据包接收结束时MB_OS_RxSignal()就会被调用。其主要代码就是向消息队列消息OSQPost(MB_OS_RxQ, (void *)pch);其中参数pch为指向接收到数据包的Modbus通道的数据结构。

MB_OS_Exit()

此函数在Modbus任务终止时被调用,用于删除任务和 消息队列。

OSTaskDel(MB_OS_CFG_RX_TASK_PRIO);

OSQDel(MB_OS_RxQ, OS_DEL_ALWAYS, &err);

MB_OS_RxTask()

这个任务是由MB_OS_Init()创建, 如前面所述该任务只是简单等待消息,并调用MB_RxTask()主要代码如下:

while (DEF_TRUE) {

pch=(MODBUS_CH*)OSQPend(MB_OS_RxQ,0,&err); MB_RxTask(pch); }

μC/Modbus已经提供了基于μC/OS?Ⅱ操作系统的接口程序,如果用户系统使用的是μC/OS?Ⅱ则不需要做任何改动。但μC/Modbus可以在任何实时操作系统下运行,只是需要用户来完成接口程序。

3 STM32F103处理器接口部分移植

μC/Modbus源码Ports文件夹下的程序是与硬件平台关联的。CPU.H用于定义数据类型、处理器堆栈数据字长、堆栈增长方向、任务切换宏和临界区访问处理方式。MB_BSP.C用于操作串口和RTU定时器[3]。

OS_CPU.H 头文件移植到Cortex?M3平台时,需要重新定义包含与编译器无关的数据类型。代码如下:

typedef void CPU_VOID;

typedef unsigned char CPU_CHAR;

typedef unsigned char CPU_BOOLEAN;

typedef unsigned char CPU_INT08U;

typedef signed char CPU_INT08S;

typedef unsigned short CPU_INT16U;

typedef signed short CPU_INT16S;

typedef unsigned int CPU_INT32U;

typedef signed int CPU_INT32S;

typedef float CPU_FP32;

typedef double CPU_FP64;

定义存储模式,Cortex?M3 使用的是小端存储模式。

#define CPU_CFG_ENDIAN_TYPE CPU_ENDIAN_TYPE_LITTLE

定义临界区代码访问涉及到的全局中断开关指令有OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。 在OS_CPU.H 头文件中定义如下[4]:

typedef CPU_INT32U CPU_SR;

#define CPU_CRITICAL_ENTER() {cpu_sr = CPU_SR_Save();}

#define CPU_CRITICAL_EXIT() {CPU_SR_Restore(cpu_sr);}

其中CPU_SR_Save ()和CPU_SR_Restore () 分别对应关中断和开中断处理,需要使用汇编代码实现,代码如下:

CPU_SR_Save

MRS R0, PRIMASK ;保存PRIMASK

CPSID I ;关中断

BX LR

CPU_SR_Restore

MSR PRIMASK, R0 ;恢复PRIMASK

BX LR

MB_BSP.C中实现串口操作、串口初始化、串口配置、串口发送接收中断服务程序和定时中断服务程序,具体实现参考STM32固件库。

MB_CommExit()???关闭使用的所有串行接口

MB_CommPortCfg()???配置串口通信参数

MB_CommRxTxISR_Handler()???串口接收、发送中断服务程序,需要加入如下代码。

if (Rx Interrupt) {

pch?>RxCtr++;

MB_RxByte(pch, c);

}

if (Tx Interrupt) {

pch?>TxCtr++;

MB_TxByte(pch);

}

MB_CommRxIntDis()???使能串口接收中断。

MB_CommRxIntEn()???禁止串口接收中断。

MB_CommTx1()???发送一个字节数据。

MB_CommTxIntDis()???禁止串口发送中断。

MB_CommTxIntEn()???使能串口发送中断。

MB_RTU_TmrInit()???初始化RTU定时器。

MB_RTU_TmrExit()???停用RTU定时器。

MB_RTU_TmrISR_Handler()???RTU 定时中断服务程序。需要加入如下代码。

MB_RTU_TmrCtr++;

MB_RTU_TmrUpdate() ;

4 μC/ Modbus的使用及应用程序设计

移植部分的代码编写完成后,就可以根据自己的应用需求配置μC/Modbus和设计应用程序。

在MB_CFG.H文件中配置参数。

定义设备为Modbus从站设备

#define MODBUS_CFG_SLAVE_EN DEF_ENABLED #define MODBUS_CFG_MASTER_EN DEF_DISABLED 设置从站支持Modbus RTU模式

#define MODBUS_CFG_ASCII_EN DEF_DISABLED #define MODBUS_CFG_RTU_EN DEF_ENABLED

设置通道数

#define MODBUS_CFG_MAX_CH 1

设置串口发送接收缓存大小

#define MODBUS_CFG_BUF_SIZE 255

设置禁用浮点数

#define MODBUS_CFG_FP_EN DEF_DISABLED

设置设备支持的命令码

#define MODBUS_CFG_FC01_EN DEF_ENABLED

#define MODBUS_CFG_FC02_EN DEF_ENABLED

#define MODBUS_CFG_FC03_EN DEF_ENABLED

#define MODBUS_CFG_FC04_EN DEF_ENABLED

#define MODBUS_CFG_FC05_EN DEF_ENABLED

#define MODBUS_CFG_FC06_EN DEF_ENABLED

#define MODBUS_CFG_FC15_EN DEF_ENABLED

#define MODBUS_CFG_FC16_EN DEF_ENABLED

根据所支持的命令码在MB_DATA.C文件中实现以下函数:

MB_CoilRd()用于响应01功能码, 读一个线圈的值。

MB_CoilWr()用于响应05、15功能码,写一个线圈的值。

MB_DIRd()用于响应02功能码,读一个离散输入的值。

MB_InRegRd()用于响应04功能码。读一个输入寄存器的值。

MB_HoldingRegRd()用于响应03功能码,读取一个保持寄存器的值。

MB_HoldingRegWr()用于响应06、16功能码,写一个保持寄存器的值。

最后用户就可以在main函数里或在用户任务里启动μC/ Modbus。首先调用MB_Init()初始化μC/Modbus,然后通过MB_CfgCh()配置Modbus通道。一旦通道配置完成,就可以与Modbus主站通信而不需要用户参与。例如设从站设备具有一个Modbus RTU端口、9 600 b/s、从站地址为1。代码如下[5]:

MB_Init(1000); //初始化 μC/Modbus,时钟频率 1 000 Hz

MB_CfgCh ( 1, // Modbus通道号

MODBUS_SLAVE, // 从设备

0,

MODBUS_MODE_RTU, //Modbus RTU模式

MODBUS_USARTPort, // UART串口号

9600, //波特率

8, //8个数据位

MODBUS_PARITY_NONE , //无校验

1, //1个停止位

MODBUS_WR_EN); //允许写操作

5 结 语

本文主要论述了μC/Modbus在Cortex?M3内核处理器上的移植过程并给出关键代码,移植后的μC/Modbus能够稳定运行于STM32F103处理器上。本移植能通用于所有Cortex?M3处理器和μC/OS?Ⅱ操作系统平台上,对于将μC/Modbus移植到其他体系平台上同样具有参考作用。实验表明μC/Modbus 是一款简单高效移植方便的标准Modbus协议栈。读者在了解μC/Modbus工作原理及移植过程之后,也可进一步做优化操作,比如利用STM32的串口DMA功能取代中断方式,以进一步降低CPU的开销。

参考文献

[1] LABROSSE J J. μC/OS?Ⅱ:源码公开的实时嵌入式操作系统[M].绍贝贝,译.北京:中国电力出版社,2001.

[2] YIU J. Cortex?M3权威指南[M].宋岩,译.北京:清华大学出版社,2008.

[3] 张桂,金国强,李辉.基于ARM平台Modbus RTU协议的研究与实现[J].电力科学与工程,2011(1):23?27.

[4] 王晓鸣.实时操作系统μC/OS?Ⅱ在ARM上的移植[J].机电一体化,2007(1):56?58.

modbus协议范文第8篇

关键词:红外温度传感器;Modbus协议;433MHz无线通讯

引言

红外测温是根据被测物体的红外辐射能量来确定物体的温度,不与被测物体接触,温度分辨率高、响应速度快、测温范围广、稳定性好等特点,近年来常被应用于高精度无接触测量,在智能家居、智能电网、汽车电子等领域都有广泛的应用。

本文设计的传感器具体应用场景是配电室,用于测量线缆温度。本设计采用MLX90614BAA红外温度传感器,具有非接触,体积小、精度高,成本低等优点。传感器采集的数据通过工业现场总线协议――Modbus协议进行传输,并采用433MHz无线模块进行数据通信。无线通信方式,避免了有线通信电缆安装的不便,选用433MHz频段具有较远的通信距离和穿墙能力,适用于配电室这一特定应用场景。

1 无线频段的选取

结合传感器的具体应用场景的实际使用需要,综合考虑耗电量、传输距离、数据速率、安全性和成本等因素,本设计的无线通信频段选用433MHz。由于配电室环境复杂,设备装置多,数据传输的路径弯曲程度大。在相同的弯曲度路径情况下,433MHz的无线射频衰减率为:0.577dB/m;915Mhz的无线射频衰减率为:0.676dB/m;2.4G的无线射频衰减率为0.761dB/m。由此可见:无线设备工作在433MHz频段更有利于在弯曲路径时的通信。在芯片的选型上遵循低功耗,低成本,微型化的原则,因此本文中设计的传感器采用CC1101芯片。

2 硬件设计

无线红外温度传感器的硬件设计包含电源供电电路,数据采集电路,无线数据传输模块电路几个部分。

电源供电部分主要是把3.7V电池电压转换为3.3V,作为各个部分的供电电源,以及5V电源给电池充电两个部分,使用Maxim公司的MAX8881作为3.7V转3.3V的降压芯片,MAX1555作为5VDC电源给电池充电的芯片。

数据采集部分采用Melesix公司的MLX90614红外温度传感器。此款传感器环境温度范围为-40°~+125°,物理温度范围-70°~+380°,电源电压3.3v。MLX90614 是由内部状态机控制物体温度和环境温度的测量和计算,进行温度后处理,并将结果通过 PWM 或是SMBus模式输出,本设计选用SMBus模式。

433MHz无线射频模块采用的STM32F103RBT6作为主控芯片,CC1101作为无线射频芯片。主控模块通过SPI总线通信接口拖带无线射频通信模块,可以实现对无线通信模块的寄存器的读写,从而完成对模块通信参数的配置,进一步控制模块对无线数据的收发。

3 软件设计

软件设计部分包含温度数据的采集、处理,无线数据收发和Modbus通信协议几个部分。

3.1 数据采集与处理

红外温度传感器采集温度数据传输时序如下图所示,START位定义为当SCL为高时,SDA线为从高到低的转换。STOP位定义为当SCL为高时,SDA为从低到高的转换。每个字节包括8位,在总线上传送的每个字节必须跟随一个确认位,和确认关联时钟脉冲是由主控器产生的。读取数据是以字节为单位进行的。每次发送一个字节,然后就判断对方是否有应答,如果有应答,就接着发送下一个字节;如果没有应答,多次重发该字节,直到有应答,就接着发送下一个字节,如果多次重发后,仍然没有应答,就结束。接收数据时,每次接收一个字节,然后向对方发送一个应答信号,然后就可以继续接收下一个字节。

本文中设计的无线红外温度传感器上电初始化后,等待上位机通过集中器无线模块发送的数据采集命令,再对数据进行采集,并将采集到的数据按照Modbus协议处理后,通过无线模块传输到集中器中。

3.2 Modbus通信协议

Modbus通信协议是一种工业现场通用协议,主要规定了应用层报文传输的格式,使得不同生产厂商的设备可以连成网络,集中监控。Modbus协议可分为在TCP/IP上的实现与串行链路上的实现,即Modbus-TCP和Modbus-RTU。传感器内部实现的是Modbus-RTU协议。Modbus协议使用的是客户机/服务器(C/S)的通信模式,主站向从站发送请求的模式有两种:单播和广播,本文实现的是单播的模式。

Modbus通用帧即ADU应用数据单元分为附加地址、功能码、数据和差错校验4个部分,其中功能码和数据部分为PDU协议数据单元。传感器接收到上层rtu帧命令后,首先进行从站地址和差错校验码的判断,若不正确直接丢弃命令帧,若正确则进行rtu帧解包获取命令并进行温度采集,数据采集后进行rtu帧封包,最终通过无线模块与上层设备进行数据通信。

4 测试结果

在排除433MHz频段其他设备干扰的情况下,对无线红外温度传感器进行射频性能的测试,每次发送1000个数据包,保证丢包率为0%的情况下,有效直线传输距离为120米,穿透性为两层楼。

无线红外温度传感器精度的测试,在相同环境中,使用市场上购买的手持红外温度仪与本文中设计的传感器进行温度监测数据的对比,温度值的误差保持在±0.5°C以内。

5 结束语

本文中设计了一种使用Modbus通信协议并通过433MHz频段无线通信的红外温度传感器,介绍了频段及射频芯片选择的原则,给出了传感器的硬件及软件设计方案。较详尽的介绍了MLX90614红外温度传感器的数据采集时序及原理,以及本设计中应用的Modbus协议。最后对传感器设备进行了射频测试及精度测试,测试结果表明,该传感器具有非接触性,高精度,通信距离远,穿墙能力强等优势。

参考文献

[1]Melexis公司.MLX90614红外温度计数据表.

[2]沙春芳.红外温度计MLX90614及其应用[J].现代电子技术,2007年22期.