文档库 最新最全的文档下载
当前位置:文档库 › Microsoft .Net Remoting系列专题之一.Net Remoting基础篇

Microsoft .Net Remoting系列专题之一.Net Remoting基础篇

Microsoft .Net Remoting系列专题之一.Net Remoting基础篇
Microsoft .Net Remoting系列专题之一.Net Remoting基础篇

Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇

我写的.Net Remoting系列专题:

Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触

Microsoft .Net Remoting系列专题之一

一、Remoting基础

什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net 平台下。Microsoft? .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。

在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的。如图所示:

首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上(如

服务器激活的对象和客户端激活的对象),然后客户端再通过Remoting连接服务器,获得该服务对象并通过序列化在客户端运行。

在Remoting中,对于要传递的对象,设计者除了需要了解通道的类型和端口号之外,无需再了解数据包的格式。但必须注意的是,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用。这既保证了客户端和服务器端有关对象的松散耦合,同时也优化了通信的性能。

1、Remoting的两种通道

Remoting的通道主要有两种:Tcp和Http。在.Net中,

System.Runtime.Remoting.Channel中定义了IChannel接口。IChannel接口包括了TcpChannel通道类型和Http通道类型。它们分别对应Remoting通道的这两种类型。TcpChannel类型放在名字空间System.Runtime.Remoting.Channel.Tcp中。Tcp通道提供了基于Socket的传输工具,使用Tcp协议来跨越Remoting边界传输序列化的消息流。TcpChannel类型默认使用二进制格式序列化消息对象,因此它具有更高的传输性能。HttpChannel类型放在名字空间System.Runtime.Remoting.Channel.Http中。它提供了一种使用Http协议,使其能在Internet上穿越防火墙传输序列化消息流。默认情况下,HttpChannel类型使用Soap格式序列化消息对象,因此它具有更好的互操作性。通常在局域网内,我们更多地使用TcpChannel;如果要穿越防火墙,则使用HttpChannel。

2、远程对象的激活方式

在访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程创建它并进行初始化。这种客户端通过通道来创建远程对象,称为对象的激活。在Remoting中,远程对象的激活分为两大类:服务器端激活和客户端激活。

(1) 服务器端激活,又叫做WellKnow方式,很多又翻译为知名对象。为什么称为知名对象激活模式呢?是因为服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符(URI)上来发布这个类型。然后该服务器进程会为此类型配置一个WellKnown对象,并根据指定的端口或地址来发布对象。.Net Remoting把服务器端激活又分为SingleTon模式和SingleCall模式两种。

SingleTon模式:此为有状态模式。如果设置为SingleTon激活方式,则Remoting将为所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户

端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon实例将在方法调用中一直维持其状态。举例来说,如果一个远程对象有一个累加方法(i=0;++i),被多个客户端(例如两个)调用。如果设置为SingleTon方式,则第一个客户获得值为1,第二个客户获得值为2,因为他们获得的对象实例是相同的。如果熟悉https://www.wendangku.net/doc/511375404.html,的状态管理,我们可以认为它是一种Application状态。

SingleCall模式:SingleCall是一种无状态模式。一旦设置为SingleCall模式,则当客户端调用远程对象的方法时,Remoting会为每一个客户端建立一个远程对象实例,至于对象实例的销毁则是由GC自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的都是1。我们仍然可以借鉴https://www.wendangku.net/doc/511375404.html,的状态管理,认为它是一种Session状态。

(2) 客户端激活。与WellKnown模式不同,Remoting在激活每个对象实例的时候,会给每个客户端激活的类型指派一个URI。客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。SingleCall模式和客户端激活模式是有区别的:首先,对象实例创建的时间不一样。客户端激活方式是客户一旦发出调用的请求,就实例化;而SingleCall则是要等到调用对象方法时再创建。其次,SingleCall模式激活的对象是无状态的,对象生命期的管理是由GC管理的,而客户端激活的对象则有状态,其生命周期可自定义。其三,两种激活模式在服务器端和客户端实现的方法不一样。尤其是在客户端,SingleCall模式是由GetObject()来激活,它调用对象默认的构造函数。而客户端激活模式,则通过CreateInstance()来激活,它可以传递参数,所以可以调用自定义的构造函数来创建实例。

二、远程对象的定义

前面讲到,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用。因此在Remoting中,对于远程对象有一些必须的定义规范要遵循。

由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承MarshalByRefObject。MSDN对MarshalByRefObject的说明是:MarshalByRefObject 是那些通过使用代理交换消息来跨越应用程序域边界进行通信的对象的基类。不是从MarshalByRefObject 继承的对象会以隐式方式按值封送。当远程应用程序引用一个按值封送的对象时,将跨越远程处理边界传递该对象的副本。因为您希望使用代理方法而不是副本方法进行通信,因此需要继承MarshallByRefObject。

以下是一个远程对象类的定义:

public class ServerObject:MarshalByRefObject

{

public Person GetPersonInfo(string name,string sex,int age)

{

Person person = new Person();

https://www.wendangku.net/doc/511375404.html, = name;

person.Sex = sex;

person.Age = age;

return person;

}

}

这个类只实现了最简单的方法,就是设置一个人的基本信息,并返回一个Person类对象。注意这里返回的Person类。由于这里所传递的Person则是以传值的方式来完成的,而Remoting 要求必须是引用的对象,所以必须将Person类序列化。

因此,在Remoting中的远程对象中,如果还要调用或传递某个对象,例如类,或者结构,则该类或结构则必须实现串行化Attribute[SerializableAttribute]:

[Serializable]

public class Person

{

public Person()

{

}

private string name;

private string sex;

private int age;

public string Name

{

get {return name;}

set {name = value;}

}

public string Sex

{

get {return sex;}

set {sex = value;}

}

public int Age

{

get {return age;}

set {age = value;}

}

}

将该远程对象以类库的方式编译成Dll。这个Dll将分别放在服务器端和客户端,以添加引用。在Remoting中能够传递的远程对象可以是各种类型,包括复杂的DataSet对象,只要它能够被序列化。远程对象也可以包含事件,但服务器端对于事件的处理比较特殊,我将在本系列之三中介绍。

三、服务器端

根据第一部分所述,根据激活模式的不同,通道类型的不同服务器端的实现方式也有所不同。大体上说,服务器端应分为三步:

1、注册通道

要跨越应用程序域进行通信,必须实现通道。如前所述,Remoting提供了IChannel接口,分别包含TcpChannel和HttpChannel两种类型的通道。这两种类型除了性能和序列化数据的格式不同外,实现的方式完全一致,因此下面我们就以TcpChannel为例。

注册TcpChannel,首先要在项目中添加引用“System.Runtime.Remoting”,然后using名字空间:System.Runtime.Remoting.Channel.Tcp。代码如下:

TcpChannel channel = new TcpChannel(8080);

ChannelServices.RegisterChannel(channel);

在实例化通道对象时,将端口号作为参数传递。然后再调用静态方法RegisterChannel()来注册该通道对象即可。

2、注册远程对象

