Wed

26

May

2010

世纪星标准Modbus协议驱动揭秘(三)——设备初始化字设置技巧

在前两期的《世纪星月刊》中已经详细介绍了Modbus的基本概念和类型,作为工业控制系统中的一种通用协议,为很多仪表厂家所使用。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。虽然Modbus有其标准的传输格式,但在一些细节方面,各个厂家所支持的Modbus协议还是有些差别。
  过去,在我们为客户做技术支持时常会发生这样的情况,由于仪表支持的Modbus协议与我们软件所支持的有一些细微区别,就会导致世纪星读出的数据与实际数据不符合。要解决这个问题,就必须重新定制一个驱动提供给客户进行更新,这样一来,对于客户或者对于我们技术支持人员都会耽误一定的时间,而且,某些客户的现场没有条件上网进行驱动更新,这样就给客户造成了更大的不便。
  为解决这一问题,我们在总结常遇问题的基础上,对世纪星中的Modbus驱动进行了改善,可以通过Modbus设备初始化字设置直接解决以下三个问题:
  1)16位整数的字节顺序的调整;
  2)32位整数(或实数)字顺序的调整;
  3)写单个寄存器时所使用功能码的选择。

世纪星组态软件
图1 Modbus设备设置初始化字的格式


  如图1所示,初始化字格式为(XXX),每个X的值为1或者为0,括号为半角符号,当初始化字设置为空时,系统默认为(000)。
  第一,16位整数的字节顺序的调整:
  第一个X:值为0时,表示16位整数传送时高字节在前,低字节在后;值为1时,表示16位整数传送时低字节在前,高字节在后。
  例:设备传送的16位整数(即两个字节):12H 34H。当X值为0时,赋值给变量的数据为1234H(十进制数为4660);当X值为1时,赋值给变量的数据为3412H(十进制数为13330)。
  第二,32位整数(或实数)字顺序的调整:
  第二个X:值为0时,表示32位数据低字在前,高字在后;值为1时,表示32位数据高字在前,低字在后。当读取的数据为32位的长整型或浮点数时,要搭配第一个X和第二个X配置读取数据的字节顺序。
  以长整型为例:
  设备传送的32位整数(即四个字节):12H 34H 56H 78H。
  当XX值为00时,赋值给变量的数据为56781234H(十进制数为1450709556);
  当XX值为01时,赋值给变量的数据为12345678H(十进制数为305419896);
  当XX值为10时,赋值给变量的数据为78563412H(十进制数为2018915346);
  当XX值为11时,赋值给变量的数据为34127856H(十进制数为873625686)。
  第三,写单个寄存器时所使用功能码的选择:
  第三个X:X值为0时,使用06(06H)号功能码向设备写入单字整数数据;X值为1时,使用16(10H)号功能码像设备写入单字整数数据。
  例如:上位机要将设备地址为2,寄存器地址为5的16位寄存器设置为18(12H):
  当X值为0时,上位机发送的命令为:02 06 00 05 00 12 19 F5;
  第一个字节:02,表示设备地址;
  第二个字节:06,为功能码字节,06号功能码的作用为预置单个16位寄存器;
  第三第四个字节:0005,表示的是上位机发送命令所预置的寄存器的地址;
  第五第六个字节:0012H,表示上位机要将地址为5的16位寄存器设置为18(12H);
  第七第八个字节:19 F5,为CRC校验字节。
  当X值为1时,上位机发送的命令为:02 10 00 05 00 01 02 00 12 70 D3。
  第一个字节:02,表示设备地址;
  第二个字节:10H(十进制为16),为功能码字节;
  第三第四个字节:0005,表示的是上位机发送命令所预置的多个寄存器的起始地址为0005H;
  第五第六个字节:0001,表示上位机要进行设置的寄存器个数;
  第七个字节:02,表示后面跟着的2个字节数据是要预置到指定寄存器中去的;
  紧跟在第七个字节后的两个字节便是要预置到指定寄存器中的数据了;
  最后两个字节:9C08,为CRC校验字节。
  当初始化字为空或者三个X值都为0时,世纪星采用原版的Modbus驱动解析数据的方式进行存取数据。因此用户在使用Modbus驱动进行通信时,可以暂时不设置初始化字,当取出的数据与实际的数据相差较大时,再参考这篇文章进行调试,或者可直接联系我们世纪星的技术支持人员帮助您调试。
  到此,关于Modbus的内容先暂告一段落,谢谢您的关注。

