首页 Modbus通信通讯教程(详细)

Modbus通信通讯教程(详细)

举报
开通vip

Modbus通信通讯教程(详细)第一章:控制设备通信慨况1慨念说明于自动控制系统的各种设备,相互之间的通信及资料交换是非常重要的基本功能之一。早期通信方式是使用串行式硬件架构,然后定义通信步骤及资料格式等基本通信规格,也就是通信协议(CommunicationProtocol)。外部计算机依据此通信协议即可与该自控设备读取或写入资料。也可以看做读取该控制设备所控制的结果,写入一些控制命令要求该控制设备执行所指定的功能。PLC(ProgrammableLogicalController)是自动控制系统的核心设备,肩负着主要的控制功能,所以PLC对外...

Modbus通信通讯教程(详细)
第一章:控制设备通信慨况1慨念说明于自动控制系统的各种设备,相互之间的通信及资料交换是非常重要的基本功能之一。早期通信方式是使用串行式硬件架构,然后定义通信步骤及资料格式等基本通信规格,也就是通信 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 (CommunicationProtocol)。外部计算机依据此通信协议即可与该自控设备读取或写入资料。也可以看做读取该控制设备所控制的结果,写入一些控制命令要求该控制设备执行所指定的功能。PLC(ProgrammableLogicalController)是自动控制系统的核心设备,肩负着主要的控制功能,所以PLC对外通信能力也是格外的重要。各种厂牌的PLC都会制定自有的通信协议接口 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 。其中Modbus通信协议是ModiconPLC所定义的通信协议。因为Modicon是最早开发出PLC的设备,故其所制定的通信协议,也广泛被其它厂商所接受,无形中成为自控界主流的通信协议。2通信硬件两种设备之间的通信及资料交换处理,首先经由通信硬件传送信号,此基本模式如下图所示:图(1-1):通信硬件系统基本模式两端设备都配置「接/发收器」将数据转换成电器信号往外传送或接收外部传来的信号。以信号的传输处理来看,早期的系统当然遵循电信系统的规格最为方便,所以RS232C的规格,基本上是电信系统的规格,也就是非同步串行式。此规格只是提供一对一的通信,而无法一对多或者多对多的通信,所以后来才发展出同步串行式及Ethernet网络通信。以下各点试着以简单方式,说明通信硬件运作的基本慨念。因为本书是以软件 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 者为主要对象,但是对于硬件必须有一个清晰的认识,才能设计完美的通信应用系统。接/发送器传送媒体接/发送器控制设备计算机设备2.1异步串行式通信方式异步串行式传输信号,基本上是一次一个基本单位,包含起始位(StartBit)、资料位(DataBit)、同位位(ParityBit)及停止位(StopBit)等组成。也就是资料的每一个字符(Byte)都整理成上述的格式,然后传送出去。于硬设备上传送信号时必须做到下列三件事:z位(Bit)同步:认出每个位的开始及结束。z字符(Byte)的同步:认出每个字符的开始及结束。www.PLCworld.cnz一个段落或讯息的同步:认出大单元数据的开头。图(1-2):信号传送示意图解决同步问题的一个 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 是:每次传送一小段的位后,马上寻求同步,最早使用的方法是「起止法(Start-Stop)」或称做「异步传输法」。也就是通信双方的「接/发送器」随时检查起始位,然后才认定此字符的资料已经进来,再检查停止位后才认定此字符的资料结束,最后再依据同步位作资料的检查以排除噪声的干扰。当每次有字符传送时,其信号是位于一个闲置状态,为二进制的1,也就是有电压及电流的存在。当字符的开头的起始位,其值为二进制的0,所以当「接/发送器」可以检查到起始位,然后接下来为正式资料位、同位位等,最后检查停止位后,该字符(Byte)接收正式完成。停止位与闲置都为二进制的1,所以发送器会不断地发送停止位直到准备发送下一个字符为止。由以上的叙述可以明白有几个通信硬件的系数非常重要,必须于通信前将双方的系数设定为一样,才能于位传送及接收间,依据一样的规格区分每个位的状态为二进制的0或1。第一字符1111001起始位第二字符闲置状态每个字符按顺序传送之同步位停止位z传送速度(BaudRate):以此速度切割一个位电位的维持时间,然后断定为二进制值0或1。z同位位(Parity):None、Odd、Even等三种检测错误位方式。z资料位数(DataBits):所要传送的一个字符内的位数5、6、7、8等四种。z停止位(StopBits):规定最小长度有1、1.5、2等位长度三种。也就是 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示超过此长度就是接到停止位。举例说明:如果设定停止位为1位、资料位为7位、同位位为None(也就是不做同位检查)、传送速度9600bps等通信系数。传送ABC三个英文字母的ASCIICode,首先起始位(0)激活以下8个单位的时序,这8个单位包含7个位的ASCII码,以及1个停止位。在闲置状态时,接收器利用www.PLCworld.cn观察从1变成0的这种转变来作为接收字符的开始,然后去取样输入的信号,每一个位一个区间,共7个位代表一个ASCII码。这种设计的时序简单且便宜,但是每一字符须有两个或三个的虚耗位,整体的通信效率较差,所以就有同步串行通信的发展,以克服此问题。2.2同步串行式通信方式这种模式中,字符或位的传输段落没有起始及终止位,而且每一种位的发出及到达的确切时间都可以预见,也就是为了防止发送器及接收器之间的时间偏移,所以必须采用某种方法的同步。可能的方法之一就是提供单独一个时钟线,否则就必须将同步时钟的信息插在资料信号当中。除了基本的同步传输外,还需要另一个阶层的同步,使得接收器能够决定一个数据段落的开头及结尾。所以每一个段落的开头,须有一个开头序幕的位型式,最后亦以结尾位型式作为结束。同时于数据链中还要包含一些控制信息且有一定的格式,用来做为接收或传送的真正资料的控制用。故所制定格式的不同,代表不同通信规格接口,一般常用的有SDLC,HDLC等,在此不做此格式的细部说明,不过以简单方式来叙述一些基本慨念。图(1-3):字符取向同步传输示意图图(1-4):位取向同步传输示意图在字符取向的传输中,资料的段落是以一个字符(一般为8位的字符)来处理。同步字符通常为SYN(16进位的0x16),用来告知接收器这是一个段落开头的信号。然后于控制字符中规定将整个传送资料的长度存入,如此接收器就读进所指示的长度,就是实际资料部份。再等待另一个SYN,以开始另一个资料的读取。另外一个方式为结尾为另一个型式位,以作为数据段落结束。以位取向的传输,数据段落是当作一序列的位来处理。有一个特殊位型式8位的旗号作为资料开头,再结尾也采用同样旗号。接收器等待旗号SYNSYN……1个或多个同步字符控制字符数据字符控制字符FF8位旗号控制域数据域控制域8位旗号www.PLCworld.cn的到来代表传输的开始,随后跟着某些数量的控制栏,然后是可变长度的数据域,然后又再度是控制栏,最后重复开头旗号作为结尾。这种方法与字符取向方法的差别,决定于资料格式的细节以及控制字段的定义。对于可订定大小的数据段落,同步传输要比异步传输有更高的效率,一般异步传输至少超过20%的虚耗位。以HDLC来看,此为位取向设计中被广泛使用的一种,包含48个位的控制信息(包含旗号),因此对于一个1000位的讯息,其虚耗只有48/1048*100%=4.6%。Modbus是使用异步传输的方式,但是由于速度较慢,应用上有其限制,尤其当两台PLC要互相交换资料,其传输资料量大,异步方式已经无法满足整体系统反应时间的要求。所以就有ModbusPlus出现,使用同步传输的技术,但是资料格式与Modbus一样。对于软件设计者来看,是相同的设计方式,所以下面章节以Modbus说明为主。2.3Ethernet网络通信方式Ethernet是一种共享式总线技术,支持广播(Broadcast)所有的网络上主机都可以接到传输资料,因此一次可以传送一个封包资料至多台主机。当主机有封包资料要传送时,会先监听网络是否有资料正在传送,如果无就开始传送。每一个Ethernet硬件都有唯一的48位的地址。EthernetFrame为硬件间的连接层,其长度可变,最小64位,最大1518字节(包含标头、资料及CRCCheck等),如下图所示:图(1-5):EthernetFrameformat由目的地址,可使得网络硬件判定取入传给它的封包资料,由来源地址可以得知哪一个网址传来的资料。Frametype可区分何种型式的数据,例如:TCP、UDP….等等。以CRC侦测传输的资料错误,发送端先计算CRC值写入Frame内,接收端再重新计算一次比对CRC是否相同。由以上的简单描述,可知基本的通信慨念,其实与串行式一样的。EthernetIPAddress等于串行式的StationNo.。CRC检查用法一至。串行式资料Frame依设计自行规定,Ethernet则为标准规格。于Ethernet以上各点的处理,已经由网络硬件或操作系统处理完成。由应用系统设计者观点来看,只要依照操作系统所提供的API,就很容易将网络资料取入或传出。例如:TCP/IP通信协议,只要使用socket方式,就可以达到此目的,而且无论于Windows、Unix、DOS等操作系统,其设计方式都一样,反而比串行式通信容易设计。8字节6字节6字节2字节46-1500字节CRCDataFrametype来源地址目的地址前置4字节www.PLCworld.cn以Modbus/TCP的通信协议资料格式,除了再加上前面6byte做网络用资料,其后面的资料与Modbus/232完全一样,设计TCP应用程序,反而依照socket方式就可以收送资料,不像RS232应用程序必须处理所有步骤,例如:CRC计算,Frame自行规定,每一位都要处理….等等工作。3通信协议:通信协议(CommunicationProtocol)是为资料交换所制定的一种接口标准及程序。外部计算机的通信软件只要依据此接口标准设计,就可以达到双方互相通信的目的。通信协议除了规定所要使用的通信硬设备外,就是规定两种标准:一是资料互相传送的程序步骤,也就是规定开始通信、通信中及结束通信等通信流程中所要遵循的步骤。好象人们相互交谈时必须先确定当一方要求被接受处理后,再响应所处理的结果。以电话系统为比喻,可以将通信硬件视为电话设备,通讯协议为双方所用的语言,双方所谈论的语言内容就是通信协议内的资料格式。3.1主要PLC厂牌的通信协议各种厂牌的PLC因为所定义的资料内容格式都有所不同,所以都制定自有厂牌使用的通信协议,兹将主要通信协议列于下表:PLC通信协议硬件规格ModiconModbus/232异步串行ModbusPlus同步串行Modbus/TCPEthernetTCP/IPAllen-BrandleyDF1异步串行EtherentIPEthernetSimatic(Siemens)Profibus异步串行及EthernetMPI异步串行SimaticTIPLCTaskCode异步串行GESNP异步串行及EthernetMitsubishiMelsecAPC-Link异步串行及EthernetMitsubishiFX2PC-Link异步串行OMRONHostLink异步串行FINSEthernetKoyoU-01DM/G-01DM异步串行图(1-6):主要厂牌通信协议表3.2Modbus通信协议的由来Modbus通信协议,是ModiconPLC所制定的资料交换通信接口标准,于1979年首先制定串行通信标准(含Modbus异步及ModbusPlus同步),于1997年制定网络通信标准(Modbus/TCP)。是属于OSI所定义的通信层www.PLCworld.cn次的第七层应用层次(ApplicationLayer)。是为Client/Server或称为Master/Slave型式的通信协议。由于Modbus的通信协议简单容易设计,结果广被许多控制设备或外围信号设备所采用,因此无形中成为自控业界的标准。Modbus异步的硬件架构简单,被使用的比率最高。ModbusPlus同步的协议可以提供高速的通信速度,适合主控制设备间大量资料交换。Modbus/TCP则是因应Ethernet网络的架构,近年来被大量使用的通信协议,也因为其速度及资料传送量远比ModbusPlus更快更大,所以已渐渐取代其功能。本书内容就Modbus及Modbus/TCP两种通信协议,说明其架构及应用例。www.PLCworld.cn第二章:Modbus通信协议说明Modbus通信协议基本上是遵循MasterandSlave的通信步骤,有一方扮演Master角色采取主动询问方式,送出QueryMessage给Slave方,然后由Slave方依据接到的QueryMessage内容准备ResponseMessage回传给Master。即使目前硬件通信已经可以达到双方互相主动通信的能力,但是于Modbus通信协议的规定,必须一方为Master,另一方为Slave不能互换角色。一般使用上,监控系统(HMI)都为Master,PLC、电表、仪表等都为Slave,HMI系统一直PollingSlave的各种relayandregister最新数值,然后做显示及各种逻辑计算及控制调整等处理。1共享的通信协议1.1QueryandResponseCycle图(2-1):Master/SlaveandQuery/ResponseCycleDeviceAddress:表示该设备的编号,于同一个串行式网络上此为唯一的号码。于TCP/IP上可以使用IPAddress区分之,所以该DeviceAddress保留此字段可以使用或不使用。FunctionCode:表示要求Slave处理各种不同资料或程序的Command,以不同的FunctionNumber来区分之。Eight-BitDataBytes:依据FunctionCode而有不同的详细资料定义,Slave设备依据此两字段资料,做各种处理。ErrorCheck:当通信传送资料时,因考虑信号可能会受外界干扰,所以必须加上ErrorCheckCode,使得message接收方可以就接到的资料再计算一次Code,如果正确则做正常处理,不正确则不做处理。于串行式通信规定有CRCandLRC等两种方式。于TCP/IP通信,因为通信ErrorCheck已经被TCP/IP的阶层处理掉,所以于Modbus/TCP通信协议上不用此字段。DeviceAddressFunctioncodeEight-BitDataBytesErrorCheckDeviceAddressFunctioncodeEight-BitDataBytesErrorCheckQuerymessagefromMasterResponsemessagefromSlaveMasterSlave1.2基本资料格式(DataFormat)说明以上QueryandResponseMessage基本格式如下图所示。所有资料格式最大长度为256字符。zRTU格式:www.PLCworld.cn图(2-2):RTUdataformat开始间隔DeviceAddressFunctionCodeDataCRCcheckT1-T2-T3-T4结束间隔16BitsNumberof8Bits8Bits8BitsT1-T2-T3-T4¾T1-T2-T3-T4:RTU规定每次Query或ResponseMessage的结束,是以未再接到下一个字符间隔时间来判断。其规定为3.5字符的通信时间,举例来说:通信速率为9600bps、每个字符含8bits再加上1startbit及1stopbit后,一个字符为10bits。计算3.5字符的通信时间为(3.5*10)/9600=0.00365秒。于通信协议的文件上以T1-T2-T3-T4来表示此数值。¾所有传送的字符都是照原值8Bits传送,不做任何处理加工。¾Data:Numberof8Bits是表示每个FunctionCode有不同数目的详细资料规定。¾通信资料的ErrorCheck采用CRC计算方式,于「串行式通信协议」小节内说明。zASCII格式:图(2-3):ASCIIdataformat起始字符DeviceAddressFunctionCodeDataLRCcheck2字符<CR><LF>结束字符2字符数个字符2字符2字符:¾起始字符及结束字符:因为所传送资料都是为ASCII码,以十六进制表示,也即是一定为0123456789ABCDEF等16个ASCII码。所以用特殊的字符规定开始或结束。¾由DeviceAddress至Data等资料,都是将8bits原始值转换为两码的十六进制ASCII码,所以其实际传送的字符数约为RTU格式的两倍。¾Data:数个字符是表示每个FunctionCode有不同数目的详细资料规定。¾通信资料的ErrorCheck采用LRC计算方式,于「串行式通信协议」小节内说明。zTCP/IP格式:www.PLCworld.cn图(2-4):TCP/IPdataformat起始字符组DeviceAddressFunctionCodeNumberof8BitsErrorcheckData不使用结束规定不使用8Bits8Bits6个起始字符¾起始字符组:于前面再多加6个字符,以定义一些TCP/IP的需要系数。说明如下:Byte0:本次通信Message的编号以2bytes整数(Byte0、1)表示,此byte为上字符,一般是由Master编号之,以区分每次Message。如果是Slave则将Master传来的QueryMessage照转至ResponseMessage。Byte1:本次通信Message的编号下字符。Byte2:通信协议识别号码以2bytes整数(Byte2、3)表示,此byte为上字符,于此处为零。Byte3:通信协议识别号码下字符,于此处为零。Byte4:Message长度以2bytes整数(Byte4、5)表示,此byte为上字符(由DeviceAddress至Data为止),因为长度不能超过256位,所以此位永远为零。Byte5:Message长度下字符(由DeviceAddress至Data为止)。¾由DeviceAddress至Data内容同RTU格式。¾Modbus规定IPPortNo.为502。z举例说明三种格式:FunctionCode-3读取OutputRegister数值为例。Deviceaddress:6。StartAddress:40123(Modbus规定OutputRegister由40001开始)。通信协议内则将40001去除,以122表示也就是十六进制0x007A、读取点数:3。QueryMessage通信内容十六进制ASCIICodeRTU8-bitsfield二进制TCP8-bitsfield二进制TCPByte-000000000TCPByte-100000001TCPByte-200000000TCPByte-300000000TCPByte-400000000TCPByte-500000110ASCII起始字符:DeviceAddress06060000011000000110www.PLCworld.cnFunctionCode03030000001100000011StartAddress(Hibyte)00000000000000000000StartAddress(Lobyte)7A7A0111101001111010No.ofregisters(Hibyte)00000000000000000000No.ofregister(Lobyte)03030000001100000011ErrorCheckByte-0ErrorCheckByte-1结束字符<CR><LF>图(2-5):ExampleofQueryMessage回传的3点register数值为789、12345、-567也就是十六进制0x0315、0x3039、0xFDC9等ResponseMessage通信内容十六进制ASCIICodeRTU8-bitsfield二进制TCP8-bitsfield二进制TCPByte-000000000TCPByte-100000001TCPByte-200000000TCPByte-300000000TCPByte-400000000TCPByte-500001001ASCII起始字符:DeviceAddress06060000011000000110FunctionCode03030000001100000011Bytecount06060000011000000110Data-1(Hibyte)03030000001100000011Data-1(Lobyte)15150001010100010101Data-2(Hibyte)30300011000000110000Data-2(Lobyte)39390011100100111001Data-3(Hibyte)FDFD1111110111111101Data-3(Lobyte)C9C91100100111001001ErrorCheckByte-0ErrorCheckByte-1结束字符<CR><LF>图(2-6):ExampleofResponseMessage1.3FunctionCode说明FunctionCode有二十几种,但是一般使用上都以1、2、3、4、5、6、15、16等八种最为常用,以及另外特殊使用的20、21两种,此为GeneralReferenceRegister,绝大部份的Modbus设备并不会提供此Register。于PLC上主要的控制数据有下列四种型式。此八种FunctionCode就是处理这些控制资料,详细说明如下各点:www.PLCworld.cn控制数据四种型式:zDI:DigitalInput,以一个bit表示On/Off,用来记录控制信号的状态输入,例如:开关,接触点,马达运转,超限switch…等等。于PLC上被称为Inputrelay、inputcoil等。zDO:DigitalOutput,以一个bit表示On/Off,用来输出控制信号,以激活或停止马达,警铃,灯光…等等。于PLC上被称为Outputrelay、Outputcoil等。zAI:AnalogInput,以16bitsinteger表示一个数值,用来记录控制信号的数值输入,例如:温度、流量、料量、速度、转速、文件板开度、液位、重量…等等。于PLC上被称为Inputregister。zAO:AnalogOutput,以16bitsinteger表示一个数值,用来输出控制信号的数值,例如:温度、流量、速度、转速、文件板开度、饲料量…等等设定值。于PLC上被称为Outputregister、Holdingregister。ModbusFunctionCode说明01ReadCoilStatus(outputrelay)02ReadInputStatus(inputrelay)03ReadHoldingRegisters(outputregister)04ReadInputRegisters05ForceSingleCoil06PresetSingleRegister07ReadExceptionStatus08Diagnostics09Program48410Poll48411FetchComm.EventCtr.12FetchComm.EventLog13ProgramController14PollController15ForceMultipleCoils16PresetMultipleRegisters17ReportSlaveID18Program884/M8419ResetComm.Link20ReadGeneralReference21WriteGeneralReference22MaskWrite4xRegister23Read/Write4xRegister24ReadFIFOQueue43ReadDeviceIdentication65to72开放给一般使用者定义100to110开放给一般使用者定义www.PLCworld.cn图(2-7):ModbusFunctionCode一览表以下说明常用10种FunctionCode:每种FunctionCode以举例说明其中间Message的格式至于前面的TCPByte,ASCII起始字符及后面的ErrorCheck、结束字符等都是一样规定,参考前一节内容即可。FunctionCode-1:读取DI资料,于Modbus规定RelayAddress由00001开始。但是通信协议内取后面四位数,且由零起算,例如:于文件上RelayAddress为00345,其通信协议内转换的Address为344。由DeviceAddress17读取RelayAddress20–32的DI资料,通信协议内StartAddress为19,读取点数13。QueryMessage通信内容十六进制DeviceAddress11FunctionCode01StartAddress(Hibyte)00StartAddress(Lobyte)13No.ofpoints(Hibyte)00No.ofpoints(Lobyte)0D回传资料以一个Byte即8bits为一组,每一个Bit表示一点RelayOn/Off状态。例如下表Data(Relay27–20)的状态为ON-ON-OFF-ON-OFF-OFF-ON-ON。Data(Relay32–28)的状态为OFF-ON-OFF-ON-ON-ON。(前面3bit不算,因为只到Relay32为止)其个别Relay状态,举例:Relay27为ON、Relay31为ON、Relay23为OFF。ResponseMessage通信内容十六进制DeviceAddress11FunctionCode01Bytecount02Data(Relay27–20)D3Data(Relay32–28)17图(2-8):ExampleofFunctionCode-1Messagewww.PLCworld.cnFunctionCode-2:读取DO资料,于Modbus规定RelayAddress由10001开始。但是通信协议内取后面四位数,且由零起算,例如:于文件上RelayAddress为10678,其通信协议内转换的Address为677。由DeviceAddress23读取RelayAddress10102–10134的D0资料,通信协议内StartAddress为101,读取点数33。QueryMessage通信内容十六进制DeviceAddress17FunctionCode02StartAddress(Hibyte)00StartAddress(Lobyte)65No.ofpoints(Hibyte)00No.ofpoints(Lobyte)21回传资料以一个Byte即8bits为一组,每一个Bit表示一点RelayOn/Off状态。例如下表Data(Relay109–102)的状态为ON-OFF-ON-OFF-ON-OFF-ON-OFF。Data(Relay117–110)的状态为OFF-ON-OFF-OFF-OFF-ON-OFF-ON。Data(Relay125–118)的状态为OFF-OFF-ON-OFF-OFF-ON-ON-ON。Data(Relay133–126)的状态为ON-OFF-OFF-OFF-OFF-OFF-ON-ON。Data(Relay134–134)的状态为ON。(前面7bit不算,因为只到Relay134为止)ResponseMessage通信内容十六进制DeviceAddress17FunctionCode02Bytecount05Data(Relay109–102)AAData(Relay117–110)45Data(Relay125–118)27Data(Relay133–126)83Data(Relay134–134)01图(2-9):ExampleofFunctionCode-2Messagewww.PLCworld.cnFunctionCode-3:读取AO资料,于Modbus规定RegisterAddress由40001开始。但是通信协议内取后面四位数,且由零起算,例如:于文件上RegisterAddress为44321,其通信协议内转换的Address为4320。由DeviceAddress41读取RegisterAddress40765–40770的A0资料,通信协议内StartAddress为764,读取点数6。QueryMessage通信内容十六进制DeviceAddress29FunctionCode03StartAddress(Hibyte)02StartAddress(Lobyte)FCNo.ofregisters(Hibyte)00No.ofregisters(Lobyte)06回传资料以两个Bytes表示16bits整数值。例如下表Register40765整数值:99Register40766整数值:12336Register40767整数值:-1417Register40768整数值:789Register40769整数值:767Register40770整数值:1ResponseMessage通信内容十六进制DeviceAddress29FunctionCode03Bytecount0CData-1(Hibyte)00Data-1(Lobyte)63Data-2(Hibyte)30Data-2(Lobyte)30Data-3(Hibyte)FAData-3(Lobyte)77Data-4(Hibyte)03Data-4(Lobyte)15Data-5(Hibyte)02Data-5(Lobyte)FFData-6(Hibyte)00Data-6(Lobyte)01图(2-10):ExampleofFunctionCode-3Messagewww.PLCworld.cnFunctionCode-4:读取AI资料,于Modbus规定RegisterAddress由30001开始。但是通信协议内取后面四位数,且由零起算,例如:于文件上RelayAddress为30988,其通信协议内转换的Address为987。由DeviceAddress30读取RegisterAddress30123–30127的AI资料,通信协议内StartAddress为122,读取点数5。QueryMessage通信内容十六进制DeviceAddress1EFunctionCode04StartAddress(Hibyte)00StartAddress(Lobyte)7ANo.ofregisters(Hibyte)00No.ofregisters(Lobyte)05回传资料以两个Bytes表示16bits整数值。例如下表Register30123整数值:2581Register30124整数值:57Register30125整数值:969Register30126整数值:-24544Register30127整数值:170ResponseMessage通信内容十六进制DeviceAddress1EFunctionCode04Bytecount0AData-1(Hibyte)0AData-1(Lobyte)15Data-2(Hibyte)00Data-2(Lobyte)39Data-3(Hibyte)03Data-3(Lobyte)C9Data-4(Hibyte)A0Data-4(Lobyte)20Data-5(Hibyte)00Data-5(Lobyte)AA图(2-11):ExampleofFunctionCode-4Messagewww.PLCworld.cnFunctionCode-5:写入DO一点资料,Address规定与FunctionCode-2一样。由DeviceAddress10写入RelayAddress10012的D0资料,通信协议内StartAddress为11。如果设定为ON于ForceData设定十六进制0xFF00,如果设定为OFF于ForceData设定十六进制0x0000。QueryMessage通信内容十六进制DeviceAddress0AFunctionCode05StartAddress(Hibyte)00StartAddress(Lobyte)0BForceData(Hibyte)FFForceData(Lobyte)00以QueryMessage作为ResponseMessage传回。ResponseMessage通信内容十六进制DeviceAddress0AFunctionCode05StartAddress(Hibyte)00StartAddress(Lobyte)0BForceData(Hibyte)FFForceData(Lobyte)00图(2-12):ExampleofFunctionCode-5Messagewww.PLCworld.cnFunctionCode-6:写入AO一点资料,Address规定与FunctionCode-3一样。由DeviceAddress13写入RegisterAddress40112的A0资料,通信协议内StartAddress为111。设定16bits整数值为999即是十六进制0x03E7。QueryMessage通信内容十六进制DeviceAddress0DFunctionCode06StartAddress(Hibyte)00StartAddress(Lobyte)6FPresetData(Hibyte)03PresetData(Lobyte)E7以QueryMessage作为ResponseMessage传回。ResponseMessage通信内容十六进制DeviceAddress0DFunctionCode06StartAddress(Hibyte)00StartAddress(Lobyte)6FPresetData(Hibyte)03PresetData(Lobyte)E7图(2-13):ExampleofFunctionCode-6Messagewww.PLCworld.cnFunctionCode-15:写入DO多点资料,Address规定与FunctionCode-2一样。由DeviceAddress17写入RelayAddress10011–10022的D0资料,通信协议内StartAddress为10,写入点数12。所设定状态如下:第一个ForceDatabyteBit01010101Relay1817161514131211第二个ForceDatabyteBit00000011Relay----22212019QueryMessage通信内容十六进制DeviceAddress11FunctionCode0FStartAddress(Hibyte)00StartAddress(Lobyte)0ANo.ofrelay(Hibyte)00No.ofrelay(Lobyte)0CByteCount02ForceData(Relay18–11)55ForceData(Relay22–19)03以QueryMessage前面6bytes作为ResponseMessage回传。ResponseMessage通信内容十六进制DeviceAddress11FunctionCode0FStartAddress(Hibyte)00StartAddress(Lobyte)12No.ofrelay(Hibyte)00No.ofrelay(Lobyte)03图(2-14):ExampleofFunctionCode-15Messagewww.PLCworld.cnFunctionCode-16:写入AO多点资料,Address规定与FunctionCode-3一样。由DeviceAddress39写入RegisterAddress40310–40312的A0资料,通信协议内StartAddress为309,写入点数3。写入数值如下所示:每个register数值为16bits整数值。Register40310设定值:784Register40311设定值:12706Register40312设定值:-16183QueryMessage通信内容十六进制DeviceAddress27FunctionCode10StartAddress(Hibyte)01StartAddress(Lobyte)35No.ofregisters(Hibyte)00No.ofregister(Lobyte)03Bytecount06Data-1(Hibyte)03Data-1(Lobyte)10Data-2(Hibyte)31Data-2(Lobyte)A2Data-3(Hibyte)C0Data-3(Lobyte)C9以QueryMessage前面6bytes作为ResponseMessage回传。ResponseMessage通信内容十六进制DeviceAddress27FunctionCode10StartAddress(Hibyte)01StartAddress(Lobyte)35No.ofregisters(Hibyte)00No.ofregister(Lobyte)03图(2-15):ExampleofFunctionCode-16Messagewww.PLCworld.cnFunctionCode-20:读取GeneralReferenceRegister,此为ExtendedMemoryFile。此Register可分成10个File编号为FileNo.1-10,每个File开头Address都为600000。每个Register都可以读取或写入。注意此RegisterAddress使用者定义时600000起算,Protocol内部offset由0起算。与HoldingRegsiter(使用者定义40001起算,Protocol内部offset由0起算)稍有不同。本FunctionCode可以分成多数个Group读取不同Address的资料。由DeviceAddress17读取下列两个Group的Register值Group1由File4、开始Addressoffset为1、读取2点Register。Group2由File3、开始Addressoffset为9、读取2点Register。QueryMessage通信内容十六进制DeviceAddress11FunctionCode14ByteCount0EGroup-1ReferenceType06Group-1FileNo.(Hibyte)00Group-1FileNo.(Lobyte)04Group-1StartAddr.(Hibyte)00Group-1StartAddr.(Lobyte)01Group-1RegistersCount(Hibyte)00Group-1RegistersCount(Lobyte)02Group-2ReferenceType06Group-2FileNo.(Hibyte)00Group-2FileNo.(Lobyte)03Group-2StartAddr.(Hibyte)00Group-2StartAddr.(Lobyte)09Group-2RegistersCount(Hibyte)00Group-2RegistersCount(Lobyte)02www.PLCworld.cnResponseMessage如下。ResponseMessage通信内容十六进制DeviceAddress11FunctionCode14ByteCount0CGroup-1ByteCount05Group-1ReferenceType06Group-1Data-1(Hibyte)0DGroup-1Data-1(Lobyte)FEGroup-1Data-2(Hibyte)00Group-1Data-2(Lobyte)20Group-2ByteCount05Group-2ReferenceType06Group-2Data-1(Hibyte)33Group-2Data-1(Lobyte)CDGroup-2Data-2(Hibyte)00Group-2Data-2(Lobyte)40图(2-16):ExampleofFunctionCode-20Messagewww.PLCworld.cnFunctionCode-21:写入GeneralReferenceRegister,Address规定与FunctionCode-20一样。由DeviceAddress17写入下列一个Group的Register值Group1由File4、开始Addressoffset为7、写入3点Register。Register600007设定值:1711Register600008设定值:1214Register600009设定值:4109QueryMessage通信内容十六进制DeviceAddress11FunctionCode15ByteCount0DGroup-1ReferenceType06Group-1FileNo.(Hibyte)00Group-1FileNo.(Lobyte)04Group-1StartAddress(Hibyte)00Group-1StartAddress(Lobyte)07Group-1RegistersCount(Hibyte)00Group-1RegistersCount(Lobyte)03Group-1Data-1(Hibyte)06Group-1Data-1(Lobyte)AFGroup-1Data-2(Hibyte)04Group-1Data-2(Lobyte)BEGroup-1Data-3(Hibyte)10Group-1Data-3(Lobyte)0D以QueryMessage全部bytes作为ResponseMessage回传。图(2-17):ExampleofFunctionCode-21Messagewww.PLCworld.cn1.4ExceptionCode说明异常码(ExceptionCode)是用来表示,当有任何通信资料异常时,由Slave不回传正常资料,而回传错误码号(ErrorCode)以提供Master做异常处理。其Message格式以下表为例说明:由DeviceAddress13写入RegisterAddress42450的A0资料,通信协议内StartAddress为2449。设定16bits整数值为999即是十六进制0x03E7。QueryMessage通信内容十六进制DeviceAddress0DFunctionCode06StartAddress(Hibyte)09StartAddress(Lobyte)91PresetData(Hibyte)03PresetData(Lobyte)E7因为该Modbus设备,只提供最大RegisterAddress为42048,所以超出范围,需要回传ErrorCode:2(ILLEGALDATAADDRESS)。同时将FunctionCode最左边Bit设定为1表示此Function有ExceptionCode。ResponseMessage通信内容十六进制DeviceAddress0DFunctionCode86ErrorCode02图(2-18):ExceptionMessageformat由以上可知处理ExceptionCode,将原有的FunctionCode的最左边Bit设定为1,然后将适合的Errorcode代入。ErrorCode内容说明1ILLEGALFUNCTION此FunctionCode不能被Slave所处理。可能FunctionCode错误或此Slave设备未定义此Function。2ILLEGALDATAADDRESS所要求的Address超出范围。最常见的错误为StartAddress加上处理的点数超出Address最大值。3ILLEGALDATAVALUE所传送过来的数值不合Slave的规定。例如:FunctionCode-6为设定某一点CoilON或OFF,其Value只能有两个值ON:0xFF00、OFF:0x0000,如果是其它值则为不合法。www.PLCworld.cn4SLAVEDEVICEFAILURE当Slave处理所要求的FunctionCode,发生不可预期的错误。5ACKNOWLEDGE当Slave接到一种FunctionCode需要较长时间处理时,避免Master等待ResponseMessage未到而产生通信逾时。所以先送此Code,然后Master再以PollingProgramFunctionCode要求处理结果。6SLAVEDEVICEBUSYSlave正处理其它事情,目前没有时间处理所要求的FunctionCode,先回传此ErrorCode,然后Master稍后传送再一次QueryMessage。7NEGATIVEACKNOWLEDGE以FunctionCode-13、14要求处理时,Slave无法处理则回传此Errorcode,然后Slave必须再要求Slave传送检查(diagnostic)后讯息。8MEMORYPARITYERROR使用于FunctionCode-20、21的extensionmemory的处理,当此memory发生parity错误时,回传此ErrorCode。9未定义。10GATEWAYPATHUNAVAILABLE适用于Gateway的产品,表示Gateway无法于内部建立一个inputport至outputport的路径或处理程序等。最常见的错误是此Gateway未做使用上定义(configuration)。11GATEWAYTARGETDEVICEFAILEDTORESPOND适用于Gateway的产品,当转送MasterQueryMessage至目标Slave设备时,对方未有响应,可传送此Errorcode至Slave。此种最常见的现象是该目标Slave设备并未于网络上。图(2-19):ExceptionCode定义表2串行式的通信协议2.1DeviceAddress的规定此DeviceAddress是用来表示于ModbusDevice的编号,于同一条串行式联机上,此编号必须是唯一的,才能区分出各别ModbusDevice。于ModbusMessage内,规定ASCII格式为2bytes字符,或RTU为1byte(8bits)。其有效数值为0-247,其中1-247各别ModbusDevice编号用,0做为广播(broadcast)通信的特殊用途,会被所有SlaveDevice接受执行,此种broadcast用法,并不是为每一种ModbusDevice的标准功能请注意。实际使用上常常会发生的无法通信的现象,必须确认DeviceAddress是否有设定或重复设定的操作,此为最常发现的错误点。2.2RTU及ASCII两种资料格式前一个章节已经举例说明两种资料的基本格式,于此再说明一些重要原则。列于下表www.PLCworld.cnRTUASCIIMessage内容照原始值传送每一个原始值字符都转换为2个十六进制ASCIICode,所传送的数目为RTU的两倍。以未收到下一个字符的时间间隔,来区分出每段Message,于通信应用程序的设计上较复杂。通信协议定义是未接到3.5字符的时间,表示Message结束。但是实际上每种Device硬件执行效率不同,完全依照协议设计,有时还会通信断线现象。最好的设计是比协议时间稍长,以保证收到完整Message。以特殊的起始字符及结束字符,区
本文档为【Modbus通信通讯教程(详细)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
红方
资深中学教育工作者
格式:pdf
大小:4MB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2019-03-04
浏览量:7