PLC的Modbus通信_第1页
PLC的Modbus通信_第2页
PLC的Modbus通信_第3页
PLC的Modbus通信_第4页
PLC的Modbus通信_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PLC与串口的MODBUS通信1 需求1程序开始,赋值VB10=1,等待执行步进电机阶段1。2VB10=1,等待执行步进电机阶段1;VB10=2,等待执行步进电机阶段2;VB10=3,等待执行步进电机阶段3。2当(VB10=1且I0.1)或者(VB10=2且I0.2)或者(VB10=3且I0.3),主站首先向从站发送控制命令帧,从站收到以后,返回给主站一应答帧表明数据已经收到。主站在接收到该应答帧后开始计时,10s后读从站执行状态信息,判断从站该阶段的动作是否完成,如果完成了进入下一阶段的等待,如果未完成,5s后再次读取从站执行状态信息判断阶段动作是否完成。3步进电机阶段动作能循环执行。4紧急

2、情况下(I0.5=1),可以通过主站向从站写入命令使从站程序初始化。5当主站读取到的状态信息出错时,可以通过I/O输出指示出来(Q0.1指示步进电机阶段1读取状态信息出错;Q0.2指示步进电机阶段2读取状态信息出错;Q0.3指示步进电机阶段3读取状态信息出错),在错误解除以后,可以通过I/O输入(I0.0)将错误指示消除,并使程序复位。2 方案MODBUS协议是一种主从协议,只允许一个主设备,设计中以PLC作为主站MSP430开发板作为从站。如图1示。图1 PLC与MSP430连接图为方便起见,首先以PC机作为MODBUS从站,在PC机上利用串口调试助手来接收和发送数据,PLC通过PPI电缆连

3、接到串口,采用PROT0通讯口作为MODBUS通讯口。3 具体实现:3.1 MODBUS数据帧介绍MODBUS广泛应用于工业通讯领域,它规定了通信双方的通信格式,只要双方都使用该规定就可以解析出正确的通信内容。在此,首先介绍一下MODBUS通信的数据帧格式,以3号功能码以及16号功能码为例,3号功能码是读保持寄存器的值,16号功能码是写保持寄存器的值。1、读取保持寄存器当MODBUS主站需要读取指定地址处数据时,首先向从站发送一个读命令帧,所发送命令帧格式如表1。表1 读命令主站发送命令帧格式设备地址功能码地址H地址L数据量H数据量LCRC HCRC LAdd03HHoldStartDataN

4、umCRC高位CRC低位数据帧说明如下表:表2 读命令主站发送命令帧说明设备地址要读数据的从站地址功能码03H代表读取多个保持寄存器地址H所读取数据的地址以两个字节表示地址L数据量H所读取数据的个数以两个字节表示(注:此处说的数据量以字为单位)数据量LCRC HCRC校验码在数据帧中以两个字节表示,主要用于检验数据传输过程中是否出错CRC L例:需要读取2号站从第4个寄存器开始的3个寄存器,MODBUS主站发送的数据帧为:02 03 00 04 00 03 44 39从站在接收到主站的读命令以后,会发送一个返回命令帧,返回的命令帧格式如表3。表3 读命令从站返回命令帧格式设备地址功能码数据量数

5、据1数据NCRC HCRC LAdd03H返回数据的字节数NData(1-N)CRC高位CRC低位数据帧说明如下表:表4 读命令从站返回命令帧说明设备地址返回数据的从站地址功能码03H代表该数据帧是应答读取多个保持寄存器数据量返回数据的字节个数(注:以字节为单位)数据所返回的数据(数据个数与数据量相同)CRC HCRC校验码在数据帧中以两个字节表示,主要用于检验应答帧在传输过程中是否出错CRC L例:对于主站的读命令帧,2号站如果第4个寄存器开始的3个寄存器里面的值分别为:31,32H,33H,34H,35H,36H则应答帧应该是:02 03 06 31 32 33 34 35 36 D1 A

6、C对于发送的命令帧与应答帧之间有如下关系:1:两个数据帧的设备地址相同。2:两个数据帧的功能码相同。3:返回的数据量N=2DataNum如果从站在接收到数据以后,认为接收到的主站发送过来的数据是错误的,会返回一个异常帧给主站,告诉主站,从站接收到的数据是错误的。异常帧的数据格式如表5,数据帧不再具体说明。表5 异常帧格式设备地址功能码错误信息CRC HCRC LAdd083H一个字节的错误信息CRC高位CRC低位例:2号站在接收到主站发送的命令以后,判断得出该命令是错误的,发送回一个异常帧:02 83 01 70 F0错误信息可以根据不同的错误类型而不同。2、写保持寄存器当MODBUS主站需要