注册了通道后,要能激活远程对象,必须在通道中注册该对象。根据激活模式的不同,注册对象的方法也不同。

(1) SingleTon模式

对于WellKnown对象,可以通过静态方法

RemotingConfiguration.RegisterWellKnownServiceType()来实现:RemotingConfiguration.RegisterWellKnownServiceType(

typeof(ServerRemoteObject.ServerObject),

"ServiceMessage",WellKnownObjectMode.SingleTon);

(2)SingleCall模式

注册对象的方法基本上和SingleTon模式相同,只需要将枚举参数WellKnownObjectMode 改为SingleCall就可以了。RemotingConfiguration.RegisterWellKnownServiceType( typeof(ServerRemoteObject.ServerObject),

"ServiceMessage",WellKnownObjectMode.SingleCall);

(3)客户端激活模式

对于客户端激活模式,使用的方法又有不同,但区别不大,看了代码就一目了然。RemotingConfiguration.ApplicationName = "ServiceMessage"; RemotingConfiguration.RegisterActivatedServiceType(

typeof(ServerRemoteObject.ServerObject));

为什么要在注册对象方法前设置ApplicationName属性呢?其实这个属性就是该对象的URI。对于WellKnown模式,URI是放在RegisterWellKnownServiceType()方法的参数中,当然也可以拿出来专门对ApplicationName属性赋值。而RegisterActivatedServiceType()方法的重载中,没有ApplicationName的参数,所以必须分开。

3、注销通道

如果要关闭Remoting的服务,则需要注销通道,也可以关闭对通道的监听。在Remoting中当我们注册通道的时候,就自动开启了通道的监听。而如果关闭了对通道的监听,则该通道就无法接受客户端的请求,但通道仍然存在,如果你想再一次注册该通道,会抛出异常。

//获得当前已注册的通道;

IChannel[] channels = ChannelServices.RegisteredChannels;

//关闭指定名为MyTcp的通道;

foreach (IChannel eachChannel in channels)

{

if (eachChannel.ChannelName == "MyTcp")

{

TcpChannel tcpChannel = (TcpChannel)eachChannel;

//关闭监听;

tcpChannel.StopListening(null);

//注销通道;

ChannelServices.UnregisterChannel(tcpChannel);

}

}

代码中,RegisterdChannel属性获得的是当前已注册的通道。在Remoting中,是允许同时注册多个通道的,这一点会在后面说明。

四、客户端

客户端主要做两件事,一是注册通道。这一点从图一就可以看出,Remoting中服务器端和客户端都必须通过通道来传递消息,以获得远程对象。第二步则是获得该远程对象。

1、注册通道:

TcpChannel channel = new TcpChannel();

ChannelServices.RegisterChannel(channel);

注意在客户端实例化通道时,是调用的默认构造函数,即没有传递端口号。事实上,这个端口号是缺一不可的,只不过它的指定被放在后面作为了Uri的一部分。

2、获得远程对象。

与服务器端相同,不同的激活模式决定了客户端的实现方式也将不同。不过这个区别仅仅是WellKnown激活模式和客户端激活模式之间的区别,而对于SingleTon和SingleCall模式,客户端的实现完全相同。

(1) WellKnown激活模式

要获得服务器端的知名远程对象,可通过Activator进程的GetObject()方法来获得:ServerRemoteObject.ServerObject serverObj =

(ServerRemoteObject.ServerObject)Activator.GetObject(

typeof(ServerRemoteObject.ServerObject),

"tcp://localhost:8080/ServiceMessage");

首先以WellKnown模式激活,客户端获得对象的方法是使用GetObject()。其中参数第一个是远程对象的类型。第二个参数就是服务器端的uri。如果是http通道,自然是用

http://localhost:8080/ServiceMessage了。因为我是用本地机,所以这里是localhost,你可以用具体的服务器IP地址来代替它。端口必须和服务器端的端口一致。后面则是服务器定义的远程对象服务名,即ApplicationName属性的内容。

(2) 客户端激活模式

如前所述,WellKnown模式在客户端创建对象时,只能调用默认的构造函数,上面的代码就说明了这一点,因为GetObject()方法不能传递构造函数的参数。而客户端激活模式则可以通过自定义的构造函数来创建远程对象。

客户端激活模式有两种方法:

1) 调用RemotingConfiguration的静态方法RegisterActivatedClientType()。这个方法返回值为Void,它只是将远程对象注册在客户端而已。具体的实例化还需要调用对象类的构造函数。

RemotingConfiguration.RegisterActivatedClientType(

typeof(ServerRemoteObject.ServerObject),

"tcp://localhost:8080/ServiceMessage");

ServerRemoteObject.ServerObject serverObj = new

ServerRemoteObject.ServerObject();

2) 调用进程Activator的CreateInstance()方法。这个方法将创建方法参数指定类型的类对象。它与前面的GetObject()不同的是,它要在客户端调用构造函数,而GetObject()只是获得对象,而创建实例是在服务器端完成的。CreateInstance()方法有很多个重载,我着重说一下其中常用的两个。

a、 public static object CreateInstance(Type type, object[] args, object[] activationAttributes);

参数说明:

type:要创建的对象的类型。

args :与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果args 为空数组或空引用(Visual Basic 中为Nothing),则调用不带任何参数的构造函数(默认构造函数)。activationAttributes :包含一个或多个可以参与激活的属性的数组。

这里的参数args是一个object[]数组类型。它可以传递要创建对象的构造函数中的参数。从这里其实可以得到一个结论:WellKnown激活模式所传递的远程对象类,只能使用默认的构造函数;而Activated模式则可以用户自定义构造函数。activationAttributes参数在这个方法中通常用来传递服务器的url。

假设我们的远程对象类ServerObject有个构造函数:

ServerObject(string pName,string pSex,int pAge)

{

name = pName;

sex = pSex;

age = pAge;

}

那么实现的代码是:

object[] attrs = {new

UrlAttribute("tcp://localhost:8080/ServiceMessage")};

object[] objs = new object[3];

objs[0] = "wayfarer";

objs[1] = "male";

objs[2] = 28;

ServerRemoteObject.ServerObject = Activator.CreateInstance(

typeof(ServerRemoteObject.ServerObject),objs,attrs);

可以看到,objs[]数组传递的就是构造函数的参数。

b、public static ObjectHandle CreateInstance(string assemblyName, string typeName, object[] activationAttribute);

参数说明:

assemblyName :将在其中查找名为typeName 的类型的程序集的名称。如果assemblyName 为空引用(Visual Basic 中为Nothing),则搜索正在执行的程序集。typeName:首选类型的名称。

activationAttributes :包含一个或多个可以参与激活的属性的数组。

参数说明一目了然。注意这个方法返回值为ObjectHandle类型,因此代码与前不同:object[] attrs = {new

UrlAttribute("tcp://localhost:8080/EchoMessage")};

ObjectHandle handle = Activator.CreateInstance("ServerRemoteObject",

"ServerRemoteObject.ServerObject",attrs);