0 Comments

Wed

26

May

2010

世纪星标准Modbus协议驱动揭秘(二)

 在工业自动化发展的进程中,Modbus成为了工业控制系统中的一种通用协议。由于该协议的简单且通用,得到众多仪表厂商的支持,成为仪表及智能终端的一项工业标准,在工业监控系统中得到广泛的应用。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以进行通信。它的开放性、可扩充性和标准化使不同厂商生产的控制设备可以简单可靠地连成工业网络,进行系统的集中监控,从而成为最流行的协议之一。同样,世纪星组态软件也提供支持上位机和下位设备进行Modbus通信的驱动程序,使用户可以方便地使用装有世纪星软件的上位机和下位的设备进行通信。

1、Modbus 设备选择
  进入世纪星设备列表PLC大类中的标准Modbus协议,可以看到我们有5种Modbus设备,分别是Modbus RTU(十进制地址)、Modbus RTU(十六进制地址)、Modbus ASCII(十进制地址)、Modbus ASCII(十六进制地址)以及Modbus TCP/IP(十进制地址)。
  首先,Modbus的三种通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP/IP世纪星都全面支持,用户可以根据设备的通讯说明进行相应的选择。
  其次,Modbus设备十进制和十六进制的区分除了方便一部分用户的同时,在设备选择的方面也给另一部分的用户造成困扰,针对这个问题我会给大家两点解释,第一:同样的一个设备,如果用十进制地址的Modbus驱动能连接得上的话,用十六进制地址的Modbus驱动肯定也没问题,确定这点之后,我们提前预想周全的贴心功能就不会在选择设备时给您造成困扰了。第二:Modbus协议已经成为工业控制系统中的一种通用协议,很多仪表厂商都采用Modbus协议与上位机进行通信,有些厂商协议的说明文档中,采用十进制的寄存器地址说明,如表1所示。
  而有些厂商采用十六进制的寄存器地址说明,如表2所示。为避免用户在连接变量时再去做繁琐的十进制和十六进制的转化工作,我们将Modbus RTU以及Modbus ASCII分别做成用十进制的寄存器地址连接变量的驱动和用十六进制的寄存器地址连接变量的驱动。举个例子(假定表1表2中列出的寄存器支持03号功能码),对于表1这样的协议说明方式,我们可以选择十进制的Modbus驱动,用4x10这个寄存器连接环境温度这个参数;而对于表2这样的协议说明方式,我们可以选择十六进制的Modbus驱动,用4 x 000A这个寄存器连接环境温度参数。

世纪星组态软件
表一

世纪星组态软件
表二

2.寄存器连接
  要正确连接一个寄存器,有三个关键信息要从协议说明文档中获得:第一是该寄存器支持的功能码,第二是该寄存器的地址,第三是该寄存器的数据类型。
  1)功能码
  世纪星是根据Modbus协议中的功能码来区别寄存器名称,具体信息如表3所述:

世纪星组态软件

表三

  在厂商所提供的协议说明文档中,都会注明寄存器所支持的功能码,用户可以根据上述表格对世纪星里的寄存器进行选择。例如:支持03H功能码的就选择4x,支持01H功能码的就选择0x。
  2)寄存器地址
  寄存器地址在协议说明文档中都会比较直观的列出,参看表1、表2,每个具体的参数都会对应一个寄存器地址,连接寄存器时只要将地址号连接在相应的寄存器名后面即可。
  3)数据类型
  位寄存器的连接方式比较单一,如图1所示。变量类型为I/O离散,数据类型为BIT,根据功能码选择寄存器名,并加上寄存器地址就可以正确连接该位寄存器。

世纪星组态软件

图一


  模拟量寄存器的连接方式就比较多样化,如表4所示(下面对于寄存器名和寄存器地址暂不进行说明)。

世纪星组态软件

