CN101702119B - 面向设备的编程技术与方法 - Google Patents

面向设备的编程技术与方法 Download PDF

Info

Publication number
CN101702119B
CN101702119B CN200910042351.8A CN200910042351A CN101702119B CN 101702119 B CN101702119 B CN 101702119B CN 200910042351 A CN200910042351 A CN 200910042351A CN 101702119 B CN101702119 B CN 101702119B
Authority
CN
China
Prior art keywords
frame
byte
function
equipment
main control
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN200910042351.8A
Other languages
English (en)
Other versions
CN101702119A (zh
Inventor
周立功
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Zhiyuan Instrument Co Ltd
Original Assignee
Guangzhou Zhiyuan Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Zhiyuan Electronics Co Ltd filed Critical Guangzhou Zhiyuan Electronics Co Ltd
Priority to CN200910042351.8A priority Critical patent/CN101702119B/zh
Publication of CN101702119A publication Critical patent/CN101702119A/zh
Application granted granted Critical
Publication of CN101702119B publication Critical patent/CN101702119B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明属于嵌入式系统软件领域,涉及嵌入式系统面向设备的编程技术与方法,包括软件编程方法、应用程序编程接口、驱动程序编程接口和通讯协议。目的在于,既提供了一个革命性的嵌入式系统编程思想,并且提供了其实现方法。本设计公开了一种编程思想和实现方法,包含编程思想、应用程序编程接口、默认通讯协议、多协议多网络支持技术、协议及链路自动动态匹配技术,其特征在于用设备地址和端口地址共同唯一识别整个网路或系统中特定的功能,并包含端口属性定义、返回值定义、主控设备编程接口、被控设备编程接口、主控设备通讯协议驱动编程接口、被控设备通讯协议驱动编程接口、默认通讯协议的驱动编程接口、默认通讯协议工作模式、默认通讯协议工作模式帧结构等。

Description

面向设备的编程技术与方法
技术领域
本发明属于嵌入式系统软件领域,更具体地说是涉及嵌入式系统面向设备的编程技术与方法,包括软件编程方法、应用程序编程接口、驱动程序编程接口和通讯协议。
背景技术
嵌入式系统与通用计算机系统同源,可是因为应用领域和研发人员的不同,嵌入式系统很早就走向相对独立的发展道路,其编程模式与通用计算机系统有较大的区别。一般来说,嵌入式系统传统编程模式有面向寄存器的编程模式、面向API的编程模式、面向端口的编程模式等,其中面向寄存器的编程模式仍然占主导地位。
所谓面向寄存器的编程就是软件直接操作硬件提供的编程接口来编写嵌入式软件。目前,本地硬件提供的编程接口大多数为寄存器,映射到软件能够直接访问的I/O空间或Memory空间,至于远程硬件,一般需要通过本地的硬件通讯接口来访问,而这个本地的硬件通讯接口也是需要编程的,它也有寄存器。所以,一般来说,对于所有硬件的访问,都是按照特定顺序对一个或多个寄存器进行编程。因此这种编程方式就称为面向寄存器的编程。
面向寄存器的编程模式非常麻烦,效率低下,不是人人都能胜任的。为了方便嵌入式软件的编写,有些公司编写了软件把硬件屏蔽起来形成API,其它软件则通过API接口访问硬件。这种通过第三方软件提供的接口来访问硬件的编程模式就是面向API的编程模式。
面向API的编程模式只需要对硬件细节有大概的了解即可,但需要对API手册进行详细的阅读才能开发。而不同系统的API可能完全不同,换一种系统,开发人员需要重新熟悉新的API,并且,不同系统的API功能和性能差异极大,对开发人员的要求也有较大的差别。
面向端口编程是PLC(可编程逻辑控制器)的编程模式。PLC把所有硬件都虚拟成端口,通过对端口的读写完成对硬件的控制。PLC最初是为了替代继电器编程,对于复杂程序的支持还是比较弱,对于远程硬件的支持也比较弱(主要是支持PLC厂商自己的配件)。
传统编程模式对比各种嵌入式系统传统的编程模式各自有各的特点,总结见表1。
传统编程模式的困境
嵌入式系统的历史几乎和通用计算机系统的历史一样长。最初,嵌入式系统都是独立工作的。传统的编程模式都是面向独立的微控制器(微处理器),操作的硬件都是本地硬件。
随着时间的推移,嵌入式系统由独立工作走向了网络控制,典型的系统就是集散控制系统,此时,嵌入式系统的编程模式依然是面向独立的微控制器(微处理器)。要把这些嵌入式系统组成网络,需要为所有控制器增加兼容的通讯接口硬件,并设计兼容的通讯协议。而且,每个系统需要对硬件通讯接口进行编程、对通讯协议编程后才可能组成网络。这个设计无疑是复杂的。
对于联网的控制系统,传统编程模式的对比见表2。
现在,组网的范围更加广泛,不但需要本地组网,还需要远程组网,不但控制设备之间需要互连,控制设备与普通计算机之间还需要互连,以及不同厂商的设备之间也要互连,这些要求无疑更加剧了系统编程的复杂性。
针对目前嵌入式系统设计的困境,提出“面向设备的编程”这一个概念,让研发人员不需要考虑硬件细节和网络细节,使用同一种方式操作本地硬件和远程硬件。与传统编程模式不同,面向设备的编程模式把所有通过网络连接的嵌入式系统和计算机作为一个整体考虑,研发人员只需要知道设备地址和设备内端口地址的分配即可,不需要知道设备如何连接到系统,可以通过有限的几个函数操作设备。
发明内容
为解决现有技术嵌入式系统互联系统中,对本地设备和远程设备的访问需要调用不同的接口函数,给编程人员带来大量繁琐的工作量的技术问题,本发明提供一种面向设备的编程方法。
一种面向设备的编程方法,包括:
把所有用网络连接起来的嵌入式系统作为一个整体来考虑,编程不区分远程设备和本地硬件,使用同样的接口访问本地硬件和远程设备;嵌入式系统包括主控设备和被控设备,以设备地址唯一识别设备,设备地址与通讯协议无关,以端口地址唯一识别设备的内部功能;设备地址和端口地址两者共同确定网络中设备的内部功能,对设备地址和端口地址的读写操作控制网络中设备的内部功能;其中,设备地址是设备在整个系统中的唯一标识;端口地址是端口在设备内的唯一标识;
被控设备给主控设备提供端口,主控设备实现协议及链路自动动态匹配,通过远程调用来控制被控设备;当主控设备调用面向设备的编程的主机接口核心函数时,对应的被控设备执行相应的函数。
一、基本概念
(1)设备:设备是主控器与它可直接访问的本地硬件。主控器一般包括微控制器、微处理器、DSP、FPGA等。
(2)设备地址:设备地址是设备在整个系统中的唯一标识,只要设备在系统中,无论设备在那里,都可以通过设备地址访问它,设备地址是一个32位的无符号整数。
(3)主控设备:所谓主控设备,是一个与被控设备相对而言的设备。主控设备是处于主导地位、控制其它的设备。
(4)被控设备:被控设备是接受主控设备控制的设备。
(5)混合设备:如果一个设备即需要控制别的设备又可接受别的设备控制,它就是混合设备。
(6)端口:端口是虚拟内存,对某一个特定端口的读写可实现设备的特定功能。被控设备具有端口,主控设备不具备端口。
(7)端口地址:端口地址是端口在设备内的唯一标识,端口地址是一个32位无符号整数。
(8)端口组:端口组是具有同样属性的连续端口的组合。
二、技术特点
(1)使用ANSI C编程,将来可能增加编程语言支持。
(2)编程接口统一,无论操作设备的什么功能,都使用有限的几个函数操作。
(3)编程不区分远程设备和本地硬件,系统保留一个系统地址(符号:AW_LOCAL_ADDR,值:0x00000000)用于识别本地设备,用这个地址操作的就是本地设备。这样,设备可以使用同样的接口访问本地硬件和远程设备。
(4)多协议多网络支持:默认协议计划支持RS232、RS485、RS422、以太网、CAN、USB等网络。计划支持ModeBus、iCAN、CANOpen、DeviceNet、J1939、DMX512、MVB等协议与网络,用户还可以通过多协议接口增加特定的协议。
(5)协议及链路自动动态匹配:研发人员只需要知道设备的地址就可以编程,而不需关心主控设备与被控设备之间的网络与协议匹配问题。系统会自动选择两者均支持(并且当前网络结构支持)的协议。如果网络结构发生变化,系统会再次主动选择协议。这些过程都是透明的,研发人员无需关心。
(6)与操作系统无关:本系统使用ANSI C编程,可以移植到所有常见的嵌入式操作系统和PC操作系统中。
(7)与CPU体系结构无关:本系统使用ANSI C编程,可以移植到常见的CPU体系结构中。
(8)提供被控设备编程接口:用户可以通过这个接口实现接入特定的被控设备。
面向设备的编程把所有用网络连接起来的嵌入式系统作为一个整体来考虑,依据其在系统中的作用,把嵌入式系统分为主控设备和被控设备两类。当然,一个嵌入式系统可能即是主控设备,又是被控设备,这可以把它看做两个逻辑设备。这样,整个系统中只有主控设备和被控设备两个部分。
主控设备是整个系统的核心,用于整个系统或子系统的逻辑控制或人机接口。通常的,主控设备并不直接控制被控对象。在面向设备的编程中,“协议及链路自动动态匹配”在主控设备中实现,因此主控设备比较复杂。
被控设备是直接控制对象的,数目众多。为简化被控设备的设计和减低成本,面向设备的编程中被控设备设计成“被动应答”方式工作,没有“协议及链路自动动态匹配”过程,也不会主动联系主控设备。
主控设备通过远程调用来控制被控设备。每当主控设备调用面向设备的编程的主机接口核心函数时,对应的被控设备执行相应的函数。被控设备的函数执行完毕后,把返回值和执行结果反馈给主控设备,主控设备获得执行结果,函数返回。主控设备与被控设备的远程函数调用关系。他们每一对函数的返回值类型都是一样的,参数也十分相似,只是主控设备多一个用于指明被控设备的参数。
三、发明的效果
面向设备的编程模式是由面向API的编程方式和面向端口的编程方式集合发展而来的,具有两者的优点,避免了各自的缺点,同时极大地增强了组网能力。
这里假定需要开发控制远程蜂鸣器的嵌入式系统,其开发流程见图1。图1的左边是开发步骤,右边是对应的系统结构。
通过查看远程设备图,得知蜂鸣器的端口地址为0x1111,写1为鸣叫,写0为停止鸣叫,程序代码如程序清单1所示。
程序清单1面向设备的编程控制远程设备的蜂鸣器鸣叫
可以看出,这种编程模式非常简单。面向设备编程模式与传统编程模式的对比见表3。
附图说明
图1面向设备的编程技术与方法组成框图
图2面向设备的编程基本硬件框图
图3面向设备的编程步骤
图4ARP表中存在远程设备
图5ARP请求添加设备
图6主控设备访问远程设备
图7应答返回
具体实施方式
一、总体设计思想
面向设备的编程把所有用网络连接起来的嵌入式系统作为一个整体来考虑,依据其在系统中的作用,把嵌入式系统分为主控设备和被控设备两类。当然,一个嵌入式系统可能即是主控设备,又是被控设备,这可以把它看做两个逻辑设备。这样,整个系统中只有主控设备和被控设备两个部分。
主控设备是整个系统的核心,用于整个系统或子系统的逻辑控制或人机接口。通常的,主控设备并不直接控制被控对象。在面向设备的编程中,“协议及链路自动动态匹配”在主控设备中实现,因此主控设备比较复杂。
被控设备是直接控制对象的,数目众多。为简化被控设备的设计和减低成本,面向设备的编程中被控设备设计成“被动应答”方式工作,没有“协议及链路自动动态匹配”过程,也不会主动联系主控设备。
主控设备通过远程调用来控制被控设备。每当主控设备调用面向设备的编程的主机接口核心函数时,对应的被控设备执行相应的函数。被控设备的函数执行完毕后,把返回值和执行结果反馈给主控设备,主控设备获得执行结果,函数返回。主控设备与被控设备的远程函数调用关系见表4。他们每一对函数的返回值类型都是一样的,参数也十分相似,只是主控设备多一个用于指明被控设备的参数。
二、基本框图
面向设备的编程的基本框图见图3。由图3可知,面向设备的编程主控设备由应用程序、设备搜索引擎、协议驱动管理、协议驱动和物理链路组成。而被控设备由初始化程序、设备端口管理层、端口组管理层、协议驱动、硬件驱动、物理硬件和物理链路组成。
三、一般处理流程
图4-图7为主控设备访问远程设备中函数awRead()的一般处理流程,主控设备首先查找ARP表,如果ARP表中存有被控设备信息,调用被控设备函数开始执行,如图4所示。如果ARP表中不存在此远程设备的情况,则需要请求添加此设备,如图5所示。在远程设备添加成功后,调用被控设备函数开始执行,如图6所示。为程序处理完的应答返回,如图7所示。函数awWrite()、函数awReadEx()和函数awWriteEx()的处理流程与函数awRead()相似,这里不再给出。
四、用户编程接口
(1)端口属性
每一个端口都有自己的属性。目前,端口由两个子属性组成,分别是读写属性和端口位宽,下面分别介绍。
1.读写属性
端口的读写属性用于控制端口的读写模式,目前具有两种模式:
 a.IO模式
IO模式用符号AW_IO_MODE表示。对IO模式端口进行多数据读写操作时,端口地址不会增加。操作的是同一个端口。
b.内存模式
内存模式用符号AW_MEMARY_MODE表示。对内存模式端口进行多数据读写操作时,端口地址会增加。操作的是连续端口。
2.位宽属性
端口的位宽属性用于控制端口的位宽,目前具有四种模式:分别为字节宽度(8位)、双字节宽度(16位)、字宽度(32位)和位宽度(1位)。他们分别使用符号AW_BYTE_NODE、AW_DBYTE_NODE、AW_WORD_NODE、AW_BIT_NODE表示。
(2)返回值
除了函数awAddressGet()和函数awTick()外,面向设备的编程的其它函数均遵守同样的返回值规则:
 1.返回值为32位有符号整数;
 2.返回值为负数时,函数执行不正确;
 3.返回值大于等于0为函数执行正确。一般情况,返回值大于0时,表示完成的数据个数。
函数返回值的详细情况见表5。随着面向设备的编程的升级,返回值的数目可能会增加。
(3)主控设备编程接口(核心编程接口)
这是一般用户使用的接口,也是最常用的API。这部分有4个函数,分别是awRead()、awWrite()、awReadEx()和awWriteEx()。其中函数awRead()和awWrite()是对指定设备的指定端口用默认的方式读写,读写的数据都会转化为32位无符号数。而awReadEx()和awWriteEx()用于一次对端口读写多个数据,需要指定读写模式,这个模式还必须与端口的模式一致。
这几个函数的详细介绍请参考表6至表9。
(4)被控设备编程接口
在设计一个控制系统时,被控设备一般会选择标准设备,不需要用户编程。如果使用非标准的被控设备,就需要进行产品研发。从图1.6可以看出,被控设备的应用程序仅仅是初始化而已。如果用户选择本公司(广州致远电子有限公司)的半成品模块,大多数情况也无需开发,只需要通过向导(PC机程序)配置需要的功能就可以生成需要的代码。如果这些半成品模块不能完全满足系统需求,就要进行研发。
被控设备要给主控设备提供端口,所以被控设备接口主要是端口的管理。面向设备的编程被控设备的任何一个端口都从属于某个端口组,这样对端口的管理就转换成对端口组的管理。被控设备的研发就是设计这些端口组。AnyWhere中定义了端口组信息结构体,其定义见程序清单2。
程序清单2端口组信息
从程序清单2可以看出,端口组信息结构体具有10个成员,分别是ulAddrStart、ulLen、ucWidth、ucProp、ucRemoteEn、ucMaxDelay、pfuncCreate、pfuncDel、pfuncRead和pfuncWrite,下面分别介绍:
 ulAddrStart:端口组的开始地址,大于等于这个端口地址且小于(ulAddrStart+ulLen)的端口地址属于这个端口组;
 ulLen:端口组地址的长度,也就是端口组端口的个数;
 ucWidth:端口的宽度,可选值为AW_BYTE_NODE、AW_DBYTE_NODE、AW_WORD_NODE和AW_BIT_NODE(参考7.4(1)小节);
 ucProp:端口属性,可选值为AW_IO_MODE和AW_MEMARY_MODE(参考7.4(1)小节);ucRemoteEn:远程访问许可,为TRUE时允许远程主控设备访问这个端口组,否则只允许本地设备通过地址AW_LOCAL_ADDR(0)访问;
 ucMaxDelay:最长延时,用于指示本端口组读写一个端口的最长延时;
 pfuncCreate:函数指针,端口组被创建时被调用,其唯一的参数为指向自己端口组信息的结构体变量的指针。其返回值参考7.4(2)节;
 pfuncDel:函数指针,端口组删除时被调用,其唯一的参数为指向自己端口组信息结构体变量的指针。其返回值参考7.4(2)节;
 pfuncRead:函数指针,读端口组某个或多个端口时被调用,其参数和返回值参考表10;
(5)初始化接口
 面向设备的编程需要初始化后才能使用。初始化代码大多数通过向导(PC机程序)
生成,一般不需要用户关心。
面向设备的编程的初始化接口有6个函数,分别为awInit()、awAddressSet()、
awAddressGet()、awRemoteDrivesAdd()、awRemoteDrivesDel()和awTick()。其中函数awInit()是必须调用的,调用了这个函数后,调用其它函数才会有效,其它函数可以在调用函数awInit()后任何时间调用。一般情况,函数awAddressSet()、awRemoteDrivesAdd()会在初始化时调用,而函数awAddressGet()和awRemoteDrivesDel()是与它们相对应的函数。至于函数awTick(),它是需要周期性调用的函数,正常使用看不见它。这些函数请参考表14至表19。
五、主控设备通讯协议驱动编程接口
(1)驱动程序信息
 由表1.17可知,驱动信息由一个结构体AW_DRIVER_INFO_BASE保存,它定义见程序清单3。
程序清单3网络协议驱动信息
 从程序清单2.1可以看出,协议驱动信息结构体具有7个成员,分别是pfuncCreate、pfuncDel、pfuncArp、pfuncRead、pfuncWrite、usTtls和usMtu,下面分别介绍:
 pfuncCreate:函数指针,增加协议驱动程序时被调用,其唯一的参数为指向自己的驱动信息结构体变量的指针。其返回值参考表1.5;
 pfuncDel:函数指针,删除协议驱动程序时被调用,其唯一的参数为指向自己的驱动信息结构体变量的指针。其返回值参考表1.5;
 pfuncArp:函数指针,用于在本驱动所管理的网络中搜索指定的设备,其参数和返回值参考表20;
 pfuncRead:函数指针,用于读本驱动支持的网络上的被控设置,其参数和返回值参考表21;
 pfuncWrite:函数指针,用于写本驱动支持的网络上的被控设置,其参数和返回值参考表22;
 usTtls:用于表示本驱动在ARP表(设备与驱动对照表)中的生存时间,以调用函数awTick()的周期为单位;
 usMtu:一个网络帧可以负荷的有效数据数(以字节为单位),不包括设备号、端口号、协议添加数据等。
pfuncWrite:函数指针,写端口组某个或多个端口时被调用,其参数和返回值参考表11。用户定义好端口组后,就可以调用函数awDeviceAdd()增加一个端口组,然后这些端口就可以使用了。
与函数awDeviceAdd()对应,面向设备的编程还有一个函数awDeviceDel(),它为删除一个端口组,其详细说明见表13。
(2)构造驱动自身的信息结构体
 驱动程序信息结构体仅保存基本的面向设备的编程需要的驱动程序信息,没有预留保存驱动程序自身信息的成员。如果驱动程序需要添加自己的成员,可以参照程序清单4
所示的方法定义自身的信息结构体,只需要在调用函数awRemoteDrivesAdd()(参考表1.17)和函数awRemoteDrivesDel()(参考表1.18)时进行一下强制指针转换即可。当然,驱动程序使用pdiThis指针时(参考表20、表21和表22)需要反向转换。
程序清单4构造驱动自身的信息结构体
(3)设备地址映射
 由表1.17可知,驱动信息由一个结构体AW_DRIVER_INFO_BASE保存,它定义见程序清单3。
(4)设备地址映射
 用户通讯协议的设备地址范围和表示方式与面向设备的编程不一定相同。如果不相同,需要把用户通讯协议的设备地址映射到面向设备的编程地址。为了不与其它协议的地址冲突,一般需要初始化或动态指定映射关系,而不是在代码中写死。这个映射关系可以在驱动自身的信息结构体中添加成员指定。
(5)使用ARP表简化动态地址映射
 ARP表中有一个8字节的成员保留给驱动程序,驱动程序可以任意使用。一般来说,当驱动程序无法实现静态的地址映射关系时(如TCP/IP协议),可以用它来保存动态的地址映射关系。面向设备的编程使用两个函数用于设置和获得ARP表的这个成员,分别是函数awArpRsvdSet()和函数awArpRsvdGet()。函数awArpRsvdSet()用于设置设备地址与Rsvd(协议的物理地址)的对应关系,而函数awArpRsvdGet()用于获得这个对应关系。这两个函数请参考表23和表24。
六、被控设备通讯协议驱动编程接口
(1)概述
 被控设备设计成被动应答方式,数据帧从哪里来就将反馈的数据帧发送回哪里去。对于主控设备的协议驱动来说,有三个发送函数pfuncArp()、pfuncRead()和pfuncWrite(),因此,被控设备的协议驱动主要是处理三种数据帧。
(2)驱动程序信息结构体
 因为没有驱动管理器,正常来说,被控设备不需要驱动程序信息结构体,不过为了兼容主控设备,被控设备的驱动程序信息结构体与主控设备的驱动程序信息结构体一样。
由于没有驱动管理器,成员pfuncArp、pfuncRead和pfuncWrite均为NULL,成员usTtls和usMtu也可以任意赋值。其它部分与主控设备一致。
(3)端口地址转换
 协议的设备拱功能分配的方式与面向设备的编程可能不同,如ModBus分为线圈地址和寄存器地址,需要把他们映射到面向设备的编程地址,者可以在驱动程序信息就结构体中增加成员来实现。
(4)ARP帧
 被控设备接收到ARP帧后,需要把ARP帧中的设备地址信息提取出来,然后与本机设备地址比较,如果相同,则回复主控设备,说明自己就是目标设备。获得本机设备地址可以通过调用函数awAddressGet()获得(参考表16)。当然,如果协议的地址空间与面向设备的编程地址空间不一致,则需要地址转换后才比较。
(5)read帧
接收到read帧,主控设备可能调用了函数awRead(),也可能调用了函数awReadEx()(参考表21)。如果主控设备调用了函数awRead(),被控设备需要调用函数awDeviceRead()。如果主控设备调用了函数awReadEx(),被控设备需要调用函数awDeviceReadEx()。函数awDeviceRead()的具体说明见表25;函数awDeviceReadEx()的具体说明见表26。
当函数awDeviceRead()或函数awDeviceReadEx()返回后,驱动需要把读到的数据和返回值通过同样的网络接口发送给主控设备。
值得注意的是,接收到read帧也需要判断一下设备地址是否是自身地址。
(6)write帧
 接收到write帧,主控设备可能调用了函数awwrite(),也可能调用了函数awWriteEx()(参考表9)。如果主控设备调用了函数awwrite(),被控设备需要调用函数awDeviceWrite()。如果主控设备调用了函数awWriteEx(),被控设备需要调用函数awDeviceWriteEx()。函数awDeviceWrite()的具体说明见表27;函数awDeviceWriteEx()的具体说明见表28。
当函数awDeviceRead()或函数awDeviceReadEx()返回后,驱动需要把读到的数据和返回值通过同样的网络接口发送给主控设备。
值得注意的是,接收到read帧也需要判断一下设备地址是否是本身。
七、默认通讯协议
(1)默认通讯协议通讯流程
 面向设备的编程默认协议使用锁步方式工作,即主控设备发送一个命令帧,然后等待被控设备一个回复帧。如果在规定的时间内主控设备没有得到正确的回复帧,则进行错误处理。否则准备下一次通讯过程。
(2)默认协议帧结构程
 默认协议所有数据以大端方式存储。本小节所述的帧格式中,第0字节为第一个发送的字节,第1字节为第二个发送的字节,以此类推。
 1.帧结构
面向设备的编程默认协议帧由3部分组成:帧头、帧数据和帧校验。其中帧头最先发送,帧校验最后发送,示意如下:
0~15 16~(n-3) (n-2)~(n-1)
帧头 数据,格式有帧类型决定 帧校验
2.帧头
面向设备的编程默认协议帧头为16个字节,具体含义如下:
假设__GucBuf为帧的起始位置,usLen为保存帧的长度的变量,则从帧头获得帧长度的代码如下:
usLen=((AW_ZY_PACKET_HARD*)__GucBuf)->usPacketLen;
ntohs(usLen);
假设__GucBuf为帧的起始位置,ulDevice为保存帧的源地址的变量,则从帧头获得源地址的代码如下:
ulDevice=((AW_ZY_PACKET_HARD*)__GucBuf)->ulSrcAddr;
ntohl(ulDevice);
 3.校验
面向设备的编程默认协议帧采取16位crc校验,校验数据放在帧的最后。Crc校验的表达式为x^16+x^12+x^5+x^0。
 4.ARP帧
ARP帧的帧代码为0x00,仅包含帧头和帧校验部分。
 5.ARP回复帧
ARP回复帧的帧代码为0x80,仅包含帧头和帧校验部分。
 6.Read帧
Read帧的帧代码为0x01,长度为24,帧结构如下:
0~15 16~19 20~21 22~23
帧头 端口地址 读取数据个数 帧校验
7.Read回复帧
Read帧的帧代码为0x81,长度不定,帧结构如下:
0~15 16~19 20~(n-3) (n-2)~(n-1)
帧头 返回值 读到的数据 帧校验
8.Write帧
Write帧的帧代码为0x02,长度不定,帧结构如下:
0~15 16~19 20~21 22~(n-3) (n-2)~(n-1)
帧头 端口地址 写入数据个数 要写入的数据 帧校验
8.Write回复帧
Write帧的帧代码为0x82,长度为22字节,帧结构如下:
0~15 16~19 20~21
帧头 返回值 帧校验
(3)底层驱动信息结构体
 面向设备的编程默认协议底层驱动具有自己的驱动信息结构体,其定义见程序清单
5。
程序清单5默认协议底层驱动信息
 从程序清单5可以看出,协议驱动信息结构体具有5个成员,分别是dibInfo、pfuncCreate、pfuncDel、pfuncSend、uiReviceDelay,下面分别介绍:
 dibInfo:结构体变量,面向设备的编程驱动信息结构体变量,用于驱动程序管理;
 pfuncCreate:函数指针,增加默认协议驱动程序时被调用,其唯一的参数为指向自己的驱动信息结构体变量的指针;
 pfuncDel:函数指针,删除默认协议驱动程序时被调用,其唯一的参数为指向自己的驱动信息结构体变量的指针;
 pfuncSend::函数指针,用于发送一个数据帧,参考表29;
 uiReviceDelay:变量,用于指示从发送数据帧到接收回复数据帧的最大间隔。
(4)发送数据帧
 发送数据帧的示意代码见程序清单6。
程序清单6发送数据帧示意代码
(5)接收数据帧
一般用线程来处理接收到的数据帧,这个线程的示意代码见程序清单7。
程序清单7接收数据帧处理
八、具体应用
面向设备的编程技术与方法已经在广州致远电子有限公司的EPC-266x和EPC-296x工控主板上应用,并逐步有序的推广到公司大部分嵌入式产品中。
EPC-266x和EPC-296x是广州致远电子有限公司开发的基于32位ARM处理器LPC2460的可扩展的嵌入式工控主板,产品兼容AnyWhere软件平台,机械结构尺寸遵循PC/104相关规范,提供MiniISA总线接口。EPC-266x具有资源丰富、内存容量大、接口齐全、功耗低、可靠性高等特点。预装正版μC/OS-II操作系统,并内置TCP/IP协议、iCAN协议(EPC-296x)、USB2.0Host协议、FAT32文件管理系统等,EPC-266x可实现远程在线固件升级。
EPC-266x工控主板和EPC-296x工控主板可在-40℃~+85℃宽温度范围内稳定工作,满足工业级产品的各种应用要求。
 EPC-266x工控主板和EPC-296x工控主板主要应用于工业控制自动化、煤炭或石油产品税控系统、小区门禁安防管理、大型车库管理系统、交通控制系统、环境数据记录、通信协议转换器等领域中。
表1传统编程模式对照表
研发方式 基于寄存器 基于API 基于端口
研发周期 较长 较短
代码量 较小 较小
维护工作 复杂 比较简单 简单
移植 难度大 比较方便 仅限于PLC
研发难度 较高
功能与灵活性 较高
对研发人员的要求 较高
表2传统编程模式开发联网控制系统对照表
研发方式 基于寄存器 基于API 基于端口
研发周期 很长 较短
代码量 巨大
维护工作 很复杂 复杂 简单
移植 难度大 比较方便 仅限于PLC
研发难度 很高
功能与灵活性 较高
对研发人员的要求 很高
表3面向设备的编程与传统编程模式的对照表
研发方式 基于寄存器 基于API 基于端口
研发周期 很长 较短
代码量 巨大
维护工作 很复杂 复杂 简单
移植 难度大 比较方便 仅限于PLC
研发难度 很高
功能与灵活性 较高
对研发人员的要求 很高
表4设备远程调用关系
功能 主控设备函数 被控设备函数
端口读 awRead(参考表) awDeviceRead
端口写 awWrite(参考表) awDeviceWrite
扩展端口读 awReadEx(参考表) awDeviceReadEx
扩展端口写 awWriteEx(参考表) awDeviceWriteEx
表5面向设备的编程的返回值
表6awRead
表7awWrite
表8awReadEx
表9awWriteEx
表10pfuncRead
表11pfuncWrite
表12awDeviceAdd
表13awDeviceDel
函数名称 awDeviceDel
函数原型 INT32S awDeviceDel(const AW_DEVICE_INFO*padiinfo)
功能描述 删除端口组
输入参数 padiinfo:端口组属性
输出参数
返回值 AW_OK:成功负数:错误,参考表5
特殊说明
表14awInit
函数名称 awInit
函数原型 INT32S awInit(void)
功能描述 面向设备的编程初始化
输入参数
输出参数
返回值 AW_OK:成功负数:错误,参考表5
特殊说明 必须调用此函数后才能使用面向设备的编程
表15awAddressSet
函数名称 awAddressSet
函数原型 INT32S awAddressSet(INT32U ulAddr)
功能描述 设置anywere地址
输入参数 ulAddr:anywere地址
输出参数
返回值 AW_OK:成功负数:错误,参考表5
特殊说明 必须调用此函数后才能使用远程设备,或接受远程连接
表16awAddressGet
函数名称 awAddressGet
函数原型 INT32U awAddressGet(void)
功能描述 获得anywere地址
输入参数
输出参数
返回值 anywere地址
特殊说明
表17awRemoteDrivesAdd
表18awRemoteDrivesDel
表19awTick
函数名称 awTick
函数原型 void awTick(void)
功能描述 时钟节拍处理,需要定时调用
输入参数 None
输出参数
返回值 None
特殊说明 主控设备才需要
表20pfuncArp
表21pfuncRead
表22pfuncWrite
表23awArpRsvdSet
表24awArpRsvdGet
函数名称 awArpRsvdGet
函数原型 INT32S awArpRsvdGet(INT32U ulDevice,INT8U ucRsvd[8])
功能描述 被控设备端口写
输入参数 ulDevice:设备地址
输出参数 ucRsvd:Rsvd值
返回值 AW_OK:成功负数:错误,参考表5
特殊说明
表25awDeviceRead
函数名称 awDeviceRead
函数原型 INT32S awDeviceRead(INT32U*pulData)
功能描述 被控设备端口读
输入参数 ulAddr:端口地址
输出参数 pulData:读到的数据
返回值 AW_OK:成功负数:错误,参考表5
特殊说明
表26awDeviceReadEx
表27awDeviceWrite
表28awDeviceWriteEx
表29pfuncSend

Claims (9)

1.面向设备的编程方法,其特征在于:把所有用网络连接起来的嵌入式系统作为一个整体来考虑,编程不区分远程设备和本地硬件,使用同样的接口访问本地硬件和远程设备;嵌入式系统包括主控设备和被控设备,以设备地址唯一识别设备,设备地址与通讯协议无关,以端口地址唯一识别设备的内部功能;设备地址和端口地址两者共同确定网络中设备的内部功能,对设备地址和端口地址的读写操作控制网络中设备的内部功能;其中,设备地址是设备在整个系统中的唯一标识;端口地址是端口在设备内的唯一标识;
被控设备给主控设备提供端口,主控设备实现协议及链路自动动态匹配,通过远程调用来控制被控设备;当主控设备调用面向设备的编程的主机接口核心函数时,对应的被控设备执行相应的函数。
2.根据权利要求1所述的面向设备的编程方法,其特征在于:所述主控设备查找ARP表,如果ARP表中存有被控设备信息,调用被控设备函数开始执行;如果ARP表中不存在此远程设备的情况,则请求添加此设备,在远程设备添加成功后,调用被控设备函数开始执行。
3.根据权利要求2所述的面向设备的编程方法,其特征在于:被控设备的函数执行完毕后,把返回值和执行结果反馈给主控设备,主控设备获得执行结果。
4.根据权利要求2或3所述的面向设备的编程方法,其特征在于:所述被控设备设计成被动应答方式。
5.根据权利要求1所述的面向设备的编程方法,其特征在于:所述设备地址用32位无符号数表示;所述端口地址用32位无符号数表示。
6.根据权利要求1所述的面向设备的编程方法,其特征在于:所述编程方法的应用程序编程接口包含但不限于接口函数、结构体定义和宏定义。
7.根据权利要求1所述的面向设备的编程方法,其特征在于:所述编程方法的默认通讯协议,包含但不限于工作模式和数据帧结构。
8.根据权利要求7所述的面向设备的编程方法,其特征在于:
所述数据帧结构包括默认协议帧的结构;
所述默认协议帧包括:帧头、帧数据和帧校验,所述帧头最先发送,所述帧校验最后发送;所述帧头为第0字节至第15字节,所述帧数据为第16字节至倒数第3个字节,所述帧校验为最后两个字节。
9.根据权利要求8所述的面向设备的编程方法,其特征在于:所述数据帧结构还包括ARP帧、ARP回复帧、Read帧、Read回复帧、Write帧,以及Write回复帧的结构;
所述ARP帧仅包含帧头和帧校验;
所述ARP回复帧仅包含帧头和帧校验;
所述Read帧的长度为24字节,第0字节至第15字节为帧头,第16字节至第19字节为端口地址,第20字节至第21字节为读取数据个数,第22字节至第23字节为帧校验;
所述Read回复帧的第0字节至第15字节为帧头,第16字节至第19字节为返回值,第20字节至倒数第3个字节为读到的数据,最后两个字节为帧校验;
所述Write帧的第0字节至第15字节为帧头,第16字节至第19字节为端口地址,第20字节至第21字节为写入数据个数,第22字节至倒数第3个字节为要写入的数据,最后两个字节为帧校验;
所述Write回复帧的长度为22字节,第0字节至第15字节为帧头,第16字节至第19字节为返回值,第20字节至第21字节为帧校验。
CN200910042351.8A 2009-09-01 2009-09-01 面向设备的编程技术与方法 Active CN101702119B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200910042351.8A CN101702119B (zh) 2009-09-01 2009-09-01 面向设备的编程技术与方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910042351.8A CN101702119B (zh) 2009-09-01 2009-09-01 面向设备的编程技术与方法

Publications (2)

Publication Number Publication Date
CN101702119A CN101702119A (zh) 2010-05-05
CN101702119B true CN101702119B (zh) 2014-07-09

Family

ID=42157036

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910042351.8A Active CN101702119B (zh) 2009-09-01 2009-09-01 面向设备的编程技术与方法

Country Status (1)

Country Link
CN (1) CN101702119B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10152987B2 (en) * 2014-06-23 2018-12-11 Google Llc Remote invocation of mobile device actions
CN104133671B (zh) * 2014-06-30 2017-10-27 汉柏科技有限公司 一种数字处理设备的硬件接口屏蔽装置及方法
EP3246773B1 (de) 2016-05-17 2020-11-04 Siemens Aktiengesellschaft Verfahren zur parametrierung einer verfahrens- oder prozesstechnischen anlage
CN106712902B (zh) * 2016-12-19 2019-09-27 上海东软载波微电子有限公司 Modbus协议文件的编码、解码方法及编码器、解码器
CN108243220B (zh) * 2016-12-26 2021-04-16 航天信息股份有限公司 一种基于税控服务器的支持多类型发票终端的发票开具方法及系统
CN109541976B (zh) * 2018-12-11 2020-08-11 杭州阿姆科技有限公司 一种基于继电器的多环境远程控制系统及其方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1484117A (zh) * 2002-09-20 2004-03-24 联想(北京)有限公司 一种实现主控设备控制多台被控设备的装置
CN1668059A (zh) * 2004-03-12 2005-09-14 联想(北京)有限公司 基于通信网络的智能电脑远程控制系统及其方法
CN2749187Y (zh) * 2004-10-22 2005-12-28 浙江万里学院 远程计算机接管系统
CN1901453A (zh) * 2005-07-21 2007-01-24 北京交大网通信息技术有限公司 嵌入式远程集中维护设备及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1484117A (zh) * 2002-09-20 2004-03-24 联想(北京)有限公司 一种实现主控设备控制多台被控设备的装置
CN1668059A (zh) * 2004-03-12 2005-09-14 联想(北京)有限公司 基于通信网络的智能电脑远程控制系统及其方法
CN2749187Y (zh) * 2004-10-22 2005-12-28 浙江万里学院 远程计算机接管系统
CN1901453A (zh) * 2005-07-21 2007-01-24 北京交大网通信息技术有限公司 嵌入式远程集中维护设备及方法

Also Published As

Publication number Publication date
CN101702119A (zh) 2010-05-05

Similar Documents

Publication Publication Date Title
CN101702119B (zh) 面向设备的编程技术与方法
CN103150279B (zh) 一种主机与基板管理控制器共享设备的方法
CN100367253C (zh) 一种扩展外设的方法及系统
CN108027791A (zh) 多节点网络中的输入/输出信号桥接和虚拟化
CN103095538B (zh) 一种多类工业以太网总线集成主站
CN105446920A (zh) 基于龙芯的fpga嵌入式计算机及其配置方法
CN201035568Y (zh) 一种usb设备逻辑编号与物理编号映射的装置
CN103678187A (zh) 一种微控制单元及其控制方法
CN103489262B (zh) 网络式usb设备调度装置及其调度方法
CN204481848U (zh) 工业现场总线多协议路由器
CN101909013B (zh) 一种可动态配置的信息交换装置
CN101131719A (zh) 一种用于密码学运算的微处理器内核
CN106598548A (zh) 存储单元读写冲突的解决方法及装置
CN1851577A (zh) 现场控制器的虚拟控制方法
CN107844321A (zh) 一种mcu处理系统
CN105527889A (zh) 一种采用stt-mram作为单一存储器的微控制器
CN102708075A (zh) 一种sd卡硬件控制装置及控制方法
CN107329801A (zh) 一种节点管理方法及装置、多子星服务器
CN103856466A (zh) 一种可自动配置协议的采集终端装置
CN101859242B (zh) 一种寄存器读写方法及装置
CN103136343A (zh) 一种共享资源实时交互方法
CN105893036A (zh) 一种嵌入式系统的兼容式加速器扩展方法
CN111131291B (zh) 一种上位机软件作为下位机设备的协议实现方法
CN200962230Y (zh) 智能化多功能考勤设备
CN107918593A (zh) 近端一对多串行总线的拓展接口电路以及通信方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: 510660 Guangdong city of Guangzhou province Tianhe District No. 1035 Room 204 second Pu Lu

Applicant after: GUANGZHOU ZHIYUAN ELECTRONICS Co.,Ltd.

Address before: 2 building, 3 floor, Huang Zhou Industrial Zone, Che Po Road, Guangdong, Guangzhou, Tianhe District 510660, China

Applicant before: GUANGZHOU ZHIYUAN ELECTRONICS Co.,Ltd.

DD01 Delivery of document by public notice

Addressee: Liu Jing

Document name: Notification of Passing Examination on Formalities

DD01 Delivery of document by public notice

Addressee: Liu Jing

Document name: Notification of an Office Action

DD01 Delivery of document by public notice

Addressee: Liu Jing

Document name: Notice of conformity

C14 Grant of patent or utility model
GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: 510660 Guangdong city of Guangzhou province Tianhe District No. 1035 Room 204 second Pu Lu

Patentee after: GUANGZHOU ZHIYUAN ELECTRONICS Co.,Ltd.

Address before: 510660 Guangdong city of Guangzhou province Tianhe District No. 1035 Room 204 second Pu Lu

Patentee before: GUANGZHOU ZHIYUAN ELECTRONICS Co.,Ltd.

CP01 Change in the name or title of a patent holder
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220818

Address after: Room 304, 3rd Floor, No. 43, Sicheng Road, Tianhe District, Guangzhou City, Guangdong Province, 510000

Patentee after: Guangzhou Zhiyuan Instrument Co., Ltd.

Address before: 510660 Room 204, 2nd Floor, 1035 Gaopu Road, Tianhe District, Guangzhou City, Guangdong Province

Patentee before: GUANGZHOU ZHIYUAN ELECTRONICS Co.,Ltd.