ServerRemoteObject.ServerObject obj =

(ServerRemoteObject.ServerObject)handle.Unwrap();

这个方法实际上是调用的默认构造函数。ObjectHandle.Unwrap()方法是返回被包装的对象。说明:要使用UrlAttribute,还需要在命名空间中添加:using

System.Runtime.Remoting.Activation;

五、Remoting基础的补充

通过上面的描述,基本上已经完成了一个最简单的Remoting程序。这是一个标准的创建Remoting程序的方法,但在实际开发过程中,我们遇到的情况也许千奇百怪,如果只掌握一种所谓的“标准”,就妄想可以“一招鲜、吃遍天”,是不可能的。

1、注册多个通道

在Remoting中,允许同时创建多个通道,即根据不同的端口创建不同的通道。但是,Remoting 要求通道的名字必须不同,因为它要用来作为通道的唯一标识符。虽然IChannel有ChannelName属性,但这个属性是只读的。因此前面所述的创建通道的方法无法实现同时注册多个通道的要求。

这个时候,我们必须用到System.Collection中的IDictionary接口:

注册Tcp通道:

IDictionary tcpProp = new Hashtable();

tcpProp["name"] = "tcp9090";

tcpProp["port"] = 9090;

IChannel channel = new TcpChannel(tcpProp,

new BinaryClientFormatterSinkProvider(),

new BinaryServerFormatterSinkProvider());

ChannelServices.RegisterChannel(channel);

注册Http通道:

IDictionary httpProp = new Hashtable();

httpProp["name"] = "http8080";

httpProp["port"] = 8080;

IChannel channel = new HttpChannel(httpProp,

new SoapClientFormatterSinkProvider(),

new SoapServerFormatterSinkProvider());

ChannelServices.RegisterChannel(channel);

在name属性中,定义不同的通道名称就可以了。

2、远程对象元数据相关性

由于服务器端和客户端都要用到远程对象,通常的方式是生成两份完全相同的对象Dll,分别添加引用。不过为了代码的安全性,且降低客户端对远程对象元数据的相关性,我们有必要对这种方式进行改动。即在服务器端实现远程对象,而在客户端则删除这些实现的元数据。

由于激活模式的不同,在客户端创建对象的方法也不同,所以要分离元数据的相关性,也应分为两种情况。

(1) WellKnown激活模式:

通过接口来实现。在服务器端,提供接口和具体类的实现,而在客户端仅提供接口:public interface IServerObject

{

Person GetPersonInfo(string name,string sex,int age);

}

public class ServerObject:MarshalByRefObject,IServerObject { ......}

注意:两边生成该对象程序集的名字必须相同,严格地说,是命名空间的名字必须相同。

(2) 客户端激活模式:

如前所述,对于客户端激活模式,不管是使用静态方法,还是使用CreateInstance()方法,都必须在客户端调用构造函数实例化对象。所以,在客户端我们提供的远程对象,就不能只提供接口,而没有类的实现。实际上,要做到与远程对象元数据的分离,可以由两种方法供选择:a、利用WellKnown激活模式模拟客户端激活模式:

方法是利用设计模式中的“抽象工厂”,下面的类图表描述了总体解决方案:

我们在服务器端的远程对象中加上抽象工厂的接口和实现类:

public interface IServerObject

{

Person GetPersonInfo(string name,string sex,int age);

}

public interface IServerObjFactory

{

IServerObject CreateInstance();

}

public class ServerObject:MarshalByRefObject,IServerObject

{

public Person GetPersonInfo(string name,string sex,int age)

{

Person person = new Person();

https://www.wendangku.net/doc/511375404.html, = name;

person.Sex = sex;

person.Age = age;

return person;

}

}

public class ServerObjFactory:MarshalByRefObject,IServerObjFactory {

public IServerObject CreateInstance()

{

return new ServerObject();

}

}

然后再客户端的远程对象中只提供工厂接口和原来的对象接口:

public interface IServerObject

{

Person GetPersonInfo(string name,string sex,int age);

}

public interface IServerObjFactory

{

IServerObject CreateInstance();

}

我们用WellKnown激活模式注册远程对象,在服务器端:

//传递对象;

RemotingConfiguration.RegisterWellKnownServiceType(

typeof(ServerRemoteObject.ServerObjFactory),

"ServiceMessage",WellKnownObjectMode.SingleCall);

注意这里注册的不是ServerObject类对象,而是ServerObjFactory类对象。

客户端:

ServerRemoteObject.IServerObjFactory serverFactory =

(ServerRemoteObject.IServerObjFactory) Activator.GetObject(

typeof(ServerRemoteObject.IServerObjFactory),

"tcp://localhost:8080/ServiceMessage");

ServerRemoteObject.IServerObject serverObj = serverFactory.CreateInstance(); 为什么说这是一种客户端激活模式的模拟呢?从激活的方法来看,我们是使用了SingleCall模式来激活对象,但此时激活的并非我们要传递的远程对象,而是工厂对象。如果客户端要创建远程对象,还应该通过工厂对象的CreateInstance()方法来获得。而这个方法正是在客户端调用的。因此它的实现方式就等同于客户端激活模式。

b、利用替代类来取代远程对象的元数据

实际上,我们可以用一个trick,来欺骗Remoting。这里所说的替代类就是这个trick了。既然是提供服务,Remoting传递的远程对象其实现的细节当然是放在服务器端。而要在客户端放对象的副本,不过是因为客户端必须调用构造函数,而采取的无奈之举。既然具体的实现是在服务器端,又为了能在客户端实例化,那么在客户端就实现这些好了。至于实现的细节,就不用管了。

如果远程对象有方法,服务器端则提供方法实现,而客户端就提供这个方法就OK了,至于里面的实现,你可以是抛出一个异常,或者return 一个null值;如果方法返回void,那么里面可

以是空。关键是这个客户端类对象要有这个方法。这个方法的实现,其实和方法的声明差不多,所以我说是一个trick。方法如是,构造函数也如此。

还是用代码来说明这种“阴谋”,更直观:

服务器端:

public class ServerObject:MarshalByRefObject

{

public ServerObject()

{

}

public Person GetPersonInfo(string name,string sex,int age)

{

Person person = new Person();

https://www.wendangku.net/doc/511375404.html, = name;

person.Sex = sex;

person.Age = age;

return person;

}

}

客户端:

public class ServerObject:MarshalByRefObject

{

public ServerObj()

{

throw new System.NotImplementedException();

}

public Person GetPersonInfo(string name,string sex,int age)

{

throw new System.NotImplementedException();

}

}

比较客户端和服务器端,客户端的方法GetPersonInfo(),没有具体的实现细节,只是抛出了一个异常。或者直接写上语句return null,照样OK。我们称客户端的这个类为远程对象的替代类。

3、利用配置文件实现

前面所述的方法,于服务器uri、端口、以及激活模式的设置是用代码来完成的。其实我们也可以用配置文件来设置。这样做有个好处,因为这个配置文件是Xml文档。如果需要改变端口或其他,我们就不需要修改程序,并重新编译,而是只需要改变这个配置文件即可。