表四

世纪星组态软件

表五


  主电机电压:变量类型选择I/O整数,数据类型选择LONG(有符号32位整数);
  主电机电流:变量类型选择I/O实数,数据类型选择FLOAT(我们的浮点数格式符合IEEE754标准);
  环境温度:变量类型选择I/O整数,数据类型选择UINT(无符号16位整数);
  T1:变量类型选择I/O整数,数据类型选择INT(有符号16为整数);
  T2:变量类型选择I/O整数,数据类型选择BCD(16位BCD码);
  T3:变量类型选择I/O实数,数据类型为UINT或者INT,由于传送数据是实际值的100倍,所以在定义变量时需要做一个线性变换,如图2所示,使最大值[IO]为最大值的100倍,最小值[IO]是最小值的100倍,并在转换选项中选择线性转换就可以在工程中直接显示实际值;

世纪星组态软件
图二


  STATUS:变量类型选择I/O整数,数据类型选择UINT,需要在工程中对STATUS中的某个位进行显示和设置时,要使用世纪星中的Bit(Tagname,BitNo)和BitSet(“Tagname”,BitNo,Discrete_Value)这两个函数,具体的使用方式可以参考世纪星中的函数说明。

  今天给大家介绍了如何选择Modbus设备以及如何连接寄存器,对于标准的Modbus协议来说,掌握这些已经可以从设备中读出一个正确的数据,但有些厂家的Modbus协议在字节顺序以及功能码的使用方面和标准Modbus协议,是有一些小的出入,针对这种情况,我们的Modbus驱动也做了相应的调整,通过设置初始化字解决这个问题,其具体的设置方式我将会在下一篇介绍给大家,感谢您的关注!■

0 Comments

Wed

26

May

2010

世纪星标准Modbus协议驱动揭秘(一)

MODBUS协议是莫迪康公司1978年发明用于电子控制器进行控制和通信的协议。不同厂商生产的符合MODBUS协议的控制设备可以连成工业网络,进行集中监控。MODBUS协议采用主从(master-slave)技术,是一种问答方式的通信协议。每次通信均由主机发出数据请求信息,从机接收到正确消息后就可以发送数据到主机以响应请求;主机也可以直接发信息修改从机的数据,实现双向读写。  

在具体介绍Modbus协议之前,先向大家简单介绍一下设备中的数据如何存储。我们常把设备中存储数据的单元称为寄存器,按照存储数据的类型可以分为位寄存器和16位寄存器两种,如图1所示:

世纪星组态软件

图1

  位寄存器的容量为1位,16位寄存器的容量为16位,每一个存储数据的寄存器都有一个对应的寄存器地址,Modbus协议就是根据寄存器地址来查询数据或者设置数据到特定的寄存器中。如图1所示,位寄存器用来存储离散值,即开关量;16位寄存器用来存储16位整数,16位寄存器里的数据既可以独立表示一个16位整数,也可以用两个连续的16位寄存器表示32位整型或实型的数据,低地址存放低16位,高地址存放高16位。
  接下来详细介绍Modbus协议。Modbus协议分为三种通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP。
  首先,Modbus TCP的通信格式和Modbus RTU非常相似,唯一的差别只是Modbus RTU最后带两个字节的CRC校验,而Modbus TCP没有。
  其次,Modbus ASCII的通信格式与Modbus RTU其实“神合貌离”,就是把Modbus RTU的每一个字节(例如:27H)高四位(2)和低四位(7)拆分为两个字节,并以ASCII码的方式表现出来(32 37),再给命令帧分别加上起始符和结束符便可以,当然Modbus RTU和Modbus ASCII的校验的方式不同,这里暂不详述,所以同一条命令用Modbus RTU方式和Modbus ASCII方式表现出来,虽然在命令长度的上有很大的区别,但其实际表达的意思却是一样。
  下面就以Modbus RTU为例,详细表述世纪星组态软件是如何读取设备中的数据,并且将数据设置到设备中。