7、向从站指定地址写入数据时,会发送一个数据帧,数据帧格式如表6。表6 写命令主站发送数据帧格式设备地址功能码地址H地址L数量H数量L字节数具体数据CRC HCRC LAdd010HHoldStartDataNumbyteN1-byteNCRC高位CRC低位数据帧说明如下表:表7 写命令主站发送数据帧说明设备地址要写入数据的从站地址功能码10H代表写多个保持寄存器地址H要写入数据的首地址,用两个字节表示地址L数量H要写入数据的个数(注:以字为单位)数量L字节数要写入数据的个数(注:以字节为单位)具体数据CRC HCRC校验码在数据帧中以两个字节表示,主要用于检验数据传输过程中是否出错CRC L例:

8、需要向2号从站第80个寄存器开始的4个寄存器里面依次写入:11H,22H,33H,44H,55H,66H,77H,88H则MODBUS主站发送的数据帧为:02 10 00 50 00 04 08 11 22 33 44 55 66 77 88 D4 F0当从站接收到主站的写命令帧以后,判断接收到的信息是正确的,会返回一个命令帧告诉主站所发生的数据从站已经正确接收到了,返回数据帧格式如表8。表8写命令从站返回数据帧格式设备地址功能码地址H地址L数据量H数据量LCRC HCRC LAdd010HHoldStartDataNumCRC高位CRC低位返回帧说明如下表:表9 写命令从站返回数据帧说明设备

9、地址被写入数据的从站地址功能码10H代表响应的是写多个保持寄存器地址H被写入数据的首地址,用两个字节表示地址L数量H被写入数据的个数(注:以字为单位)数量LCRC HCRC校验码在数据帧中以两个字节表示,主要用于检验数据返回过程中是否出错CRC L例:2号从站在接收到主站的写命令以后,判断接收到的信息是正确的,返回一个应答帧:02 10 00 50 00 04 C1 E8对于PLC写保持寄存器,发送的命令帧与应答帧之间应该有如下关系:1:设备地址相同2:功能码相同3:两个数据帧的地址HoldStart相同4:两个数据帧的数据量DataNum相同如果从站在接收到数据以后,认为接收到的主站发送过来

10、的数据是错误的,会返回一个异常帧给主站,告诉主站,从站接收到的数据是错误的。异常帧的数据格式如表10,命令帧不再具体说明。表10 异常帧格式设备地址功能码错误信息CRC HCRC LAddr090H一个字节的错误信息CRC高位CRC低位例:2号从站在接到到命令以后,判断接收到的信息是一个错误信息,返回一个异常帧:02 90 01 7D C0错误信息可以根据不同的错误类型而不同。3.2 PLC指令介绍对于S7-200 PLC,开发了MODBUS库函数,可以直接使用它所带的MODBUS库函数来实现PLC与其他设备之间的MODBUS通信。选用PROT0作为MODBUS通信,主要用到MODBUS库函数

11、中的MBUS_CTRL和MBUS_MSG。3.2.1 MBUS_CTR用于S7-200端口0的MBUS_CTRL指令可初始化、监视或禁用Modbus通讯。在使用MBUS_MSG指令之前,必须正确执行MBUS_CTRL指令。指令完成后立即设定"完成"位,才能继续执行下一条指令。在每次扫描且 EN输入打开时执行该指令。MBUS_CTRL指令必须在每次扫描时(包括首次扫描)被调用,以允许监视随MBUS_MSG指令启动的任何突出消息的进程。除非每次调用MBUS_CTRL,否则Modbus主设备协议将不能正确运行,MBUS_CTRL指令如图2。图2 MBUS_CTRL指令Mode:输

12、入数值选择通讯协议。输入值1为 Modbus协议;输入值0为PPI协议。在本次设计中输入1。Baud:设置波特率,可以设置的波特率有1200、2400、4800、9600、19200、38400、57600和115200,在本次设计中,波特率选择为9600。Parity:设置校验方式。0 - 无奇偶校验;1 - 奇校验;2 - 偶校验。在本次设计中采用无奇偶校验。Timeout:设置超时时间,用于确定主站发送命令以后从站是否相应,一般设置为1000。Done:执行该命令完成时,该位被置为1。Error:当指令执行出现错误的时候,该寄存器显示错误类型。 MBUS_MSGMBUS_MSG指令用于启

13、动对Modbus从站的请求并处理应答。当EN输入和"首次"输入打开时,BUS_MSG指令启动对Modbus从站的请求。发送请求、等待应答、并处理应答通常需要多次扫描。EN输入必须打开以启用请求的发送,并应该保持打开直到"完成"位被置位,BUS_MSG指令如图3示。图3 BUS_MSG指令First:应当通过一个边沿检测元素打开,这将导致请求被传送一次。Slave: Modbus从站的地址。RW:指定指令的类型是读指令还是写指令,0表示指令为读;1表示指令为写。Addr:读取Modbus从站的起始地址。Count:指定此次读写数据的个数 。DataPtr:

14、要写入数据的首地址或者是读取上来数据存放的首地址。Done:指令完成时该位置1。Error:当指令执行出现错误时,在该寄存器处显示出错误号。例:1、需要读取2号站地址为0004开始的3个寄存器里面的值到VB200地址开始的寄存器里,设置如图4。2、需要将VB100地址开始的4个寄存器里面的值写到地址为004F开始的寄存器里面,设置如图5。 图4 读数据设置 图6 写数据设置在这里需要注意的有两点:第一,对于要写入或者是要读取的寄存器地址,如果需要读0004开始的寄存器,地址要设置为40005而不是40004,同样如果需要写004F地址应该设置为40080而不是40079,这是通过观察其发送出的

15、数据帧发现的,如果读寄存器时地址设置为40004,发送出的命令帧是:02 03 00 03 00 03 F5 F8写命令同样存在地址不同的情况。第二,就是要读取的数据量是以字为单位而不是以字节为单位。3.3 I/O分配在这次设计中一共用到了5个输入,3个输出,具体分配如表7表7 I/O分配表I/O名称作用I/O类型I0.0复位按钮输入I0.1发送步进电机阶段1控制命令输入I0.2发送步进电机阶段2控制命令输入I0.3发送步进电机阶段3控制命令输入I0.5急停输入Q0.1步进电机阶段1错误输出Q0.2步进电机阶段2错误输出Q0.3步进电机阶段3错误输出3.4 PLC程序设计PLC程序包含一个主程

16、序和4个子程序构成。4个子程序分别是一个初始化子程序和3个步进电机阶段控制子程序。 主程序主程序主要是根据条件调用相应的子程序,此外还处理一些简单的逻辑运算。主程序流程图如图7:图7 主程序流程图如图7示,首先判断是否调用初始化子程序,然后对MODBUS主设备进行初始化,接着根据VB10值的不同分别调用相应的步进电机阶段动作子程序,扫描完相应子程序以后还要判断急停按钮是否有效,如果无效,自此一个扫描周期结束,进入下一个扫描周期;如果有效,首先将VB10清零,然后向从站的命令寄存器写入代表急停的命令,到此一个扫描周期结束。 初始化初始化子程序是在上电或者是满足复位条件时调用的,在该子程序里面完成

17、了4个动作:第一,将写数据缓冲区VB100到VB107全部清零;第二,将存放3个阶段状态信息返回值的寄存器VB200,VB210,VB220清零;第三,将3个阶段子程序中所用到的控制寄存器VD0,VD4,VW8清零;第四,将VB10里面的值赋值为1,允许步进电机阶段1动作。初始化流程如图8示。图8 初始化流程图 步进电机阶段控制步进电机阶段控制包括3个子程序,三个子程序的动作流程结构一样,当进入相应步进电机阶段子程序后执行:步骤1:判断是否满足发送相应的步进电机阶段控制命令,如果不满足继续等待;如果满足,进入下一步。步骤2:将上一步进电机阶段控制所用到的寄存器清零。步骤3:将存放3个步进电机阶

18、段状态信息返回值的寄存器(VB200,VB210,VB220)清零,进入下一步。步骤4:对VB100赋值。步骤5:将VB100开始地址处的4个数据写入从站,进入下一步。步骤6:判断是否接收到下位机返回的接收正确的信号,如果接收到进入下一步骤,如果没有接收到,另行处理,现在程序中还没有编写。步骤7:延时10S,读取从站状态信息寄存器里面的值,放入对应的寄存器。步骤8:根据相应寄存器里面值判断相应的步进电机阶段动作是否完成,如果状态信息表示完成,进入步骤10,如果状态信息表示未完成进入下一步。如果接收到的状态信息错误,在指定的输出点报错。步骤9:延时5S,再次执行步骤8。步骤10:赋值VB10,

19、允许发送下一步进电机阶段动作命令。3个步进电机阶段的动作流程图如图9示。图9 步进电机阶段动作流程图3个步进电机阶段动作流程图类似,不同之处如表: 阶段步骤名步进电机阶段1步进电机阶段2步进电机阶段3步骤1判断条件是I0.1判断条件是I0.2判断条件是I0.3步骤2清VB7,VB8,VB9清VB1,VB2,VB3清VB4,VB5,VB6步骤4赋值VB100=01H赋值VB100=02H赋值VB100=04H步骤7读取从站执行状态信息存在VB200读取从站执行状态信息存在VB210读取从站执行状态信息存在VB220步骤8状态信息错误在Q0.1报错状态信息错误在Q0.1报错状态信息错误在Q0.1报