(1) 服务器端的配置文件:

<configuration>

<system.runtime.remoting>

<application name="ServerRemoting">

<service>

<wellknown mode="Singleton" type="ServerRemoteObject.ServerObject" objectUri="ServiceMessage"/>

</service>

<channels>

<channel ref="tcp" port="8080"/>

</channels>

</application>

</system.runtime.remoting>

</configuration>

如果是客户端激活模式,则把wellknown改为activated,同时删除mode属性。

把该配置文件放到服务器程序的应用程序文件夹中,命名为ServerRemoting.config。那么前面的服务器端程序直接用这条语句即可:

RemotingConfiguration.Configure("ServerRemoting.config");

(2) 客户端配置文件

如果是客户端激活模式,修改和上面一样。调用也是使用RemotingConfiguration.Configure()方法来调用存储在客户端的配置文件。

配置文件还可以放在machine.config中。如果客户端程序是web应用程序,则可以放在web.config中。

4、启动/关闭指定远程对象

Remoting中没有提供类似UnregisterWellKnownServiceType()的方法,也即是说,一旦通过注册了远程对象,如果没有关闭通道的话,该对象就一直存在于通道中。只要客户端激活该对象,就会创建对象实例。如果Remoting传送的只有一个远程对象,这不存在问题,关闭通道就可以了。如果传送多个远程对象呢?要关闭指定的远程对象应该怎么做?关闭之后又需要启动又该如何?

我们注意到在Remoting中提供了Marshal()和Disconnect()方法,答案就在这里。Marshal()方法是将MarshalByRefObject类对象转化为ObjRef类对象,这个对象是存储生成代理以与远程对象通讯所需的所有相关信息。这样就可以将该实例序列化以便在应用程序域之间以及通过网络进行传输,客户端就可以调用了。而Disconnect()方法则将具体的实例对象从通道中断开。方法如下:

首先注册通道:

TcpChannel channel = new TcpChannel(8080);

ChannelServices.RegisterChannel(channel);

接着启动服务:

先在服务器端实例化远程对象。

ServerObject obj = new ServerObject();

然后,注册该对象。注意这里不用

RemotingConfiguration.RegisterWellKnownServiceType(),而是使用RemotingServices.Marshal():

ObjRef objrefWellKnown = RemotingServices.Marshal(obj, "ServiceMessage");

如果要注销对象,则:

RemotingServices.Disconnect(obj);

要注意,这里Disconnect的类对象必须是前面实例化的对象。正因为此,我们可以根据需要创建指定的远程对象,而关闭时,则Disconnect之前实例化的对象。

至于客户端的调用,和前面WellKnown模式的方法相同,仍然是通过Activator.GetObject()来获得。但从实现代码来看,我们会注意到一个问题,由于服务器端是显式的实例化了远程对象,因此不管客户端有多少,是否相同,它们调用的都是同一个远程对象。因此我们将这个方法称为模拟的SingleTon模式。

客户端激活模式

我们也可以通过Marshal()和Disconnect()来模拟客户端激活模式。首先我们来回顾“远程对象元数据相关性”一节,在这一节中,我说到采用设计模式的“抽象工厂”来创建对象实例,以此用SingleCall模式来模拟客户端激活模式。在仔细想想前面的模拟的SingleTon模式。是不是答案就将呼之欲出呢?

在“模拟的SingleTon”模式中,我们是将具体的远程对象实例进行Marshal,以此让客户端获得该对象的引用信息。那么我们换一种思路,当我们用抽象工厂提供接口,工厂类实现创建远程对象的方法。然后我们在服务器端创建工厂类实例。再将这个工厂类实例进行Marshal。而客户端获取对象时,不是获取具体的远程对象,而是获取具体的工厂类对象。然后再调用CreateInstance()方法来创建具体的远程对象实例。此时,对于多个客户端而言,调用的是同一个工厂类对象;然而远程对象是在各个客户端自己创建的,因此对于远程对象而言,则是由客户端激活,创建的是不同对象了。

当我们要启动/关闭指定对象时,只需要用Disconnet()方法来注销工厂类对象就可以了。六、小结

https://www.wendangku.net/doc/511375404.html, Remoting真可以说是博大精深。整个Remoting的内容不是我这一篇小文所能尽述的,更不是我这个Remoting的初学者所能掌握的。王国维在《人间词话》一书中写到:古今之成大事业大学问者,必经过三种境界。“昨夜西风凋碧树,独上高楼,望尽天涯路。”此第一境界也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二境界也。“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”此第三境界也。如以此来形容我对Remoting的学习,还处于“独上高楼,望尽天涯路”的时候,真可以说还未曾登堂入室。

或许需得“衣带渐宽”,学得Remoting“终不悔”,方才可以“蓦然回首”吧。

宏电DTUGPRS远传实例

GPRS信号监测装置调试 硬件接线图 一、ADAM-4117参数设置 1.将ADAM-4117模块右侧开关拨至INIT(配置状态); 2.打开调试软件https://www.wendangku.net/doc/511375404.html,Utility,选择相应的串口号,右击选择Search,出现对话框(图a),点击Start,直至搜索到模块()后点击Cancel; 图a 3.点击4117(*),配置并保存相应参数,如图(b)。点击右上角的“Applychange”保存设置到模块的芯片里。 图b

二、宏电H7710GPRSDTU模块参数设置 1.断电,打开调试软件sscom32.exe,选择相应串口号,设置相应参数如图c(修改参数的波特率一直为57600); 图c 2.按住空格键,通电,直至出现图d现象; 图d 3.按照帮助指示输入“H”,出现主菜单(图e),输入“C”,再输入密码“1234”,回车,进入DTU配置(C)菜单(图f); 图e图f图g 4.输入“3”,进入“数据服务中心设置(DSC)”菜单(图g), 输入“1”,配置“DSCIP地址”, ;输入“2”,配置“DSC域名”; (注:若已配置固态IP地址,则无需配置域名,即配置域名时按回车键即可;若使用动态IP地址,则将IP地址设为0.0.0.0,域名改为相应的域名地址) 输入“3”,配置“DSC通讯端口”,端口号自己定义,但必须与读取时端口号设置一致;

输入“4”,配置“DNSIP地址”, ,一般设为主站的DNSIP地址;输入“r”,保存设置输入Y或者N。 5.输入“4”进入“用户串口设置”菜单(图h) 图h图i 输入“1”,配置波特率(图i),一般采用9600bps,故输入“4”,再输入“r” 返回菜单; 输入“2”,配置数据位,一般设为8; 输入“3”,配置校验位,一般设为无校验位,故输入“1”,再输入“r”返回菜单; 输入“4”,配置停止位,一般设为1; 输入“r”,返回主菜单。 6.输入“5”,进入“特殊选项设置”菜单(图j) 图j 输入“6”,配置“通讯协议选择(透明0/DDP协议1)” ,一般选择透明,故输入“0”; 输入“7”,配置“网络连接方式(UDP0/TCP1)” ,一般采用TCP连接方式,故输入“1”; 输入“r”,再输入“r”返回主菜单。