1.读数据:
  上位机发送命令:02 03 00 05 00 02 D4 39
  设备返回的数据:02 03 04 20 08 20 10 49 3D
  之前没有接触过Modbus RTU协议的朋友们看了上面列出的数据,会稍有不解,这里为大家详细解释一下。
  1)发送的命令:
  第一个字节:02,它表示的是设备地址。在同一条485总线上,可能会接多个设备,而这个设备地址就相当于每一个设备的标识,继而决定每一个设备的设备地址在同一条总线上必须是唯一。
  第二个字节:03,这个字节是功能码字节,作用就是告诉设备,上位机想要读取的是什么样的数据,世纪星组态软件支持的读数据的功能码有:01H、02H、03H和04H,具体含义请参照表1。

世纪星组态软件
表1

  第三第四个字节:00 05,表示的是一个寄存器地址,它告诉设备上位机想要读取的数据,是从寄存器地址5开始的一个或多个寄存器里的数据。
  第五第六个字节:00 02,表示的是读取寄存器的个数,结合第三第四个字节,就是告诉设备,上位机想要读取的数据是从寄存器地址5开始的2个寄存器里的数据,即寄存器地址为5和6的寄存器里的数据。
  第七第八个字节:D4 39,是CRC校验码,不论是读数据还是设置数据,发送和返回命令里的最后两个字节都是CRC校验码,具体的计算方法这里暂不详述。

  2)返回的数据:
  第一个字节:02,表示设备地址,作用同发送命令中第一个字节02。
  第二个字节:03,表示功能码,作用同发送命令中第二个字节03。
  第三个字节:04,表示返回有效数据的字节个数,这里要说明一下的是对于位寄存器(包括表1中的线圈状态和输入状态),每一个寄存器的容量只有一位,如果上位机发送的命令中要求连续读8个位寄存器(即发送命令中的第五第六个字节为00 08),设备返回的数据中的第三个字节只为1,因为一个字节的容量为8位,可以表示8个位寄存器的状态。而对于表1中的保持寄存器和输入寄存器,每一个寄存器的容量为16位,它可以表示一个16位的整型数据,或者一个32位整型或实型数据的高16位或低16位。所以设备回传一个保持寄存器或输入寄存器的数据需要两个字节,这就解释了发送命令中要求读取2个保持寄存器的数据,设备返回的有效数据为4个字节。
  紧跟在第三个字节后面的4个字节的数据便是设备返回的有效数据,结合发送的命令,我们可知在寄存器地址为0005H的寄存器中存储的数据为2008H(十进制为8200),寄存器地址为0006H的寄存器中存储的数据为2010H(十进制为8208)。
  第八第九个字节:49 3D,是CRC校验码。