20、错步骤10赋值VB10=2赋值VB10=3赋值VB10=1 紧急处理在紧急情况下,MODBUS主站向从站发送一个命令,从站在收到这个命令以后,让程序进入初始化的动作。在此设计中紧急情况用输入I0.5代替,当I0.5接通时,向从站发送一个08H,发送的命令帧为:02 10 00 4F 00 04 08 08 00 00 00 00 00 00 00 E1 F6从站在接收到08H以后就知道信息值表示让程序初始化。 4 调试将程序下载到PLC,将PLC处于运行状态,此时程序进入允许步进电机阶段1的控制命令发送。1、点击I0.2或者是I0.3,PLC上面没有响应,原因是此时PLC只允许步进电机阶段1动

21、作,而刚才是要求发送步进电机阶段2和步进电机阶段3的控制命令,所以不响应。2、点击I0.1,程序开始响应,发送一帧数据到MODBUS从站。数据帧为:02 10 00 4F 00 04 08 01 00 00 00 00 00 00 00 21 9C在接收到该串数据后在串口上返回一帧数据:02 10 00 4F 00 04 F0 2E表示从站已经正确的接收到了PLC的控制命令。10S以后PLC会发送一个读取状态信息的数据帧到从站,数据帧为:02 03 00 04 00 03 44 39表示需要读取从0004地址开始的3个数据,接收到该数据帧以后,假如从站步进电机阶段1还没有完成,那么返回一帧数据

22、:02 03 06 02 00 00 00 00 00 34 67表示从站此时正在执行步进电机阶段1,PLC收到数据帧以后知道此时从站状态值为2,还没有完成步进电机阶段1动作,于是延时5S再次发送读状态信息的数据帧;如果从站接收到读取状态信息帧时,步进电机阶段1的动作已经完成,那么返回一帧数据:02 03 06 03 00 00 00 00 00 35 B6表示此时从站处于状态3即:已经完成了步进电机阶段1。PLC接收到返回消息后知道步进电机阶段1完成了,可以进行步进电机阶段2动作了,于是将VB10里面赋值为2;当从站返回一个错误信息时,比如在步进电机阶段1时,从站返回一个步进电机阶段2完成,

23、那么PLC接收到消息以后直接在指定报错点Q0.1报错。3、进入允许步进电机阶段2时,按照步进电机阶段1的操作顺序进行操作。与步进电机阶段1不同的有三点:第一,PLC发送到从站的控制命令帧不一样,步进电机阶段2 PLC发送的控制命令帧为:02 10 00 4F 00 04 08 02 00 00 00 00 00 00 00 61 89第二,当PLC在发送读数据请求以后,从站返回的数据帧不一样,如果步进电机阶段2未完成返回的数据帧应该是:02 03 06 05 00 00 00 00 00 35 D0当步进电机阶段2完成时返回的数据帧应该是:02 03 06 06 00 00 00 00 00

24、35 E3第三,返回状态信息出现错误时,步进电机阶段2的错误指示是用的Q0.2,步进电机阶段3不在细说。4,当步进电机阶段3完成以后,再次触发I0.1,可以进入下一个步进电机阶段1的动作。5,在步进电机阶段1,如果读取到的状态信息错误时,能够在Q0.1指示出来;在步进电机阶段2,如果读取到的状态信息错误时,能够在Q0.2指示出来;在步进电机阶段3,如果读取到的状态信息错误时,能够在Q0.3指示出来;并且可以通过I0.0将该指示解除以及将程序复位,让程序进入允许步进电机阶段1动作状态。6,通过I0.5按钮,可以实现在某一特定时刻向从站发送一个命令帧让从站程序复位,设计中采用的是发送08H。5 问

25、题分析1 串口主动发送给PLC的数据PLC不能收到原因分析:MODBUS协议是一种主从协议,它不允许从站主动的向主站发送数据,只允许主站以轮询的方式与从站进行数据交换.解决办法:如果PLC需要某一个地址的数据,首先要向从站发送一个读指令,从站在接收到读指令以后将数据返回。2 PLC在发送完数据帧给从站以后,通过从站发送给PLC的数据帧有时可以收到,有时不可以收到。现象:当PLC发送一帧数据到从站以后,从站返回的信息有时候PLC可以接收到,有时候不可以接收到。并且接收不到数据时指令显示是接收超时。原因分析:PLC中对MODBUS主设备进行初始化时设置了一个超时时间,从站给PLC的数据须在PLC发送完命令帧以后的这个时间内完成,P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论