GPRS DTU模块 说明书

目录 第一章产品简介 (4) 1.1概述 (4) 1.2产品特点 (4) 1.3技术参数 (4) 1.4产品外型 (5) 1.5接口定义 (6) 第二章安装调试 (7) 2.1概述 (7) 2.2 开箱 (7) 2.3 安装方法 (7) 2.3.1安装说明 (7) 2.3.2安装SIM卡和天线 (8) 2.4指示灯状态说明 (9) 第三章参数设置 (10) 3.1 连接设置 (10) 3.2 设参软件安装及模块的参数设置 (10) 3.2.1设参软件的安装 (10) 3.2.2 模块的参数设置 (11) 3.2.3多个DATA-6123模块的参数设置 (14) 3.2.3.1多个模块连续设置 (14) 3.2.3.2多个模块在不同时间进行设置 (14) 3.2.4其它参数解释 (15) 第四章测试 (17) 第五章远程维护 (19) 5.1 远程升级 (19) 5.1.1概述 (19) 5.1.2 通过“程序下载软件”远程升级 (19) 5.2 远程读、设参 (22) 5.2.1概述 (22) 5.2.2软件设置 (22) 5.2.3远程读参 (22) 5.2.4远程设参 (24) 第六章故障分析与排除 (25)

版权声明: 本使用说明书包含的所有内容均受版权法的保护,未经唐山平升电子技术开发有限公司的书面授权,任何组织和个人不得以任何形式或手段对整个说明书和部分内容进行复制和转载,不得以任何形式传播。 商标声明: 为唐山平升电子技术开发有限公司的注册商标。本文档提及的其他所有商标或注册商标,由拥有该商标的机构所有。 注意: 由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

DTU基础知识

1、什么是DTU? 答:DTU是数据终端设备(Data Terminal unit)的简写。广义地讲,在进行通信时,传输数据的链路两端负责发送数据信息的模块单元都称之为DTU,在它的作用下对所传信息进行格式转换和数据整理校验。狭义地讲,DTU一般特指无线通讯中的下位GPRS/CDMA发射终端设备。前者是一种模块,而后者则是设备。后面的介绍如果不加特别说明,都是指后者(下位发射终端设备)。 2、与DTU有关的名词解释? 1)什么是上位机和下位机? 答:上位机和下位机是一个相对的概念,在通信中,有主从关系的一对设备,负责提交信息的终端设备是下位机,负责处理提交信息的设备是上位机。DTU设备大多数情况下就属于下位机,而负责处理DTU回传信息的数据中心就是上位机,典型的应用方式是多台DTU对应一个数据中心。但是上位机和下位机不一定都是一一对应,他们可以是一个下位机对应一个或多个上位机,也可以是一个上位机对应一个或多个下位机,具体的对应方式要视应用而定。 2)什么是数据中心? 答:数据中心是指对下位机回传的信息进行采集、汇总和处理,并对下位机进行一定控制和管理的上位机系统,他包括完整的计算机硬件设备和特定的完整软件功能。 3)什么是全透明传输? 答:全透明传输就是对IP包不作任何操作和改变,只是简单的发送过程。通俗的讲就是,全透明传输时,数据在发送前和发送后的格式、内容都不发生变化,远端数据中心接收的数据与现场采集的数据是一样的,数据在传输过程中不发生变化,如果IP包有任何的操作和改变,就不是完全意义上的全透明了。 3、DTU与无线Mmodem有什么区别? 答:首先要明确的一点是:DTU与无线Modem是不一样的。 在软件设计上,DTU封装了协议栈内容并且具有嵌入式操作系统,硬件上可看作是嵌入式PC加无线接入部分的接合。GPRS/CDMA Modem是接入GPRS/CDMA分组网络的一个物理通道,它本身不具有操作系统,必须依附于计算机(在功能上类似于有线Modem),在计算机操作系统之上才能进行PPP拨号连接,通常是与PC结合使用。从某种角度来说,DTU是嵌入式PC与GPRS/CDMA Modem的结合,但它不能单独当作Modem 使用,它完成数据协议转换和透明传输这样一个功能。在使用上,前端采集设备或智能数据设备,通常提供标准的数据接口,如RS232、RS485/422等,这些前端用户设备适合采用DTU,借助于GPRS/CDMA网络平台,实现与监控中心端的数据通信。GPRS/CDMA Modem需要接入计算机,实现组网连接,比如说中心站的PC主机可以通过GPRS/CDMA Modem接入GPRS/CDMA网络,从而构成某中心站服务器,实现网络监控,数据通信等。而DTU很难作为中心服务站来使用。 4、DTU测试前需要做什么准备工作? 答:在对DTU进行测试前,需要有以下条件:

GPRS模块参数设置说明

GPRS模块参数设置说明 1. 超级终端通讯端口设置 新建一个超级终端,Windows系统会要求选择有关串行口的设置,选择连接的串行端口号(如COM2),参照下图所示配置串行端口参数: 超级终端通信参数设置如下: 速率: 57600baud 数据位: 8bit 奇偶校验:无 停止位: 1bit 数据流控制:无 2. 进入参数设置模式 启动PC的超级终端软件,按住PC键盘的空格键(SPACE),打开配置终端盒电源。必须在设备加电之前按住PC键盘的空格键(SPACE)不放,然后加电,直至PC机的超 级终端屏幕上显示下图所示界面

在主菜单(Main Menu)状态下键入C进入参数配置,系统可能会要求输入密码,请输入正确密码: 密码:1234 输入正确密码后键回车,进入如下所示界面。 在此状态下键入相应数字,即可进入对应参数配置项。 一般情况需要配置的参数项有: 1 移动业务中心参数配置 3 数据业务中心参数配置 4 串口通讯参数配置 其他参数项建议采用默认值! 3. 各参数项设置 3.1 移动业务中心参数配置(MSC) 在DTU参数配置(Configurations)菜单状态下1,进入移动业务中心参数配置 (MSC):

在此状态下键入相应数字,即可进行参数设置。 例: 按提示信息输入名称,按回车键确认。 然后按“R”键返回上层菜单, 按“Y”键确认保存。 如不需更改此项参数,按“Esc”键退出此项。 其它参数设置方法同此。 如采用公网,此参数项可采用默认。 如采用专网,根据需要设置的参数是: 2 用户名称 3 用户密码 4 设置接入点名称(默认为“CMNET”) 3.2 数据业务中心参数配置(DSC) 在DTU参数配置(Configurations)菜单状态下 3,进入移动业务中心参数

宏电DTU参数配置

宏电DTU的参数配置和与DEMO的连接测试 一、DTU的参数配置与下载 1、RS232接口的DTU接线原则:232母头连接线的RXD连接DTU的RS(B-);TXD连 接DTU的TX(A+)。GND接地一定要跟电源的GND相连接。否则通讯不上。 2、RS485接口的DTU接线原则:485+接A+;485-接B-。 3、配置DTU参数的时候一定要把IP设定为公网IP,另外端口映射一定要正确。 4、具体的DTU参数配置如下图所示: 图1.1 在图1中的DSC连接类型中选择UDP连接方式。IP地址设定为公网IP。