2. 写数据
  1)写位寄存器
  上位机发送命令:02 05 00 05 FF 00 9C 08
  设备返回的数据:02 05 00 05 FF 00 9C 08
  第一个字节:02,表示设备地址,这里就不做重复介绍。
  第二个字节:05,为功能码字节,05号功能码的作用为强置一个位寄存器的0/1(ON/OFF)状态。
  第三第四个字节:0005,表示的是上位机发送命令所强置的寄存器的地址。
  第五第六个字节:FF00H,表示上位机要将地址为5的位寄存器强置为1,当强置为0时,第五第六个字节为:00 00。
  第七第八个字节:9C 08,为CRC校验字节。
  设备正常返回时,返回的数据与上位机发送的命令是完全一致的。

  2)写单个16位寄存器
  上位机发送命令:02 06 00 05 00 12 19 F5
  设备返回的数据:02 06 00 05 00 12 19 F5
  第一个字节:02,表示设备地址。
  第二个字节:06,为功能码字节,06号功能码的作用为预置单个16位寄存器。
  第三第四个字节:0005,表示的是上位机发送命令所预置的寄存器的地址。
  第五第六个字节:0012H,表示上位机要将地址为5的16位寄存器预置为12H(十进制为18)。
  第七第八个字节:19 F5,为CRC校验字节。
  设备正常返回时,返回的数据与上位机发送的命令完全一致。

  3)写多个16位寄存器
  上位机发送命令:02 10 00 06 00 02 04 01 02 00 00 DC FD
  设备返回的数据:02 10 00 06 00 04 21 F8
  发送的命令:
  第一个字节:02,表示设备地址。
  第二个字节:10H(十进制为16),为功能码字节,10H号功能码的作用为预置多个16位寄存器。
  第三第四个字节:0006,表示的是上位机发送命令所预置的多个寄存器的起始地址为0006H。
  第五第六个字节:0002,表示上位机要连续预置连续的两个寄存器。
  第七个字节:04,表示后面跟着的4个字节数据是要预置到指定寄存器中去的。
  紧跟在第七个字节后的四个字节便是要预置到指定寄存器中的数据,结合前面的信息,我们知道这条命令是要将0102H(十进制为258)预置到地址为6的寄存器中,0000H预置到地址为7的寄存器中。
  最后两个字节:9C08,为CRC校验字节。
  返回的数据:
  第一个字节:02,表示设备地址。
  第二个字节:10H(十进制为16),为功能码字节。
  第三第四个字节:0006,表示的是上位机发送命令所预置的多个寄存器的起始地址位0006H。
  第五第六个字节:0004,表示上位机预置了连续的两个寄存器即4个字节的有效数据。
  第七第八个字节:19 F5,为CRC校验字节。
  无论是强制位寄存器还是预置16位寄存器,设备返回数据的作用仅仅是告诉上位机数据已经成功设置到设备寄存器中了。

  关于Modbus RTU协议格式的暂时介绍到这里,希望这篇文章可以让对通信协议不了解甚至没有接触过Modbus协议的朋友们对Modbus有初步的认识。在下一期的《世纪星月刊》中,我会继续介绍世纪星组态软件对Modbus 协议的支持情况,希望会对世纪星的广大用户有所帮助。

2 Comments

Wed

26

May

2010

认识组态软件

1 引言
  经常听到“组态软件”这个词,到底什么是组态、组态软件有什么特点及组态软件在哪些领域应用却并不是十分了解,基于上述问题,本文作出相关的解释和讨论。

2 什么是组态软件
  提到组态一词,组态英文是“Configuration”,简单的讲,组态就是用应用软件中提供的工具、方法、完成工程中某一具体任务的过程。与硬件组装类似,在组装一台电脑时,我们准备好各个部件,如主板、机箱、电源、磁盘、显示器等,这些部件都有标准接口,按照固定方法装在一起即可,仔细考虑一下这样的“组装方法”形式相对固定,我们在使用电脑时一般不会随意更换哪个硬件。
  而“组态”,从Configuration翻译过来有“配置”、“构造”的意思,也就是说“组态”是面向可配置的事物,相对于“组装”是动态的,我们可以在其运行期间改变其状态。我们都知道硬件是计算机的躯壳,软件是计算机的灵魂,躯壳是可见并且基本定型的,而灵魂我们看不见,不知道灵魂在做什么,就像你坐在那里我们不知道你在想什么,也许你在想着下班吃什么,也许你在想着明天玩什么,但我们可以观察出你的神态,想好事的时候面带喜悦,想愁事的时候面带愁容,组态软件就是通过计算机软件来表现出我们所关心的事物的运行或者说内部状态,让我们对所关心事物有个直观的了解。

