`
isiqi
  • 浏览: 16493965 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多

近年来随着工控领域自动化水平的大幅进步,很多厂、矿企业原有的控制系统陆续开始各种软硬件的升级和改造。改造过程中,数据通讯的公道、可靠关系到 现场一系列大型设备的安全。由于整个工程往往由不同的单位分别完成,各部分之间的整合性必须得到保证,因此产业控制系统中常使用标准的协议进行接口通讯。


  Modbus协议是一种产业通讯和分布式控制系统协议,由MODICON公司出品,现已被众多的硬件生产厂商所支持并广泛应用于产业控制领域。 DCS即集散控制系统,是以微处理器为核心的操纵显示集中、控制功能分散的产业控制系统。安全可靠的性能和成熟的使用技术使得DCS广泛地应用于电力、冶 金、石油化工、造纸、制药等行业。


  陕西某电厂改扩建工程包括两部分系统:DCS,远程I/O数据采集系统。这两部分之间采用Modbus协议进行接口串行通讯。


2Modbus通讯协议


  2.1协议简介


  Modbus是一种主从网络,答应一个主机(Master)和一个或多个从机(Slave)通讯,支持两种有效的传送方 式:RTU(RemoteTerminalUnit,远程终端装置)和ASCII(美国标准信息交换码)。两种方式的命令格式是相同的,采用何种 方式取决于对通讯速度的要求。要求速度快的要用RTU方式,而对通讯速度要求不高的可用ASCⅡ码方式。协议的内容主要包括寄存器读写、开关量I/O等命 令的格式。


  本项目工程通讯要求采用RTU方式,以下先容、分析的命令格式均为标准的Modbus协议格式,所用的数据示例均引自工程中的应用实例。


  2.2主、从机命令格式


  主机和从机之间采用查询与应答方式进行通讯,每一种查询命令报文都对应着一种应答报文。主机发出的查询命令报文格式如表1所示:


  表1主机查询命令报文格式


  地址码“02”表示主机要求查询02号从机,功能码“04”表示主机要求读保持寄存器操纵,起始数据“0000”表示从第1个数据开始读,数据长度“0040”表示要求读取64个模拟量数据。


  CRC校验码:即循环冗余校验码,当本机计算得的CRC码与接收到的CRC码一致时方以为命令校验正确并进行操纵,否则返回出错信息或放弃此命令。具体参见下文2.3。


  从机接收到表1所示命令时的正确信息应答报文格式如表2所示:


  表2从机应答命令报文格式


  表中“02、04”如前所述,“80”为从机发送数据的字节个数,即数据共发送了128个字节(64个数据);“0010…013A”为第1~64个数据的高、低字节值。


  从机应答命令中的地址码、功能码必须与主机查询命令相同;命令中的模拟量数据必须按高位字节在前、低位字节在后的顺序放置,而CRC码与此相反,是低位字节在前、高位字节在后。


  假如发生错误或异常,从机将返回主机出错命令,格式如表3所示:


  表3从机返回出错命令报文格式


  “84”是与主机查询命令中功能码“04”相对应的出错功能码,出错码“03”表明主机查询命令中的“数据长度”项有错,例如超出了最大数据量等。


  在其他工程应用中,Modbus协议的各种功能码、出错码的含义及其具体选择、使用可参见参考文献[1]。


  2.3错误检测方法


  标准的Modbus协议串行通讯网络采用两种错误检测方法。一是奇偶校验,对每个字符都可用;二是帧检测(CRC或LRC),应用于整个命令报文。


  RTU方式下帧检测采用的是CRC校验,方法是先调进一值是全“1”的16位寄存器,然后调用一过程对命令中连续的8位字节各当前寄存器中的值进行处理。终极寄存器中的值,就是命令字符串中所有的字节都执行之后的CRC校验码值。


  下面给出VisualC++6.0下CRC校验码计算函数:


  WORDCRC_Calc(PBYTEbuf,UINTnum)


  {


  UINTi,j;


  WORDtemp,crc=0xFFFF;


  for(i=0;i<num;i++){


  temp=buf[i]&0x00FF;


  crc︿=temp;


  for(j=0;j<8;j++){


  if(crc&0x0001)


  {crc>>=1;crc︿=0xA001;}


  elsecrc>>=1;


  }


  }


  returncrc;


  }


  计算得的CRC校验码添加到命令中时,必须按低位字节在前、高位字节在后的顺序放置。例如,对表1所示的主机查询命令调用计算函数得到其CRC码为C9F1,则命令中最后两个字节是F1、C9。


3硬件构架


  系统中通讯网络采用点对点方式,即网络中只有一台主机和一台从机。将一台产业PC机模拟PLC作为从机(远程I/O数据采集系统),采用RS-485 信号与DCS主机进行串口通讯。通讯的模拟量参数为#1机组217点、#2机组217点和公用部分48点,共计三个数据块482点。


  系统的硬件实现如图1所示:


图1系统硬件接口框图


  主机、从机之间装有一对台湾研华公司的ADAM4520转换器,用于完成RS-232与RS-485信号的转换,实现长间隔的通讯。另外,此转换器还需要+24V直流电源。


4软件设计


  4.1软件功能


  主机通讯子程序已内嵌在DCS系统中,以下先容从机通讯子程序的设计和开发。


  从机操纵系统为Win2000,程序设计平台为VC++6.0,通讯程序采用Win32的API函数读、写串口。


  程序的界面设计主要包括:一个复选框,用于选择通讯的数据块;一系列下拉列表,用于设置通讯的串口参数;网络状态显示控件。复选框的内容是#1、#2 及公用部分三个数据块,下拉列表主要包括设定波特率(9600bps)、起始位(1位)、数据位(7位)、奇偶校验位(1位)、停止位(1位),有无奇偶 检验(无)等,设置的内容均可以调整。


  程序的功能设计请参见通讯子程序以及解析应答模块的流程图,分别如图2、3所示:


图2从机通讯子程序流程图


  从机通讯子程序采取了多线程的工作方式。程序首先设置与DCS相同的串口参数以进行串口初始化,并按照DCS的要求选定通讯的数据块,之后创建一个侦 听串口事件线程CommWatchThread(),由此线程监测网络状态及主机发送来的命令消息等各种串口事件,再调用相应的函数对事件进行处理。


图3从机解析应答模块流程图


  解析应答模块共有两个函数:RecvData()、SendData()。当RecvData()函数成功读取到主机的查询命令后,首先对数据 量和校验码进行校验,假如有错,则由SendData()向主机返回相应的出错命令报文;假如正确,则由SendData()按照命令中要求的起始数 据和数据量读取数据库,预备应答命令报文,并调用CRC计算函数计算出CRC码添加到命令的最后两个字节中,发送给主机。


  由于通讯系统网络采用点对点方式且只进行模拟量数据的通讯,所以从机程序的解析、应答模块在对命令进行校验的时候只进行了数据量和CRC校验,省略了地址码和功能码等的校验,以节省时间,进步通讯的效率。


  4.2软件特点


  1、采用VisualC++面向对象的设计方法编写通讯软件程序,模拟PLC通讯的原理在产业PC机上实现基于Modbus协议的串行通讯,操纵方便。


  2、采用多线程技术和消息驱动的工作方式,可以充分利用计算机系统的资源,避免瓶颈的产生,达到将系统进行公道组织的目的,有效地避免了网络数据的冲突,使得数据通讯安全可靠。


5结束语


  本文先容了使用产业PC机通过Modbus协议实现DCS与远程I/O系统进行串口数据通讯的过程,采用VC开发的通讯软件已成功应用于陕西某电厂的 改造工程,这种通讯方式灵活方便,可靠性高,完全达到了预期的要求。了解Modbus协议是我们把握PLC、智能仪表、单片机等通讯机制的重要内容,对过 程监控、数据采集等系统中使用PC机进行串行通讯的软件开发本文不失为具有普遍的意义。

分享到:
评论

相关推荐

    modbus 调试软件,包括modbus poll和modbus slave

    Modbus是一种广泛应用于工业自动化领域的通信协议,它允许设备之间进行简单、有效的数据交换。本文将详细介绍Modbus调试软件——Modbus Poll和Modbus Slave,以及它们在IT环境中的应用。 首先,我们要理解Modbus的...

    c51_Freemodbus.rar_c51 freemodbus_free modbus C51_freemodbus C51

    《深入理解C51 FreeMODBUS:构建嵌入式Modbus通信系统》 在工业自动化领域,Modbus协议因其简单、可靠的特点而被广泛应用。FreeMODBUS是一个由奥地利开发者编写的开源项目,专为嵌入式系统设计,实现了对Modbus协议...

    Modbus协议中文版-国标_modbus_modbusRTU_modbusTCP_

    **Modbus协议详解** Modbus协议是一种广泛应用的通信协议,主要设计用于工业设备之间的数据交换。这个协议由Modicon公司(现在的施耐德电气)在1979年提出,现在已经成为了工业自动化领域的开放标准。它支持多种...

    ModbusTcpServer.zip_modbus_modbus_tcp_modbus服务_modbus服务器_tcp ser

    Modbus是一种广泛应用于工业自动化领域的通信协议,它允许设备之间进行简单、有效的数据交换。Modbus TCP是Modbus协议的网络版本,通过TCP/IP协议栈在以太网上运行,极大地扩展了Modbus的适用范围。这个名为"Modbus...

    ModBus-Master.rar_MODBUS STM32_MODBUS STM32 master_Modbus 主机 stm

    标题中的“ModBus-Master.rar_MODBUS STM32_MODBUS STM32 master_Modbus 主机 stm”表明这是一个关于STM32微控制器实现Modbus主站功能的资源包。Modbus是一种广泛使用的通信协议,尤其在工业自动化领域,用于设备间...

    ModBus开源类库 (1)_MODBUS库_modbus_modbustcpip_modbustcp类库_modbusTCP_

    这个开源类库,"MODBUS库_modbus_modbustcpip_modbustcp类库_modbusTCP_",是针对ModBus协议的实现,尤其关注通过TCP/IP进行的通信,非常适合在PLC(可编程逻辑控制器)之间建立连接。 首先,我们要理解ModBus的...

    Modbus SlaveSeteup64Bit Modbus软件,Modbus学习

    Modbus SlaveSeteup64Bit Modbus软件,Modbus学习 Modbus Slave: Modbus从设备仿真器,可以仿真32个从设备/地址域。每个接口都提供了对EXCEL报表的OLE自动化支持。主要用来模拟Modbus从站设备,接收主站的命令包,回...

    MODBUS-TCP.rar_TCP通信标准_modbus TCP_modbus 标准_modbus-tcp_modbus标准

    MODBUS-TCP是一种广泛应用于工业自动化领域的通信协议,它基于标准的TCP/IP协议栈,将MODBUS协议与网络层的TCP(传输控制协议)相结合,实现了设备间的远程通信。MODBUS-TCP允许不同制造商的设备在以太网或任何其他...

    Modbus Poll和Modbus Slave 工程软件

    Modbus协议是一种广泛应用的工业通信协议,主要用于设备间的通信,特别是在PLC(可编程逻辑控制器)和各种自动化设备之间。这个协议基于简单的主从架构,其中一台设备作为主设备发起请求,其他设备作为从设备响应...

    modbus调式助手,Modbus调试工具ModBusPoll+Slave

    Modbus是一种广泛应用于工业自动化领域的通信协议,它允许设备之间进行简单、有效的数据交换。ModBusPoll和ModBusSlave是两个在Modbus调试过程中常用的工具。 ModBusPoll是一款功能强大的Modbus主站测试工具,主要...

    modbus-STM32F103.rar_MODBUS STM32_STM32F103 modbus_modbus 读 stm

    标题中的“modbus-STM32F103.rar_MODBUS STM32_STM32F103 modbus_modbus 读 stm”表明这是一个关于使用STM32F103微控制器实现Modbus通信协议的项目,主要关注的是从站功能,并且涉及到了数据的读取操作。这个项目...

    Modbus TCP Client_c#modbus_tcp_modbusTCP_源码

    MODBUS TCP Client_c#modbus_tcp_modbusTCP_源码是一个关于使用C#编程语言实现MODBUS TCP协议的客户端程序的示例项目。MODBUS是一种广泛应用于工业自动化领域的通信协议,它允许设备之间进行简单的数据交换。在C#...

    STM32_MODBUS.zip_modbus stm32_modbus-stm32_modbus程序_stm32 modb

    STM32_MODBUS.zip是一个关于STM32微控制器与Modbus通信协议的资源包,包含了STM32 MODBUS程序的设计及相关的源代码。这个压缩包是为那些希望在STM32微控制器上实现Modbus通信功能的工程师们准备的。STM32系列是意法...

    Modbus Slave Modbus Poll

    "Modbus Slave" 和 "Modbus Poll" 是两个与Modbus相关的关键工具,它们在Modbus网络调试和测试中起着重要作用。 "Modbus Slave" 是一个软件模拟器,它能够模仿Modbus网络中的从设备(Slave设备)。在实际应用中,从...

    51单片机modbus.rar_485_51单片机modbud_51;modbus_modbus 单片机_单片机 modbus

    《51单片机Modbus通信详解》 51单片机是电子工程领域中广泛使用的微控制器,因其丰富的资源和较低的成本而受到广大开发者的青睐。在许多工业自动化、物联网(IoT)以及数据传输应用中,51单片机常常需要与其它设备...

    C#modbus rtu绝对好用,绝对能用.rar_C# ModbusRtu 库_C#Modbus通信_C#modbusrtu_

    在IT行业中,Modbus协议是一种广泛应用于工业自动化领域的通信协议,尤其在PLC(可编程逻辑控制器)和其他设备之间的数据交换中。C#是Microsoft开发的一种面向对象的编程语言,适用于构建各种应用程序,包括与硬件...

    使用ModbusSlave和ModbusPoll进行MODBUSTCP通信测试方法.docx

    在工业自动化领域,MODBUS TCP通信是一种广泛应用的通信协议,它允许不同设备通过TCP/IP网络进行数据交换。本文将详细讲解如何使用Modbus Slave和Modbus Poll软件进行MODBUS TCP通信的仿真测试。 首先,我们需要...

    VB.NET2010_MODBUS.zip_VB MODBUS_modbus vb_vb modbus_vb.net RS4

    在VB.NET 2010环境下,MODBUS通信是一个常用的技术,用于设备间的数据交换,特别是在工业自动化领域。本项目是作者初次尝试使用VB.NET 2010实现RS485 MODBUS通信,这对于初学者或者需要进行MODBUS协议编程的开发者来...

    modbus-RTU.rar_MODBUS-RTU_Modbus RTU c#_modbus C库_rtu_rtu protoc

    MODBUS-RTU是一种广泛应用的工业通信协议,它基于串行通信,被广泛用于设备间的简单数据交换,尤其是在PLC(可编程逻辑控制器)和其他自动化设备之间。此压缩包文件"modbus-RTU.rar"包含的是一个针对MODBUS-RTU协议...

    灵育Modbus_Master.zip_Stm32基于Modbus协议传输_modbus master_modbus 灵育_st

    在STM32上实现Modbus主站(Master)功能,可以使得STM32设备能够控制并读取Modbus从站(Slave)的数据。 Modbus协议主要有两种传输模式:ASCII(美国标准代码交换信息)和RTU(远程终端单元)。RTU模式因为其效率高...

Global site tag (gtag.js) - Google Analytics