在图2中的本地IP也不需要进行设置。 图1.3

在图8中的本地端口和DNS地址不需要配置选择系统默认的就行。 图1.5

图1.6 图1.7

图1.8 配置注意问题: 1、配置过程中一定要注意IP地址是设定公网IP,并且端口号得映射也一定要与本机电脑 在路由器上的映射端口号相一致,否则就会出现连接不上的现象。 2、在配置好参数向DTU下载的过程中一定要先把DTU断电,点击“连接”之后再给DTU 上电,才能连接成功。连接成功之后,点击“全选”然后再点击“设置”就可以把配置好的参数下载到DTU中去。 二、DTU与DSC_DEMO的连接设置 DTU演示系统与DTU的连接过程中,也要对其进行参数设置,否则无法连接成功。具体的 需要设置的参数为:“设置”,如下图所示

图2.1 图2.2 在图2.2中“指定IP”前面一定不能选,服务类型选择UDP,启动类型:自动启动。 图2.3 按照上面的步骤配置完成后,先点击“启动服务”然后再开启DTU电源,连接成功后显示如下的界面。

DTU使用说明书

DTU使用说明书 此说明书适用于下列型号产品: 型号产品类别 F2116GPRS IP MODEM F2216CDMA IP MODEM F2416WCDMA IP MODEM F2616EVDO IP MODEM F2716TDD-LTE IP MODEM F2816FDD-LTE IP MODEM F2A16LTE IP MODEM 文档修订记录

目录 第一章产品简介 (3) 1.1产品概述 (3) 1.2产品特点 (3) 1.3工作原理框图 (4) 1.4产品规格 (4) 第二章安装 (8) 2.1概述 (8) 2.2开箱 (8) 2.3安装与电缆连接 (8) 2.4电源说明 (11) 2.5指示灯说明 (11) 第三章参数配置 (12) 3.1配置连接 (12) 3.2参数配置方式介绍 (12) 3.3参数配置详细说明 (12) 3.3.1配置工具运行界面 (13) 3.3.2设备上电 (14) 3.3.4中心服务 (20) 3.3.5串口 (21) 3.3.6无线拔号 (22) 3.3.7全局参数 (23) 3.3.8设备管理 (25) 3.3.9其它功能项 (26) 第四章数据传输试验环境测试 (26) 4.1试验环境网络结构 (26) 4.2测试步骤 (27)

第一章产品简介 1.1产品概述 F2X16系列IP MODEM是一种物联网无线数据终端,利用公用蜂窝网络为用户提供无线长距离数据传输功能。 该产品采用高性能的工业级32位通信处理器和工业级无线模块,以嵌入式实时操作系统为软件支撑平台,同时提供RS232和RS485(或RS422)接口,可直接连接串口设备,实现数据透明传输功能;低功耗设计,最低功耗小于5mA@12VDC;提供1路ADC,2路I/O,可实现数字量输入输出、脉冲输出、模拟量输入、脉冲计数等功能。 该产品已广泛应用于物联网产业链中的M2M行业,如智能电网、智能交通、智能家居、金融、移动POS终端、供应链自动化、工业自动化、智能建筑、消防、公共安全、环境保护、气象、数字化医疗、遥感勘测、军事、空间探索、农业、林业、水务、煤矿、石化等领域。IP MODEM典型应用如图1-1所示: 图1-1IP MODEM应用拓扑图 1.2产品特点 工业级应用设计 ◆ 采用高性能工业级无线模块 ◆ 采用高性能工业级32位通信处理器 ◆ 低功耗设计,支持多级休眠和唤醒模式,最大限度降低功耗 ◆ 采用金属外壳,保护等级IP30。金属外壳和系统安全隔离,特别适合于工控现场的应 用 ◆ 宽电源输入(DC5~36V) 稳定可靠 ◆ WDT看门狗设计,保证系统稳定 ◆ 采用完备的防掉线机制,保证数据终端永远在线 ◆ RS232/RS485/RS422接口内置15KV ESD保护 ◆ SIM/UIM卡接口内置15KV ESD保护 ◆ 电源接口内置反相保护和过压保护 ◆天线接口防雷保护(可选) 标准易用

DTU介绍

DTU数据传输单元介绍 数据传输单元DTU (Data Transfer unit),是专门用于将串口数据转换为IP数据或将IP数据转换为串口数据通过无线通信网络进行传送的无线终端设备[1-2]。 DTU DTU产品系列(3张) DTU硬件组成 DTU 硬件组成部分主要包括CPU控制模块、无线通讯模块以及电源模块 DTU 优点: 组网迅速灵活,建设周期短、成本低; 网络覆盖范围广; 安全保密性能好; 链路支持永远在线、按流量计费、用户使用成本低; CPU:工业级高性能ARM9嵌入式处理器,带内存管理MMU,200MPS, 16KB Dcache,16KB Icache FLASH:8MB,可扩充到32MB SDRAM:64MB,可扩充到256MB

接口: UART: CM 3160P: 1个RS232串口 串口速率:110bps ~ 230400bps 数据位支持:8位或7位 奇偶校验位:无或奇数校验或偶数校验 停止位:1位或2位 流控:无或RTS/CTS CM 3160EP: 1个RS485接口(根据需要,可硬件跳线支持RS232/422/TTL) 串口速率:110bps ~ 230400bps 数据位支持:8位或7位 奇偶校验位:无或奇数校验或偶数校验 停止位:1位或2位 流控:无或RTS/CTS 控制口: RS-232, 115200 bps, 8 data bits,1 stop bit, no parity (8N1) 指示灯:具有电源、通信及在线指示灯 天线接口:标准SMA阴头天线接口,特性阻抗50欧 UIM卡接口:3V/1.8V标准的推杆式用户卡接口 电源接口:标准的3芯火车头电源插座 语音接口:标准的耳机麦克风接口 3.5 供电: 外接电源:DC 9V 500mA 宽电压供电:DC 5-32V 通信电流:350mA 待机电流:35mA 3.6 尺寸: 产品外形尺寸:92x62x22 mm(不包括天线及固定件) 产品包装尺寸:298x226x60mm 3.7 重量: 0.41KG 3.8 其他参数: 工作环境温度:-25~+65ºC 储存温度:-40~+85ºC 相对湿度:95%(无凝结) DTU软件组成 4.1 TCP/UDP透明数据传输;支持多种工作模式。心跳包技术 4.2 智能防掉线,支持在线检测,在线维持,掉线自动重拨,确保设备永远在线 4.3 支持RSA,RC4加密算法

【整理】无线通讯模块DTU电科院各项认证实验报告