3 组态软件的起源和现状
  在组态软件出现之前,工业控制一般都采用纯粹编程方式,使用ASIC、C、FORTRAN等语言实现一些控制逻辑和控制算法,使用这种方式工作量太大,开发周期长,而且对于每个项目基本上都要重新编写程序,对技术人员的编程水平也有相当的要求,而实际中存在一个矛盾,熟悉工控理论的人并不是十分精通编程,编程高手也不熟悉控制理论,为了处理这个矛盾,人们设想有这样一种软件——即使对计算机不是很熟悉的人也能使用它进行控制系统的开发,对于工控技术人员简单易用,这样的想法就促使了组态软件的产生。
  组态软件最早出现在80年代初,80年代的组态软件基于DOS系统开发,当时主要产品是Onspec、Paragon和IFix 等。在90年代中期之前,组态软件在我国的应用并不普及,究其原因有几下几点:一、国内用户缺乏对组态软件的认识,项目中没有组态软件的预算,或宁愿投入人力物力针对具体项目做长周期的繁冗的上位机的编程开发,也不采用组态软件;二、在很长时间里,国内用户的软件意识还不强,面对价格不菲的进口软件(早期的组态软件多为国外厂家开发),很少有用户愿意去购买正版;三、当时国内的工业自动化和信息技术应用的水平还不高,组态软件提供对大规模应用、大量数据进行采集、监控、处理并可以将处理的结果生成管理所需的数据,这些需求并未完全形成。
  随着我国工业的发展和计算机技术的进步,国内出现众多组态软件,目前中国市场上的组态软件产品按厂商可大致划分为三类,即国外专业软件厂商提供的产品,国外硬件或系统厂商提供的产品,以及国内自行开发的国产化产品。从近几年的调查结果来看,国内组态软件市场大部分份额仍被国外几家组态软件占据,如:FIX、InTouch等。这些“洋软件”在功能完备性、产品包装、市场推广等方面具有一定优势,但并非所有方面都尽善尽美,相比而言,国内组态软件具有价格较低、通用性强、可定制性强,一些厂家可以根据客户需求对软件的部分进行修改,如CenturyStar可以免费为客户提供驱动程序,只要客户提供所使用设备的通信协议即可,总而言之,无论国内还是国外的组态软件厂家都各有优势。

4 组态软件的特点及发展趋势
  组态软件有通用和专用之分,如WinCC主要用于与西门子相关产品配套,而像世纪星组态软件属于通用组态软件,因为其可以根据不同设备配置不同驱动程序,而不用修改主程序,总结通用组态软件的主要特点如下:
  1)延续性和可扩充性。用通用组态软件开发的应用程序,当现场(包括硬件设备或系统结构)或用户需求发生改变时,不需作很多修改而方便地完成软件的更新和升级;
  2)封装性(易学易用)。通用组态软件所能完成的功能都用一种方便用户使用的方法包装起来,对于用户,不用掌握太多的编程语言技术(甚至不需要编程技术),就能很好地完成一个复杂工程所要求的所有功能;
  3)通用性。每个用户根据工程实际情况,利用通用组态软件提供的底层设备(PLC、智能仪表、智能模块、板卡、变频器等)的I/O Driver、开放式的数据库和画面制作工具,就能完成一个具有动画效果、实时数据处理、历史数据和曲线并存、具有多媒体功能和网络功能的工程,不受行业限制。

  随着工业控制系统的应用深入,工业规模不断扩大,控制系统也会更加复杂,对组态软件会提出更高的要求,这也是组态软件发展的源动力,通过分析工控系统的特点及现状,组态软件有如下几个发展趋势:
  1)运行更加稳定,执行效率更高,使用更加容易,这是组态软件的初衷,也是必然的发展方向。
  2)更好的人机交互。人机交互是组态软件最重要、最基本的功能之一,良好的人机交互不仅利于开发人员对控制系统的开发,而且也利于使用人员对工艺现场的监控。
  3)能满足客户个性化需求。随着组态软件市场的扩大,组态软件将应用于各个行业,而各行业都有其不同的特点,根据行业特点制定相应的组态软件将给该行业的相关人员带来极大的便利。
  4)具有很好的开放性。没有哪个组态软件是完美的,用户总会用不同的想法和需求,能够使用户在使用现有功能的基础上进行自定义功能的开发(如自定义控件等)是最好的解决办法,这也是组态软件的开放性。
  5)获取信息更加便利。这是一个信息化时代,随着通信及网络技术的发展,各个控制系统将不再是信息孤岛。单就一个企业而言,车间之间、工厂之间、从工业现场到高层管理将趋于一个整体。对于整个市场而言,企业之间也相互联系,及时获取当前的市场信息更有利于提供企业的效益和竞争力。
  6)与其他系统的交互操作。组态软件并不能解决所有问题,往往一个大型的系统都要有多个软件协同完成,这就需要组态软件预留与其他系统交互的接口,以便于在不同系统之间的通信。

5 小结
  通过本文的介绍,我们可以对组态软件有一个更清晰的认识,并且对组态软件的产生、现状及发展趋势都有了一定的了解。 ■

0 Comments