电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

用c51完结单片机和plc之间通讯实例

2017-05-23 07:05分类:PLC基础知识 阅读:

 

这篇文章以modbus通讯协议为例,具体评论了一自个机体系中,怎么 用c51完结单片机和plc之间通讯的实例。
modbus通讯协议
  modbus协议是运用于电子操控器上的一种通用言语。经过此协议,操控器彼此之间、操控器经由网络和其它设备之间可以通讯。
  modbus协议供应了主—从准则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)依据主设备查询供应的数据作出相应反响。主设备查询的格局:设备地址(或播送,此刻不需求需求)、功用代码、悉数要发送的数据、和一差错查看域。从设备需求音讯包含供认地址、功用码、任何要回来的数据、和一 差错查看域。假定在音讯接纳进程中发作一差错,或从设备不能施行其指令,从设备将树立一差错音讯并把它作为需求发送出去。
  操控器能设置为两种传输办法:ascii和rtu,在准则的波特率下,rtu可比ascii办法传送更多的数据,所以选用ktu办法。
  (1) 典型的rtu音讯帧
  典型的rtu音讯帧如表1所示。 

  rtu音讯帧的地址域包含8bit。或许的从设备地址是0...127(十进制)。其间地址0是用作播送地址,以使悉数的从设备都能知道。主设备经过行将联络的从设备的地址放入音讯中的地址域来选通从设备。当从设备发送需求音讯时,它把自个的地址放入需求的地址域中,以便主设备知道是哪一个设备作出需求。
  rtu音讯帧中的功用代码域包含了8bits,当音讯从主设备发往从设备时,功用代码域将告之从设备需求施行哪些做法;当从设备需求时,它运用功用代码域 来指示是正常需求(无误)仍是有某种差错发作(称作贰言需求,通常是将功用码的最高位由0改为1)。
  从主设备发给从设备音讯的数据域包含附加的信 息:从设备有必要用于进行施行由功用代码所界说的做法。这包含了像不接连的寄存器地址,要处理项的数目,域中实习数据字节数。假定没有差错发作,从从设备回来的数据域包含恳求的数据。假定有差错发作,此域包含一贰言代码,主设备运用程序可以用来区别采纳下一步举动。
  中选用rtu办法作字符帧时,差错查看域包含一16bits值(用两个8位的字符来完结)。差错查看域的内容是经过对音讯内容进行循环冗长查看(crc) 办法得出的。crc域附加在音讯的毕竟,添加时先是低字节然后是高字节。
  (2) 悉数的modbus功用码
  modbus的功用码界说如表2所示。  

常用功用通讯程序的计划
  这篇文章介绍了几个modbus常用功用程序的计划。笔者选用单片机作为主机,在单片机上编写程序完结单片机与plc之间的通讯。由单片机向plc宣告指令信 息,plc主动作出需求。plc经过单片机的串行通讯口通讯,程序用c51完结。程序的子函数及其功用:
  (1) 串口初始化
  void protocolinit(void)
  函数功用:串口设置为异步通讯办法1(初步位1位,数据位8位,接连位1位);守时/计数器1设置为波特率发作器,通讯速率 9600bps;开串行接连,并把串行接连设置为高优先级。
  (2) crc简略函数
  unsigned char crc16(unsigned char *puchmsg, unsigned char usdatalen)
  函数功用:先调入一值是全 “1”的16位寄存器,然后调用一进程将音讯中接连的8位字节各其时寄存器中的值进行处理。每个8位字符都独自和寄存器内容相或(or),作用向最低有用 位方向移动,最高有用位以0填充。lsb被获取出来查看,假定lsb为1,寄存器独自和预置的值或一下,假定lsb为0,则不进行。悉数进程要重复8次。在毕竟一位(第8位)完结后,下一个8位字节又独自和寄存器的其时值相或。毕竟寄存器中的值,是音讯中悉数的字节都施行往后的crc值。
  (3) 初始化变量
  void initvar(void)
  函数功用:初始化悉数进程变量。
  (4) 串行接连效劳程序
  void protocolserialprocess(void) interrupt 4 using 2
  函数功用:发送接连发送主组织成的命 令数组,发送完后置象征位;接纳接连接纳plc回来的照料数组,存入接纳数组,并置象征位,且假定照料精确,留下主机处理。
  (5) 读n个位变量(线圈)
  void protocolread_bit(unsigned char deviceaddr/* plc局号*/, unsigned char regtype/*寄存器类型*/, unsigned int bitaddr/*初步地址*/, unsigned char subaddr/*子地址*/, unsigned int bitnum/*位数*/)
  函数功用:依据函数参数,构成读n个位变量的 指令数组,建议发送。等候发送完并接纳完(如超时未接纳完则从头发送)。剖析接纳数组:精确,保留读取的数据;差错,从头发送。
  (6) 写一个位变量
  void protocolsetbit(unsigned char deviceaddr/* plc局号*/, unsigned char regtype/*寄存器类型*/, unsigned int bitaddr/*地址*/, unsigned char subaddr/*子地址*/, unsigned int clrset/*写值“1”或“0”*/)
  函数功用:依据函数参数,构成 置某位变量为“1”或“0”的指令数组,建议发送。等候发送完并接纳完(如超时未接纳完则从头发送)。剖析接纳数组:精确,回来;差错,从头发 送。
  (7) 读n个字节变量
  void protocolreadbyte(unsigned char deviceaddr/* plc局号*/, unsigned char regtype/*寄存器类型*/, unsigned int regaddr/*初步地址*/, unsigned char subaddr/*子地址*/, unsigned int regnum/*个数*/)
  函数功用:依据函数参数,构成读n个字节变量的指令数组,建议发送。等候发送完并接纳完(如超时未接纳完则从头发 送)。剖析接纳数组:精确,保留读取的数据;差错,从头发送。
  (8) 写n个字节变量
  void protocolsetbyte(unsigned char deviceaddr/* plc局号*/, unsigned char regtype/*寄存器类型*/, unsigned int regaddr/*初步地址*/, unsigned char subaddr/*子地址*/, unsigned int regnum/*个数*/)
  函数功用:依据函数参数,构成写n个字变量的指令数组 (要写的数从某参数数组中读取),建议发送。等候发送完并接纳完(如超时未接纳完则从头发送)。剖析接纳数组:精确,回来;差错,从头发送。
  以上的程序现现已过试验,并运用于实习的人机体系中。依照相似的办法,可以编写别的禁绝则功用的程序,完结对plc的禁绝则操控和操作。运用单片机和plc进 行优势互补,可以构成网络化、智能化的工业操控体系。别的悉数单片机体系程序用c51言语编程,程序简练,便于阅览与调试。单片机和人机界面联络可以实时 的显现plc的作业状况,实时的操控、设置、调整plc作业状况,前进工业操控的主动化程度和实时性。

上一篇:西门子PLC地址寄存器装入和传送

下一篇:三菱PLC与位移传感器联接还要A/D、D/A模块吗

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部