无线模块电科院各项认证实验报告 实验一:外观认证 产品名字,厂家,合格证书等认证。 实验二:通讯认证 通信终端向服务器每秒发送一定字节的数据,服务器能否全部收到,有没有乱码等。 实验三:功耗测试 电源12V输入,待机模式下1.2W,收发数据模式下1.6W。 实验四:电源浪涌实验 实验依据:GB/T 17626.5中规定的严酷等级为4级的浪涌骚扰。 实验方法: 1.差模±2000V,每60S一次,打5次, 2.共模±4000V,每60S一次,打5次。 1.整改前,电源12V进来接通过电流3A保险丝,并联一个300W功率,40V耐压的TVS管,再接一个过3A电流的防反接二极管,最后输入到DC-DC电源芯片。如下图所示。 2.整改方案1,电源12V输入端先并联一个耐压为36V的压敏电阻470KD20JX,再串联一个电流3A的保险丝,再并联一个功率1500W,耐压36V的TVS管,再接过3A电流的防反接二极管,最后输入到DC-DC 电源芯片。如下图所示。 3.整改方案2,电源12V输入端直接并联一个5000W,26耐压的TVS 管,然后串上过3A电流的防反接二极管,最后输入到DC-DC电源芯

片。如下图所示。 浪涌实验结果如下: 整改前:共模±4000V没问题,差模±2000V导致TVS管烧坏击穿,lmr14030芯片击穿,模块不能正常工作。 方案1:共模±4000V没问题,差模±2000V时,压敏电阻,TVS 管,lmr1430都没有问题,但是BL1117-3.3V的LDO芯片击穿,导致单片机烧坏,模块不能正常工作。 方案2:共模±4000V和差模±2000V都实验两台设备,全程实验没有出现烧坏元器件的现象,模块通讯也正常,没有出现程序死机复位等现象。 实验五:电快速瞬变脉冲群实验 实验依据:GB/T 17626.4规定的严酷等级为4级的电快速瞬变干扰。 实验标准:差模±4000V,频率5KHz,持续时间90S 实验结果:导致实验设备掉线,无法正常通讯。 整改方案:电源12V输入端直接并联330KD20JX耐压为26V的压敏电阻,和一个5000W,26耐压的TVS管SMDJ26CA,电源正负极分别与大地之间接一个101 8KV的高压瓷片电容,然后串上过3A电流的防反接二极管,最后输入到DC-DC电源芯片。如下图所示。 整改后实验结果:整改后没有出现死机,掉线等现象,实验合格。实验六:高频干扰实验 实验依据:GB/T 17626.10规定的严酷等级为4级的高频干扰。

DTU、GPRS DTU模块与力控组态软件通信设置说明

DTU(GPRS DTU模块)与力控组态软件 通信设置说明 V1.1

修订文档历史记录 日期版本说明作者2015-8-19 1.1 力控驱动7.0文档整理发布

目录 一、简介 (4) 二、设置GPRS模块(DTU)相关参数: (4) 1、安装设参软件 (4) 2、GPRS模块参数设置 (4) 3、同时设置多个模块 (6) 三、力控组态软件的配置方法 (7) 1、安装驱动 (7) 2、新建I/O设备 (7) 3、数据库组态 (11)

一、简介 设备类型:GPRS DTU 支持网络类型:GPRS 主要功能:通过GPRS实现远端设备与组态软件服务器的通信。GPRS网络覆盖率高、部署成本低,可与各式串口终端设备连接 ,具有内建Watchdog功能,系统永不当机,使用者不需编写程式即可设定通讯格式、传送方式及传送内容。 支持协议:TCP/IP。 二、设置GPRS模块(DTU)相关参数: 使用DATA-6123 GPRS 模块(DTU)作为无线通信设备,实现远端串口设备与服务器端的力控组态软件之间的无线通信,首先必须对模块进行设置,设置方法如下: 1、安装设参软件 请点击随机光盘内的设参软件安装包,将设参软件安装到PC主机。 双击图标进行安装 2、GPRS模块参数设置 将GPRS模块通过串口与电脑主机相连,接通模块电源后打开设参软件,点击“GPRS参数”,在弹出窗口中,“指定方式”选择串口,点击确定,如下所示:

进入参数设置页面,点击“读取”按钮,即可读取当前连接的GPRS模块参数设置信息,如下图所示: 读取设备参数后,即可进行参数设置,首先请设置“基本参数”: 本机号码:即SIM卡号; 传输型号:B型; 系统识别码:为一个任意6位数字,需保持默认设置,不可更改; 监听端口:必须与组态软件配置服务器的端口号一致;

DTU的30种问题的解决办法

DTU的30种问题的解决办法 一、DTU不能进入配置状态: 方法如下: 1、检查DTU的波特率和参数配置软件的波特率是否一致(才茂DTU出厂波特率为57600,最大115200); 2、检查串口线是否连接正常; 二、DTU可以进入配置状态,但AT指令不能写入? 方法如下: 1、检查模块与电路板是否接处良好; 2、模块波特率是否被改成太大了; 三、如何更改波特率? 方法如下: 在对波特率进行修改的时候,(透明模式下)按“s”键进入设置模式,输入AT+IPR?先查询其波特率, 含协议下为38400 , 但后台串口波特率仍为57600 。这时输入你想要更改的波特率,AT+IPR=1200,返回,在超级终端下断开连接,将后台波特率更改为1200,在进入超级终端,直接敲回车,输入AT 指令,这时就可以通过1200 波特率进行通信了。(非透明模式下)直接输入AT+IPR=1200,返回,相同的在超级终端下断开连接,将后台波特率更改为1200,就可以正常使用了。

四、DTU的默认设置是什么? 方法如下: 1、8位数据位/无奇偶校验/1位停止位、波特率57600bps 2、数据传输速率:57600bps 五、如何检查DTU有没有登陆GPRS/CDMA网络? 方法如下: 检测方法为:在AT 命令态下,输入AT+CGATT=1,返回OK,再输入AT+CGATT? 如返回的是1则表示进入GPRS 网络,如返回的是0 则表示还未登入GPRS 网络。CDMA暂无指令进行判断! 六、DTU不能连上中心? 方法如下: 1、先确定才茂通信中心DEMO的设置是否正常(可用模拟DTU来连中心),然后,在查看DTU的配置是否正确,即中心地址,端口等是否设置正确; 2、DTU信号是否正常(AT指令查看),SIM卡是否欠费; 七、DTU和中心DEMO的设置都正常的情况下,DTU还是连不上中心? 方法如下: 首先,我们先确定运行中心DEMO的PC机是否进行端口映射(如运行在DMZ服务器上则不需要端口映射); 再次,确定所映射的端口没有被占用;有没有被防火墙挡住。 八、中心DEMO与DTU通讯正常,但和下位的PLC通讯不上? 方法如下: 1、DTU的参数是否与下位的PLC对应,如波特率,奇偶校验,数据位,停止位。 2、PLC的通讯协议是还正确(可以先与PC机进行通讯)。 3、DTU与下位PLC 串口485电阻不匹配(匹配电阻一般在10几欧到200欧之间。 4、DTU与PLC通讯接口是否连接正确 九、中心DEMO与DTU正常通讯,但经常掉线? 方法如下: 1、DTU的心跳包时间是否设置正确,心跳包时间设置长度与当地的网络有关,一般设置在当地网络允许时间内无数据传输不会掉线之内; 2、DTU的ID号,SIM卡号是不是设置成唯一的,如果重复则会出现不断的掉线重连; 十、每次发送数据产生冗余数据量大小是多少? 方法如下: DTU只有在和中心端建立连接的时候会产生冗余数据,就是把自身的信息发给中心,以后只要在这链路未断的情况下,发送的数据是不会产生; 冗余数据。冗余数据为45个字节,具体格式如下:8位HEXID(4位)+11位电话号码+ 0 + 登入IP地址=41个;

DTU功能简介

DTU功能简介 DTU概述 DTU是数据终端设备(Data Terminal unit)的简写。广义地讲,在进行通信时,传输数据的链路两端负责发送数据信息的模块单元都称之为DTU,在它的作用下对所传信息进行格式转换和数据整理校验。狭义地讲,DTU一般特指无线通讯中的下位GPRS/CDMA发射终端设备。前者是一种模块,而后者则是设备。后面的介绍如果不加特别说明,都是指后者(下位发射终端设备) DTU的核心功能 1)内部集成TCP/IP协议栈 DTU内部封装了PPP拨号协议以及TCP/IP协议栈并且具有嵌入式操作系统,从硬件上,它可看作是嵌入式PC与无线的结合;它具备无线拨号上网以及TCP/IP数据通信的功能。 2)提供串口数据双向转换功能 DTU提供了串行通信接口,包括CM510-21X,CM510-23X,CM510-22X等都属于常用的串行通信方式,而DTU在设计上大都将串口数据设计成“透明转换”的方式,也就是说DTU可以将串口上的原始数据转换成TCP/IP数据包进行传送,而不需要改变原有的数据通信内容。因此,DTU可以和各种使用串口通信的用户设备进行连接,而且不需要对用户设备作改动。 3)支持自动心跳,保持永久在线

无线通信网络的优点之一就是支持无线终端设备永久在线,因此典型的无线DTU在设计上都支持永久在线功能,这就要求DTU包含了上电自动拨号、采用心跳包保持永久在线(当长时间没有数据通信时,移动网关将断开DTU 与中心的连接,心跳包就是DTU与数据中心在连接被断开之前发送一个小数据包,以保持连接不被断开)、支持断线自动重连、自动重拨号等特点。 4)支持参数配置,永久保存 DTU作为一种通信设备,其应用场合十分广泛。在不同的应用中,数据中心的IP地址及端口号,串口的波特率等都是不同的。因此,DTU都应支持参数配置,并且将配置好的参数保存内部的永久存储器件内(一般为FLASH 或EEPROM等)。一旦上电,就自动按照设置好的参数进行工作。 5)支持用户串口参数设置 不同用户设备的串口参数有所不同,DTU连接用户设备的串口时,要根据用户设备串口的实际参数对DTU端进行相应设置,保证用户设备的正常通信和可靠数据传输。 6)DTU (Data Transfer unit)全称数据传输单元,是专门用于将串口数据转换为IP数据或将IP数据转换为串口数据通过无线通信网络进行传送的无线终端设备。 DTU硬件组成 DTU 硬件组成部分主要包括CPU控制模块、无线通讯模块以及电源模块 DTU 优点 组网迅速灵活,建设周期短、成本低; 网络覆盖范围广; 安全保密性能好; 链路支持永远在线、按流量计费、用户使用成本低; DTU工作过程描述 DTU上电后,首先读出内部FLASH中保存的工作参数(包括无线拨号参数,串口波特率,数据中心IP地址等等,事先已经配置好)。 DTU登陆GSM网络,然后进行PPP拨号。拨号成功后,DTU将获得一个由移动随机分配的内部IP地址(一般是10.X.X.X)。也就是说,DTU处于移动内网中,而且其内网IP地址通常是不固定的,随着每次拨号而变化。我们可以理解为无线DTU这时是一个移动内部局域网内的设备,通过移动网关来实现与外部Internet公网的通信。这与局域网内的电脑通过网关访问外部网络的方式相似。 DTU主动发起与数据中心的通信连接,并保持通信连接一直存在。由于DTU处于移动内网,而且IP地址不固定。因此,只能由DTU主动连接数据中心,而不能由数据中心主动连接DTU。这就要求数据中心具备固定的公网IP 地址或固定的域名。数据中心的公网IP地址或固定的域名作为参数存储在DTU内,以便DTU一旦上电拨号成功,就可以主动连接到数据中心。 具体地讲,DTU通过数据中心的IP地址(如果是采用中心域名的话,先通过中心域名解析出中心IP地址)以及端口号等参数,向数据中心发起TCP

浅析宏电新版本DTU配置方法

浅析宏电新版本DTU配置方法 黄锐,蓝天飞,任玮颖 (湖北省十堰市气象局,湖北十堰 442000) 摘要:我省区域自动气象站的数据传输采用的是移动网络GPRS方式,数据传输的核心部件DTU的参数配置正确与否直接影响其通信状态。针对DTU生产厂家对DTU升级后采用了新的配置方法,本文介绍了DTU升级后新的配置方法与原有配置方法的区别,详细介绍了配置软件的的操作步骤,对配置参数时需要注意的选项进行了介绍,并和原有的配置方法进行了对比。 关键词:DTU;配置;方法 引言 深圳市宏电技术股份有限公司生产 DTU(Data Transfer Unit)是一款基于 GPRS/GSM网络的无线 DDN(Digital Data Network)的数据通信产品[1]。其广泛应用在我省的高山自动气象站、区域自动气象站、应急车载便携式自动气象站等设备上,DTU的配置参数使用超级终端工具进行配置。然而,从2015年开始,深圳市宏电技术股份有限公司对DTU进行了升级,新型号为H7118C-V59、WUSH8118,模块参数的配置方法有了改变,不能使用原有的超级终端进行配置,需要用专用的配置软件对通信模块进行参数设置。因此,本文对使用配置软件对新版本通信模块进行参数配置时,配置方法与原有使用超级终端配置DTU的方法进行了区分,对配置参数时的异同之处进行了介绍,对需要着重注意的地方进行了说明,解决因厂家DTU升级后气象技术保障人员对新版本DTU配置方法不熟练、参数配置不正确而导致DTU不上线的问题。 1 宏电DTU版本的查询与配置工具的准备 深圳市宏电技术股份有限公司生产的宏电DTU的版本信息可在DTU背部查询(见图1)。D54、V56等原版本DTU均为2008年、2012年生产,生产日期显示在条形码最下端。新版本DTU V59、WUSH8118均为为2015年后生产,它的配置方法与原版本DTU使用超级终端工具的配置方法不同,新版本的DTU采用专用的DTU配置软件“DTU工具盒”来对模块的参数进行配置。 图1 原版本模块参数(a)、新版本模块参数(b)

相关文档