文档库 最新最全的文档下载
当前位置:文档库 › uip-0.9_ch01中文参考手册

uip-0.9_ch01中文参考手册

uip-0.9_ch01中文参考手册
uip-0.9_ch01中文参考手册

uIP0.9 参考手册

by Doxygen 1.3.3 Tue Oct 7 15:51:00 2003 译: fishOnFly(鱼在飞)

第1章UIP TCP/IP协议栈 (1)

1.1U IP介绍 (1)

1.2TCP/IP通信 (1)

1.3内存管理 (2)

1.4应用程序接口(API) (3)

1.4.1 应用程序事件 (3)

1.4.2 连接指针 (4)

1.4.3 接收数据 (4)

1.4.4 发送数据 (4)

1.4.5 数据重传 (4)

1.4.6 关闭连接 (4)

1.4.7 差错报告 (5)

1.4.8 轮询 (5)

1.4.9 监听端口 (5)

1.4.10 打开连接 (5)

1.5U IP设备驱动 (6)

1.6架构相关的函数 (6)

1.6.1 校验和计算 (7)

1.6.2 32位运算 (7)

1.7实例 (7)

1.7.1 一个非常简单的应用程序 (7)

1.7.2 一个高级应用 (8)

1.7.3 如何区分不同的应用程序 (9)

1.7.4 使用TCP流量控制 (10)

1.7.5 简单的web服务器 (11)

1.7.6 结构化应用程序设计 (12)

第1章uIP TCP/IP协议栈

uIP TCP/IP协议栈的目标是:即便是8位微控制器也能够使用TCP/IP协议栈进行网络通信。尽管小而简单, uIP不需要与他们通信的节点配有复杂,全尺寸协议栈,只要通过运行轻量级协议栈能够通信便可。代码只有区区几k字节,RAM消耗最低也只有几百个字节。

1.1 uIP 介绍

随着互联网的成功,TCP/IP 协议簇已成为全球通讯标准。TCP/IP 是底层协议用于通过进行网页传输,电子邮件传送,文件传输以及点对点网络互联。对于嵌入式系统,能够运行本地TCP/IP 使得系统可以直连企业内部网甚至是全球互联网。嵌入式设备有了全功能的TCP/IP 支持,将可以与网络中的其他主机进行通信。

传统的TCP/IP 实现,其代码体积大占用资源多,对于8位或者16位的系统来说显得有点吃力。对于仅能容纳小于100k的系统,是不可能移植一个完整的TCP/IP协议栈的。

uIP设计只实现了进行网络通信所需的必要的TCP/IP组件。提供基础的UDP服务,重点是IP,ICMP(ping),TCP服务。uIP是用C语言编写的。

许多其他为小型系统设计的TCP/IP实现都假定嵌入式设备会和一个运行全尺寸TCP/IP协议栈的工作站级别的机器通信。在这种情形下,去除TCP/IP协议簇中很少使用的功能模块成为可能。但是当和运行同样受限,比如是运行分布式点对点服务和协议的的设备通信时,那些功能却又是必需的。uIP被设计成RFC兼容以使嵌入式设备有相同的通信能力,同时,uIP TCP/IP并不是针对特定应用的,是通用的能进行网络通信所必需组件的合集。

1.2 TCP/IP 通信

全尺寸TCP/IP协议簇包含了为数众多的协议,覆盖底层的ARP协议,用以将IP地址转换成MAC 地址,到应用层的协议,比如SMTP,用于电子邮件的传输。uIP关心的TCP和IP协议以及高层的协议,我们称之为“应用”,对于底层协议(比如数据链路层协议),这些一般由硬件或者固件实现,我们称之为由网络驱动程序控制的“网络设备”。

图1-1 TCP/IP 模型

TCP是面向连接的,有保障的通信协议。应用层生成数据向下传递到传输层,根据使用的协议(TCP or UDP)不同加上不同协议头信息,并把数据分割成互联网层所能传递的最大数据单元(MTU,一般默认1500的不是),继续向下传递到互联网层,该层很负责路由(根据IP地址找路),并加上相应的头信息(包含目的地址,源地址等等),然后向下传给网络接口层,该层一般实现为数据链路层和物理层,数据链路层加入和设备相连的链路类型(以太网,还是点对点链路?),并把它们加入头部;物理层就是把bit流转换成电压电流信号发出去;对面相连的设备进行相反地操作。

协议的相关文档以RFC形式发布,看TCP/IP协议最权威的就是看RFC文档了。可以看看RFC1122文档,他定义了端到端的通信和模型中层与层之间的通信所应遵循的。

在uIP中,影响host-to-host通信的RFC要求都实现了,只是为了减小代码体积,移除了不必要的应用程序和协议栈之间的接口,比如软件错误报告机制和动态的TCP连接相关的服务类型配置。因为很少有软件使用这方面的机制,移除了也不失一般性。

1.3 内存管理

uIP所针对的目标架构,其RAM都是稀缺的。这样TCP/IP协议栈能用到的RAM就非常有限,也许就那么几K。也就是不能像传统的TCP/IP实现那样,资源不够。

uIP并不显式的使用动态内存分配。相反,他使用一个单独的全局buffer:uip_buf来处理数据包,同时使用一个固定大小的表来保持连接状态。包缓存buffer被设计的足够大可以容纳最大的包分组。当网络设备接收到数据时,网络驱动程序会将数据放到这个全局的buffer中,然后调用TCP/IP 协议栈,进行相应处理。这里有一个linux内核架构图,也许对你了解应用程序、协议栈、驱动、控制器之间的关系有所帮助。如果包中有数据(有可能只是握手协议数据,没有应用数据),应用程序需要尽快的从buffer中取走数据处理或者复制到第二缓存中去稍后处理,因为只有一个全局buffer,不然的话可能会被下一个包覆盖掉。直到数据被应用程序处理完之前,包缓存是不会被新包覆盖的(?),如果应用程序正在进行处理数据,后续的包必需进行硬件级或者驱动级的排队。大多数的以太网控制器有一个硬件缓存至少可容纳4个最大尺寸的以太网帧。如果缓存满了,后续的包就会丢弃。只有当打开多个连接时,才可能出现这种情形以致影响性能。原因在于uIP通告了一个很小的接收窗口(窗口,协议中的概念),也就意味着每个连接上只有个TCP分组。

在uIP中,用于接收包的全局包缓冲buffer同样适用于数据报头的发送。假如应用程序需要发送动态大小的数据,可能会使用不作为报头临时缓存的全局缓存的一部分。为了发送数据,应用程序会向协议栈传递指向数据的指针和数据的长度。一旦TCP/IP报头生成并复制到全局缓存后,设备驱动就会发送出报头和数据(数据不是被一层层的协议头封装的么)。如果需要重传数据只能重新生成数据了,而不会有队列等待的。

uIP的内存消耗很大程度上取决于实现其的设备上应用程序的情况。内存配置决定了系统所能处理的流量值和同时在线连接的数量。在发送一个超大邮件的同时还运行着大量动态网页请求的web服务器所消耗的内存肯定要比只运行简单Telnet服务器的大的多。仅有200字节RAM的设备上运行uIP也是可以的,只是这种配置极大的影响了网络的吞吐以及可同时在线的连接数。

1.4 应用程序接口(API)

应用程序接口(API) 定义了应用程序如何和TCP/IP协议栈进行交互。最长使用的API是大多数unix类系统中BSD风格的套接字API,而且对Windows下的WinSock API也有着巨大的影响。因为套接字API使用stop-and-wait语义,因而需要多任务操作系统的支持。这样一来,繁重的任务管理以及上下文切换,任务栈分配对于uIP的目标群体来说是不现实的,也就是说BSD套接字对于uIP的不合适的。

相反,uIP使用事件驱动接口,有事件发生时相应的应用程序(UIP_APPCALL( ),如无标注下文中的应用程序均指UIP_APPCALL宏对应的函数)会被调用。一个被实现为C函数运行在uIP顶层的应用程序会被uIP调用来响应特定的事件。就像telnet.h文件中的:

#ifndef UIP_APPCALL

#define UIP_APPCALL telnetd_app

#endif

当接收到数据、成功将数据发送到连接的另一端、建立了一新连接亦或是重传了数据时,uIP就会调用相应的应用程序(uip_process->UIP_APPCALL();)。应用程序同时会周期的轮询以查看是否有新数据到达。由应用程序映射不同服务到不同端口和连接,对于栈只提供一个回调函数。也就是说尽可能的减少协议栈的响应时间,既便是低端的系统也能做到快速响应到来的数据或者连接请求,处理数据就推到上层去吧

不像其他的TCP/IP协议栈,uIP重传机制要借助于应用程序。像有的TCP/IP协议栈会保留一个要发送数据的副本在内存里直到收到对方的接收成功反馈才丢到数据,即便需要重传时应用程序生成数据速度很快,因为内存多多保存会儿没事,要重传直接发送就得了。

前文说了,uIP的目标架构起RAM都是很少的,保存个副本等待反馈是不明智的。uIP的作法同样是把这事推给上层去做:应用程序负责生成数据并重传。当网络设备驱动将数据发送出去之后,uIP并不追踪包的内容,丢了还是怎么滴,他只要求上层的应用能够积极参与重传便好,各司其职嘛。当uIP决定要重传某个片段(segment)时,会设置重传标记(

UIP_STAT(++uip_stat.tcp.rexmit);)然后告诉应用程序:那个谁把这个重传一下。应用程序就检查一下这个标记,然后就生成数据重传。从应用程序角度看重传无异于数据原始发送,就是说重传的代码和发送数据的代码是可以复用的。尽管重传是应用程序进行的,但何时需要重传,协议栈必需负起责任。如果协议栈什么也不做会因为应用程序参与重传而增加其复杂度。

1.4.1 应用程序事件

当有事件发生时,uIP就会调用有C语言实现的应用程序(这里应用程序指的是上层处理协议栈接收到的数据的函数,比如telnet中的telnet_app)UIP_APPCALL(),是以C语言宏的形式定义的,在具体的应用协议(telnet,smtp)中会检查宏定义,未定义则赋值。区别不同的事件是由相应的响应测试函数完成的。

1.4.2 连接指针

一旦应用程序被uIP调用,全局变量uip_conn会指向表示当前连接的uip_conn结构(uip_connect()中会返回该结构)。uip_conn结构中的域可以告知当前所连接的ip地址,以及通过uip_conn->lport 来获得提供的服务。比如,如果lport为80则对应的是http服务;如果是23则是telnet服务。

1.4.3 接收数据

uIP通过调用uip_newdata()可以知道远程主机已经发送了新的数据,其长度可以通过调用uip_datalen()来获得。uIP并不会缓存数据,而且一旦从应用程序返回,数据就会被覆盖,因此,应用程序要么直接处理到来的数据,要么复制到其他什么地方去稍后处理。

1.4.4 发送数据

当发送数据时,uIP会根据可利用buffer大小以及TCP窗来调节应用程序发过来的数据。通过uip_mss()函数来获得当前连接所能传输的最大分组大小。

应用程序通过调用uIP中uip_send()函数发送数据。uip_send()使用俩个参数:要发送的数据指针和数据的长度。如果应用程序要RAM空间来生成实际的数据,可以使用包缓存(指向uip_appdata 指针)来实现。

在一个连接上,应用程序一次只能发送一块数据,在数据发送完成前,同时对uip_send()进行多次调用时不可能的。

1.4.5 数据重传

重传是由TCP计数器来驱动的。每一次对周期计数器的调用,都会对每连接重传计数器进行减一操作。当重传计数为零时,就需要进行重传了。uIP不追踪由网卡驱动发送出去的包,这就要求应用程序能够积极参与重传。当uIP决定需要重传时,应用程序通过uip_rexmit()来检测是否有UIP_REXMIT标志,有则开始重传。telnet.c文件中:

if(uip_rexmit() || uip_newdata() || uip_acked()) {

senddata(s);

} else if(uip_poll()) {

senddata(s);

}

1.4.6 关闭连接

应用程序通过调用uip_close()来关闭当前的连接:

if(s->flags & FLAG_CLOSE) {

uip_close();

return;

}

也可通过调用uip_abort()函数来终止产生了致命错误的连接:

if(s->flags & FLAG_ABORT) {

uip_abort();

return;

}

如果连接已由远端关闭,uip_closed()返回1,应用程序可能会做必要的清理。

1.4.7 差错报告

uIP通过uip_aborted()和uip_timeout()来测试是否发生了相应的错误。

1.4.8 轮询

当连接处于空闲状态时,uIP会周期的轮询各个应用程序。应用程序则通过uip_poll()来检测是否正在被uIP轮询,轮询就采取动作。

轮询有俩个主要作用:一、让应用程序可以可以关掉空闲太久的连接;二、让准备好数据的应用程序可以发送数据。应用程序只有被uIP调用的时候才能发数据,也就是说想在空闲连接上发送数据只有等到轮询到的时候才行。

1.4.9 监听端口

uIP维护着一个TCP端口监听列表。uip_listen()用于向uip_listenports[UIP_LISTENPORTS]数组添加一个新的监听端口。当一个在指定端口上的连接请求到达时,uIP会创建一个新的连接并调用相应的应用程序。一个连接已建立时,uip_connected()会返回真。

检查uip_conn结构中lport域可以知道哪个端口和当前连接相对应。这个过程是在uip_connect(*ripaddr,rport)函数中完成对uip_conn结构赋值,并建立一个连接:通过找一个未使用的最小的端口号赋给lport,就实现和rport对应。

1.4.10 打开连接

uIP可以通过uip_connect()打开一个新的连接,正如上小节说的uip_connect()会分配一个本地端口号,初始化一些域,设置tcp状态标志位,赋值ripaddr等等,最后返回表示一个连接的uip_conn 结构。当然如果最大连接数已满就返回NULL指针。

因为uIP用包含俩个16bit元素的数组来表示一个32位的ip地址,使用uip_ipaddr()可以用来封装一个ip地址到2个16位的。

下面展示了两个例子,第一个展示了使用uip_connect()尝试建立一个到TCP端口号为8080的连接,如果达到最大连接数,则其返回NULL,并且使用uip_abort()来中止当前连接。

void connect_example1_app(void) {

if(uip_connect(uip_conn->ripaddr, HTONS(8080)) == NULL) {

uip_abort();

}

}

第二个例子展示了如何打开一个到指定ip地址的连接,该例中没有进行错误检查。

void connect_example2(void) {

u16_t ipaddr[2];

uip_ipaddr(ipaddr, 192,168,0,1);

uip_connect(ipaddr, HTONS(8080));

}

1.5 uIP设备驱动

图1-5

从网络设备驱动角度看,如图1-5,uIP由uip_input()和uip_periodic()这两个C语言函数组成。当接收到IP包时设备驱动会调用uip_input()来把包放到包缓存uip_buf中。uip_input()负责处理包,当他返回时往外发送的数据也许也准备好放在uip_buf中了。接着网络设备驱动应该吧数据发出去。

uip_periodic()会周期的轮询各个连接,典型的是每隔1s进行轮询。uIP用该函数来驱动协议计数器和重传,一旦他返回了,需要的包数据可能已经在uip_buf中了。

1.6 架构相关的函数

uIP要求那些打算运行uIP的目标架构需要实现架构相关的函数。uIP代码中也提供了一些通用的

C实现函数,在uip-arch.c文件中实现了简单的CRC校验。

1.6.1 校验和计算

TCP和IP协议为TCP和IP的数据和协议头包实现了校验和。由于该校验和是通过对发送和接收数据一个字节一个字节的进行计算,故而效率必需高效。也就是说uIP的目标架构对于校验和的计算也是架构相关的。进而uIP没有实现架构相关的校验和计算函数,在uip-arch.c文件中,你必须实现uip_ipchksum()和uip_tcpchksum()这俩个架构相关的函数。处于对效率的考虑,你可以用汇编而不是C语言来写。

uIP发行版中提供了一个用C语言实现的校验和计算函数,同样是在uip-arch.c文件中。

1.6.2 32位运算

因为TCP协议使用32bit的序列号,所以任一个TCP实现作为对常规协议的处理都会涉及到32位的计算。但是uIP的目标架构一般都是8位或者16位的,因此uIP的主代码并没有涉及到32位的计算,而是把这块留给了架构相关的代码去负责。

架构相关的代码中必需实现uip_add32()这个用来进行32位加法的函数,其结果存储在uip_acc32这个全局变量中了。

1.7 实例

这一小节中介绍一些非常简单的uIP应用程序,在uIP发行包中包含了一些更复杂的应用,telnet,smtp等等。

1.7.1 一个非常简单的应用程序

第一个简单的应用程序用来监听1234端口上的连接。一旦连接建立完成,他会用“ok”来应答所有发给他的数据。

void example1_init(void) { // 初始化函数

uip_listen(HTONS(1234)); // 在端口1234上监听

}

// 这意味着你需要在应用程序文件中进行如下的宏定义:

// #ifndef UIP_APPCALL

// #define UIP_APPCALL example1_app

// #endif

void example1_app(void) {

if(uip_newdata() || uip_rexmit()) { //有新数据要发送或者需要重传了

uip_send("ok\n", 3); // 发送“ok”

}

}

初始化函数调用uIP的uip_listen()函数来注册一个要监听的端口号。应用程序example1_app()用uip_newdata()和uip_rexmit()来判断被调用的原因。如果是连接另一端发送了数据,就用“ok”来应答。如果是数据丢失需要重传也用“ok”进行应答。例子已经展示了一个完整的应用范本。并没有限定应用程序必须实现所有的事件类型比如uip_connected()或者uip_timedout()。

1.7.2 一个高级应用

第二个例子展示了uip_conn结构体中应用程序状态域是如何使用的。

和第一个例子相似,当监听的端口上有数据发来时就用“ok”进行应答。最大的区别在于,第二个例子还会在连接建立完成时输出一个“Welcome!”。

尽管看上去没啥区别,但是这一点细微的变化却对应用程序的实现产生了不小的影响。复杂度增加的原因在于如果网络中的数据丢失了,应用程序必须知道哪个数据需要重传。如果是“Welcome!”消息丢了,应用程序必须重传welcome,如果是“ok”丢了,就得重新发送ok。

如果远程主机没有对“Welcome!”作出应答,应用程序可一断定数据丢读了。但是一旦主机作出应答就可以确信丢掉的数据是“ok”。这样应用程序就处在俩中状态之一:WELCOM-SENT,welcome已经发出去,但是没有收到应答;WELCOME-ACKED,发送成功且收到应答。

当远端主机成功连接到应用程序,应用程序会发送“Welcome!”并且把自身状态设置成WELCOME-SENT。当远端主机应答成功,状态变成WELCOME-ACKED。如果主机发送进一步的数据,应用程序就以发送“ok”来应答。

如果请求应用程序重传上一个消息,应用程序首先看一下他的状态,如果是WELCOME-SENT,他就知道welcome发送出去了但是没有收到应答,该重传的是“welcome!”。如果处在WELCOME-ACKED状态,则需要重传的是”ok“。

应用程序实现如下,一些配置信息紧随其后(一个简单的状态机):

struct example2_state {

enum {WELCOME_SENT, WELCOME_ACKED} state;

};

void example2_init(void) {

uip_listen(HTONS(2345));

}

void example2_app(void) {

struct example2_state *s;

s = (struct example2_state *)uip_conn->appstate;

if(uip_connected()) {

s->state = WELCOME_SENT;

uip_send("Welcome!\n", 9);

return;

}

if(uip_acked() && s->state == WELCOME_SENT) {

s->state = WELCOME_ACKED;

}

if(uip_newdata()) {

uip_send("ok\n", 3);

}

if(uip_rexmit()) {

switch(s->state) {

case WELCOME_SENT:

uip_send("Welcome!\n", 9);

break;

case WELCOME_ACKED:

uip_send("ok\n", 3);

break;

}

}

}

配置:

#define UIP_APPCALL example2_app

#define UIP_APPSTATE_SIZE sizeof(struct example2_state)

1.7.3 如何区分不同的应用程序

如果一个系统要运行多个应用时,区分他们做好的方法就是用TCP端口号。下面的代码显示了如何将上面俩个例子绑定到一个应用上去:

void example3_init(void) {

example1_init();

example2_init();

}

void example3_app(void) {

switch(uip_conn->lport) {

case HTONS(1234):

example1_app();

break;

case HTONS(2345):

example2_app();

break;

}

}

1.7.4 使用TCP流量控制

下面的例子展示了向一个主机发送HTTP请求下载文件到一个慢速的存储设备上,如何使用流量控制功能:

void example4_init(void) {

u16_t ipaddr[2];

uip_ipaddr(ipaddr, 192,168,0,1);

uip_connect(ipaddr, HTONS(80));

}

void example4_app(void) {

if(uip_connected() || uip_rexmit()) {

uip_send("GET /file HTTP/1.0\r\nServer:192.186.0.1\r\n\r\n", 48);

return;

}

if(uip_newdata()) {

device_enqueue(uip_appdata, uip_datalen());

if(device_queue_full()) {

uip_stop(); // 这里只是设置了tcpstateflag标志位而已

}

}

if(uip_poll() && uip_stopped()) { // 判断是轮询且之前是被停止的

if(!device_queue_full()) { // 队列未满则重启连接

uip_restart();

}

}

}

因为改应用程序只发送GET请求,所以无论是连接成功还是需要重传其代码是一样的;当从远程主机接收到数据时调用设备驱动中的device_enqueue()函数将数据入列。注意:这里假定device_enqueue()会把数据复制到他自己的buffer中。uip_appdata中的数据会被下一次到来的包覆

盖掉。

如果设备的缓冲队列满了,应用程序通过调用uIP的uip_stop()函数来停止继续下载文件。在调用uip_restart()调用之前,应用程序可以确保不会继续接收数据。应用程序轮询事件可以用来检查设备队列是否还是满的,未满则数据流可以通过uip_restart()重新启用。

1.7.5 简单的web服务器

下面的代码是一个简单的文件服务器,其监听2个端口,根据端口号来选择发送哪个文件:

struct example5_state {

char *dataptr;

unsigned int dataleft;

};

void example5_init(void) {

uip_listen(HTONS(80));

uip_listen(HTONS(81));

}

void example5_app(void) {

struct example5_state *s;

s = (struct example5_state)uip_conn->appstate;

if(uip_connected()) {

switch(uip_conn->lport) {

case HTONS(80):

s->dataptr = data_port_80;

s->dataleft = datalen_port_80;

break;

case HTONS(81):

s->dataptr = data_port_81;

s->dataleft = datalen_port_81;

break;

}

uip_send(s->dataptr, s->dataleft);

return;

}

if(uip_acked()) {

if(s->dataleft < uip_mss()) {

uip_close();

return;

}

s->dataptr += uip_conn->len;

s->dataleft -= uip_conn->len;

uip_send(s->dataptr, s->dataleft);

}

}

程序状态由数据指针和要发送数据大小两部分组成。这里的appstate[UIP_APPSTATE_SIZE]很像驱动中的*private_data结构用于存储设备相关的结构体。

1.7.6 结构化应用程序设计

下面的例子给出了一个结构化设计范本:

void example6_app(void) {

if(uip_aborted()) { // 连接中止

aborted();

}

if(uip_timedout()) { // 超时

timedout();

}

if(uip_closed()) { // 连接关闭

closed();

}

if(uip_connected()) { // 已建立连接

connected();

}

if(uip_acked()) { // 应答

acked();

}

if(uip_newdata()) { // 处理新数据,设置要发送数据指针

newdata();

}

if(uip_rexmit() || uip_newdata() || //重传、有新数据、应答、已连接、轮询?发送数据

uip_acked() ||uip_connected() || uip_poll()) {

senddata();

}

}

函数从检查任何的错误开始:uip_aborted()或者uip_timedout()。如果确实有错误产生,则执行相应的动作。接着调用uip_connected()检查是否已建立连接,是则调用connected()函数执行相应的动作(发送“Welcome!”等等),比如还有初始化应用状态。最后一个if语句中,建立完成后可能要传数据,则senddata()。

接下来的代码,告诉我们上面用到的一些处理函数其形式大概是啥样子的:应用简单的等待连接上的数据到达,并通过发送“Hello World!”来应答。并且,为了展示如何编写状态机,消息被拆分成俩部分进行发送:“Hello”和“World!”:

#define STATE_WAITING 0

#define STATE_HELLO 1

#define STATE_WORLD 2

struct example6_state { // 程序状态变量

u8_t state; // 当前状态

char *textptr; // 数据指针

int textlen; // 数据长度

};

static void aborted(void) {}

static void timedout(void) {}

static void closed(void) {}

static void connected(void) {

struct example6_state *s = (struct example6_state *)uip_conn->appstate;

s->state = STATE_WAITING;

s->textlen = 0;

}

static void newdata(void) {

struct example6_state *s = (struct example6_state *)uip_conn->appstate;

if(s->state == STATE_WAITING) {

s->state = STATE_HELLO;

s->textptr = "Hello ";

s->textlen = 6;

}

}

static void acked(void) {

struct example6_state *s = (struct example6_state *)uip_conn->appstate;

s->textlen -= uip_conn->len;

s->textptr += uip_conn->len;

if(s->textlen == 0) {

switch(s->state) {

case STATE_HELLO:

s->state = STATE_WORLD;

s->textptr = "world!\n";

s->textlen = 7;

break;

case STATE_WORLD:

uip_close();

break;

}

}

}

static void senddata(void) {

struct example6_state *s = (struct example6_state *)uip_conn->appstate;

if(s->textlen > 0) {

uip_send(s->textptr, s->textlen);

}

}

图1-7-6 简单的状态机

真正进行数据发送的是senddata()函数,acked()和newdata()只是标识有数据需要发送,其长度是多少。

senddata()最终回调用uip_send()来发送数据。切记senddata()函数永远不能做改变应用程序状态的事,相反这些应该在acked()和newdata()中进行。

Chapter 1 is over…

To be continued!

PDMS中文教程结构建库

VPD VANTAGE Plant Design System 工厂三维布置设计管理系统 PDMS结构建库 培训手册

型钢库 PDMS已经提供了较完善的元件库,包括型材截面、配件和节点库。但不一定十分齐全,所以PDMS提供了非常方便的建库工具,这些功能都可在PARAGON中实现。 设计库、元件库和等级库之间的关系 等级库(Specificaion)是设计库与元件库之间的桥梁。设计者在等级库中选择元件后,等级中的元件自动找到对应的元件库中的元件;元件库中的几何形状和数据被设计库参考。如下图。 型钢库层次结构 型钢库World下包含了许多元件库和等级库,它们也是一种树状结构库。下图就是型钢库层次结构: 型钢等级库层次结构 等级库相当于元件库的索引,其目的是为设计人员提供一个选择元件的界面,它的层次结构既与界面的关系如下图所示。 本章主要内容: 1.定义型钢截面(Profile) 2.定义型钢配件(Fitting) 3.定义节点(Joint) 定义型钢截面(Profile) 练习一:定义型钢截面库 1.元件库最终的层次结构如下: 2.以管理员身份(如SYSTEM)登录PARAGON模块,再进入Paragon>Steelwork子模块。 3.在 4.选择菜单Create>Section,创建新的STSE, 5.在刚创建的STSE下,选择菜单Create>Element,创建三个元素:“ref.DTSE”、“ref.GMSS”和“ref.PTSS”。 现在的数据库结构如下: 6.设置。选择Settings>Referance Data… 和Display>Members…按下图设置: 7.鼠标指向CATA层,选择菜单Create>Section,创建新的STSE:example/PRFL/BOX。8.选择菜单Create>Category>For Profiles,创建新的STCA,如下图: 9.鼠标指向STCA:example/PRFL/REF.DTSE层,在命令行中键入命令:“NEW DTSE /BOX/EQUAL/DTSE”,这样新建了一个DTSE,如下图。 10.创建截面本身。选择菜单Create>Profile,按下图设置:

Plaxis中常见问题集锦

1 问:Geo FEM,Plaxis,Z-Soil软件比较? 2008/6/5 9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受范围之内。 就易用性来说,Plaxis好于Z-Soil好于GEO。Plaxis大家都用得很多了,Z-Soil的建模可以在前 处理模块中用CAD元素绘制,或者通过dxf文件导入;GEO4只能输入剖面线的坐标,比较烦琐。 Plaxis和Z-soil基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,只能解决隧道、 边坡等相关问题;Plaxis和Z-Soil可以进行渗流分析(非饱和)包括流固偶合分析。 总的来说,Plaxis和Z-Soil是专业的岩土工程有限元程序;GEO FEM是GEO4里面的一个工具 包,而GEO4类似于国内的理正一样,是遵循Eurocode的设计软件。 2 问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等 这些滑裂面的相关参数呢? 2008/6/5 9:36:26 答:使用强度折减法,不用假定slip surface,故不会有这些数据。 3 问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半, 过个月再填一半,而且这一半也不是一次填完,要在几天内完成,请问怎么在Plaxis中模拟,怎 么设置可以反应填筑速率,请高手指教? 2008/6/5 9:47:25 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage 的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis 不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实现。 4 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,EI 和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度? 2008/6/5 9:49:13 答:应该是:A=沿着洞轴方向L×厚度d E是弹性模量I是惯性矩 5 问:在网上看到有人怀疑Plaxis 3D Foundation和3D Tunnel的真三维性,有人说它们不是 真正的三维计算,有谁知道是怎么回事吗? 2008/6/5 9:59:42 答:Plaxis 3D Tunnel计算内核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困 难。3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专 业,特别是考虑了一些工程实际,但开放性不如FLAC3d。近期3D Foundation将在此方面有重 大改进,新版本前处理借用GID作为前处理工具。Plaxis 系列优点长处是其理论,尤其是hs和 hs-small模型。 6 问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终 都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm 左右。深圳规范要求水平位移不超过30mm,要是用Plaxis是很难算出小于规范值的结果的,事 实上,也不至于有那么大的位移的? 2008/6/5 10:05:32 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量, 有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有 问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其 他参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程 经验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比 较高。 7 问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其 进行网格划分,这要怎么解决呢? 2008/6/5 10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。 这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受

最新STM8L15X中文参考手册资料

本参考手册的目标应用程序开发人员。它提供了完整的信息如何使用stm8l05xx,stm8l15xx 和stm8l16xx微控制器的存储器和外围设备。 该stm8l05xx / stm8l15xx / stm8l16xx是一个家庭的不同存储密度的微控制器和外围设备。这些产品是专为超低功耗应用。可用的外设的完整列表,请参阅产品数据表。 订购信息,引脚说明,机械和电气设备的特点,请参阅产品数据表。 关于STM8 SWIM通信协议信息和调试模块,请参阅用户手册(um0470)。 在STM8的核心信息,请参阅STM8的CPU编程手册(pm0044)。关于编程,擦除和保护的内部快闪记忆体,请参阅STM8L闪存编程手册(pm0054)。

1 中央处理单元(CPU)。30。 1.1 引言30 1.2 CPU的寄存器。30。 1.2.1 描述CPU寄存器。..。30 1.2.2 STM8 CPU寄存器图。..。34 1.3 全球配置寄存器(cfg_gcr)。34。 1.3.1 激活水平。..。34 1.3.2 游泳禁用。..。35 1.3.3 描述全局配置寄存器(cfg_gcr)。..。35 1.3.4 全局配置寄存器图及复位值。..。35 2 启动ROM . . . 36 3程序存储器和数据存储器。37。 3.1引言37 3.2术语。37。 3.3个主要的快闪存储器的特点。38。 3.4记忆的组织。39。 3.4.1低密度设备的存储器组织。39 3.4.2介质密度的装置记忆的组织。..。40 3.4.3介质+密度装置记忆的组织。..。41 3.4.4高密度存储器组织。..。42 3.4.5专有代码区(译)。43 3.4.6用户区(UBC)。43 3.4.7数据的EEPROM(数据)。..。46 3.4.8主程序区。46 3.4.9选项字节。..。46 3.5内存保护。47。 3.5.1读出保护。47 3.5.2内存访问安全系统(质量)。47 3.5.3使写访问选项字节。49 3.6内存编程49 3.6.1同时读写(读写网)。..。49 2 / 573文档ID 15226转9 rm0031内容 3.6.2字节编程。..。49 3.6.3字编程。50 3.6.4块编程。50 3.6.5选项字节编程。52 Flash 3.7的低功耗模式。52。 3.8例ICP和IAP。52。 3.9闪光寄存器57 3.9.1闪光控制寄存器1(flash_cr1)。57 3.9.2闪光控制寄存器2(flash_cr2)。58

中文参考手册-PLAXIS 2D--岩土三维建模分析

参 考 手 册

目录 1简介 (7) 2 一般说明 (7) 2.2 文件处理 (9) 2.3 帮助工具 (9) 2.4 输入方法 (10) 3 输入前处理 (10) 3.1 输入程序 (10) 3.5 荷载和边界条件 (28) 4 材料属性和材料数据组 (33) 4.1 模拟土体及界面行为 (35) 4.1.1 一般标签页 (35) 4.1.2 参数标签页 (39) 4.1.3 渗流参数标签页 (50) 4.1.4 界面标签页 (56) 4.1.5 初始标签页 (61) 4.2 不排水行为模拟 (63) 4.2.1 不排水(A) (64) 4.2.2 不排水(B) (64) 4.2.3 不排水(C) (64) 4.3 土工试验模拟 (64) 4.3.1 三轴试验 (67) 4.3.2 固结仪试验 (68) 4.3.3 CRS (68) 4.3.4 DDS (69) 4.3.6 结果 (70) 4.4 板的材料数据组 (70) 4.4.1 材料数据组 (71) 4.4.2 属性 (71)

4.5.1 材料数据组 (74) 4.5.2 属性 (74) 4.6 锚杆的材料数据组 (75) 4.6.1 材料数据组 (76) 4.6.2 属性 (76) 4.7 几何构件的材料数据组赋值 (76) 5 计算 (77) 5.1 计算程序界面 (77) 5.2 计算菜单 (78) 5.3 计算模式 (79) 5.3.1 经典模式 (80) 5.3.2 高级模式 (80) 5.3.3 渗流模式 (81) 5.4 定义计算阶段 (81) 5.4.1 计算标签页 (81) 5.4.2 插入或删除计算阶段 (82) 5.4.3 计算阶段的标识和顺序 (82) 5.5 分析类型 (83) 5.5.1 初始应力生成 (83) 5.5.2 塑性计算 (85) 5.5.3塑性(排水)计算 (85) 5.5.4 固结(EPP)分析 (85) 5.5.5 固结(TPP)分析 (86) 5.5.6 安全性(PHI/C折减) (86) 5.5.7 动力分析 (87) 5.5.8 自由振动 (87) 5.5.9 地下水渗流(稳态) (88) 5.5.10 地下水渗流(瞬态) (88) 5.5.11 塑性零增长步 (88)

Plaxis中常见问题集锦

1 问:Geo FEM,Plaxis,Z-Soil软件比较?2008/6/5 9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受围之。 就易用性来说,Plaxis好于Z-Soil好于GEO。Plaxis大家都用得很多了,Z-Soil的建模可以在前处理模块中用CAD元素绘制,或者通过dxf文件导入;GEO4只能输入剖面线的坐标,比较烦琐。Plaxis和Z-soil基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,只能解决隧道、边坡等相关问题;Plaxis和Z-Soil可以进行渗流分析(非饱和)包括流固偶合分析。 总的来说,Plaxis和Z-Soil是专业的岩土工程有限元程序;GEO FEM是GEO4里面的一个工具包,而GEO4类似于国的理正一样,是遵循Eurocode的设计软件。 2 问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等 这些滑裂面的相关参数呢? 2008/6/5 9:36:26 答:使用强度折减法,不用假定slip surface,故不会有这些数据。 3 问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半, 过个月再填一半,而且这一半也不是一次填完,要在几天完成,请问怎么在Plaxis中模拟,怎么 设置可以反应填筑速率,请高手指教? 2008/6/5 9:47:25 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage 的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis 不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实现。 4 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,EI 和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度? 2008/6/5 9:49:13 答:应该是:A=沿着洞轴方向L×厚度d E是弹性模量I是惯性矩 5 问:在网上看到有人怀疑Plaxis 3D Foundation和3D Tunnel的真三维性,有人说它们不是 真正的三维计算,有谁知道是怎么回事吗? 2008/6/5 9:59:42 答:Plaxis 3D Tunnel计算核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困难。 3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专 业,特别是考虑了一些工程实际,但开放性不如FLAC3d。近期3D Foundation将在此方面有重 大改进,新版本前处理借用GID作为前处理工具。Plaxis 系列优点长处是其理论,尤其是hs和 hs-small模型。 6 问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终 都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm 左右。规要求水平位移不超过30mm,要是用Plaxis是很难算出小于规值的结果的,事实上,也 不至于有那么大的位移的? 2008/6/5 10:05:32 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量, 有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有 问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其 他参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程 经验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比 较高。 7 问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其 进行网格划分,这要怎么解决呢? 2008/6/5 10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。 这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受 力状况,这需要模拟隧道开挖过程才能得到其受力状况,基坑开挖的影响也是在其这个受力状况 上产生的。你现在的目的是让基坑开挖前,隧道结构的力和弯矩都为零了,所以结果很难正确。

地铁地表沉降外文翻译(适用于毕业论文外文翻译+中英文对照)

外文原文 Surface settlement predictions for Istanbul Metro tunnels excavated by EPB-TBM S. G. Ercelebi ?H. Copur ?I. Ocak Abstract In this study, short-term surface settlements are predicted for twin tunnels, which are to be excavated in the chainage of 0 ? 850 to 0 ? 900 m between the Esenler and Kirazl?stations of the Istanbul Metro line, which is 4 km in length. The total length of the excavation line is 21.2 km between Esenler and Basaksehir. Tunnels are excavated by employing two earth pressure balance (EPB) tunnel boring machines (TBMs) that have twin tubes of 6.5 m diameter and with 14 m distance from center to center. The TBM in the right tube follows about 100 m behind the other tube. Segmental lining of 1.4 m length is currently employed as the final support. Settlement predictions are performed with finite element method by using Plaxis finite element program. Excavation, ground support and face support steps in FEM analyses are simulated as applied in the field. Predictions are performed for a typical geological zone, which is considered as critical in terms of surface settlement. Geology in the study area is composed of fill, very stiff clay, dense sand, very dense sand and hard clay, respectively, starting from the surface. In addition to finite element modeling, the surface settlements are also predicted by using semi-theoretical (semi-empirical) and analytical methods. The results indicate that the FE model predicts well the short-term surface settlements for a given volume loss value. The results of semi-theoretical and analytical methods are found to be in good agreement with the FE model. The results of predictions are compared and verified by field measurements. It is suggested that grouting of the excavation void should be performed as fast as possible after excavation of a section as a precaution against surface settlements during excavation. Face pressure of the TBMs should be closely monitored and adjusted for different zones. Keywords Surface settlement prediction _ Finite element method _ Analytical method _ Semi-theoretical method _ EPB-TBM tunneling _ Istanbul Metro Introduction Increasing demand on infrastructures increases attention to shallow soft ground tunneling methods in urbanized areas. Many surface and sub-surface structures make underground construction works very delicate due to the influence of ground deformation, which should be definitely limited/controlled to acceptable levels. Independent of the excavation method, the short- and long-term surface and sub-surface ground deformations should be predicted and remedial precautions against any damage to existing structures planned prior to construction. Tunneling cost substantially increases due to damages to structures resulting from surface settlements, which are above tolerable limits (Bilgin et al. 2009).

STM8L152中文介绍

STM8L152介绍 8位超低功耗单片机,高达64 + 2字节数据的闪存EE PROM,EEPROM (Electrically Erasable Programmable ), 实时时钟,液晶显示器,定时器,USART,C,SPI,模数转换器,数模转换器,比较器特点:操作条件:工作电源:1.65v~ 3.6v 温度范围:40 to 85, 105 or 125 低功耗的特点:5个低功耗模式:等,低功率运行 (5.9|ì一),低功耗等(3|ì一),active-halt 全实时时钟(1.4|ì一),停止(400) 动态功率消耗:200UA/兆赫+ 330UA,快速唤醒从停止模式(4.7us) 超低漏 I/ O:50nA 先进的stm8核心: 哈佛结构和三级流水线

最大频率:16条16mhz,相关峰 最多40个外部中断源 复位和供应管理: 低功率,超安全欠压复位5可编程阈值 超低功率POR /PDR(通电复位/Protection(保护)、Detection(检测)、Response(响应)) 可编程电压检测器(Programmable voltage detector (PVD)) 时钟管理 32kHz和1-16MHz晶体振荡器 工厂校准的内部16MHz RC和 38kHz的低功耗RC 时钟安全系统

低功耗RTC BCD日历,闹钟中断, 数字校准+ / - 0.5ppm的准确度 先进的防篡改检测 DMA 4个通道。 ADC,DAC的,SPIS,我 2C,USART接口,定时器,1路。存储器到存储器的 LCD:8x40或4x44瓦特/升压转换器 12位ADC1 Msps/28渠道 温度。传感器和内部参考。电压 记忆

Plaxis中常见问题集锦

1 问:Geo FEM, Plaxis, Z-Soil软件比较?2008/6/5 9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受范围之内。 就易用性来说,Plaxis好于Z-Soil好于GEO。Plaxis大家都用得很多了,Z-Soil的建模可以在前处理模块中用CAD元素绘制,或者通过dxf文件导入;GEO4只能输入剖面线的坐标,比较烦琐。Plaxis和Z-soil基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,只能解决隧道、边坡等相关问题;Plaxis和Z-Soil可以进行渗流分析(非饱和)包括流固偶合分析。 总的来说,Plaxis和Z-Soil是专业的岩土工程有限元程序;GEO FEM是GEO4里面的一个工具包,而GEO4类似于国内的理正一样,是遵循Eurocode的设计软件。 2 问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等 这些滑裂面的相关参数呢? 2008/6/5 9:36:26 答:使用强度折减法,不用假定slip surface,故不会有这些数据。 3 问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半, 过个月再填一半,而且这一半也不是一次填完,要在几天内完成,请问怎么在Plaxis中模拟,怎 么设置可以反应填筑速率,请高手指教? 2008/6/5 9:47:25 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage 的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis 不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实 现。 4 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,E I和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度? 2008/6/5 9:49:13 答:应该是: A=沿着洞轴方向L×厚度d E是弹性模量 I是惯性矩 5 问:在网上看到有人怀疑Plaxis 3D Foundation和3D Tunnel的真三维性,有人说它们不是 真正的三维计算,有谁知道是怎么回事吗? 2008/6/5 9:59:42 答:Plaxis 3D Tunnel计算内核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困 难。3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专 业,特别是考虑了一些工程实际,但开放性不如FLAC3d。近期3D Foundation将在此方面有重大 改进,新版本前处理借用GID作为前处理工具。Plaxis 系列优点长处是其理论,尤其是hs和 hs-small模型。 6 问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终 都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm左 右。深圳规范要求水平位移不超过30mm,要是用Plaxis是很难算出小于规范值的结果的,事实 上,也不至于有那么大的位移的? 2008/6/5 10:05:32 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量, 有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有 问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其他 参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程经 验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比较 高。 7 问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其 进行网格划分,这要怎么解决呢? 2008/6/5 10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。 这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受 力状况,这需要模拟隧道开挖过程才能得到其受力状况,基坑开挖的影响也是在其这个受力状况

STM8L051低功耗模式实现说明文档

STM8L051低功耗模式测试文档 STM8L051的五种低功耗模式wait ,low power run mode,low power wait mode,Ative-Halt mode,Halt mode。 1、WAIT mode 在等待模式,CPU的时钟是停止的,被选择的外设继续运行。W AIT mode 分为两种方式:WFE,WFI。WFE是等待事件发生,才从等待模式中唤醒。WFI是等待中断发生,才从等待模式中唤醒。 2、low power run mode 在低功耗运行模式下,CPU和被选择的外设在工作,程序执行在LSI或者LSE下,从RAM 中执行程序,Flash和EEPROM都要停止运行。电压被配置成Ultra Low Power模式。进入此模式可以通过软件配置,退出此模式可以软件配置或者是复位。 3、low power wait mode 这种模式进入是在low power run mode下,执行wfe。在此模式下CPU时钟会被停止,其他的外设运行情况和low power run mode类似。在此模式下可以被内部或外部事件、中断和复位唤醒。当被事件唤醒后,系统恢复到low power run mode。 4、Active-Halt mode 在此模式下,除了RTC外,CPU和其他外设的时钟被停止。系统唤醒是通过RTC中断、外部中断或是复位。 5、Halt mode 在此模式下,CPU和外设的时钟都被停止。系统唤醒是通过外部中断或复位。关闭内部的参考电压可以进一步降低功耗。通过配置ULP位和FWU位,也可以6us的快速唤醒,不用等待内部的参考电压启动。 一、各个低功耗模式的代码实现 1、WAIT mode 等待模式分为两种:WFI和WFE。 1.1 WFI mode 当执行“wfi”语句时,系统就进入WFI模式,当中断发生时,CPU被从WFI模式唤醒,执行中断服务程序和继续向下执行程序。 通过置位CFG_GCR的AL位,使主程序服务完中断服务程序后,重新返回到WFI 模式。 程序如下: void Mcuwfi() { PWR_UltraLowPowerCmd(ENABLE); //开启电源的低功耗模式 CLK_HSEConfig(CLK_HSE_OFF); //关闭HSE时钟(16MHz) #ifdef USE_LSE CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSE);

材料模型手册

材料模型手册

目录 1 简介 (5) 1.1 不同模型的选用 (5) 1.2 局限性 (7) 2 材料模拟初步 (9) 2.1 应力的一般定义 (9) 2.2 应变的一般定义 (11) 2.3 弹性应变 (12) 2.4 用有效参数进行的不排水分析 (14) 2.5 用有效强度参数进行不排水有效应力分析 (18) 2.6 用不排水强度参数进行不排水有效应力分析(不排水B) (19) 2.7 用不排水参数进行不排水总应力分析 (19) 2.8 高级模型中的初始预固结应力 (20) 2.9 关于初始应力 (21) 4 霍克布朗模型(岩石行为) (32) 4.1 霍克布朗模型公式 (33) 4.2 霍克-布朗与莫尔-库伦之间的转换 (36) 4.3 霍克-布朗模型中的参数 (36) 5 土体硬化模型(各向同性) (41) 5.1 标准排水三轴试验的双曲线关系 (42) 5.2 土体硬化模型的双曲线近似 (43) 5.3 三轴应力状态下的塑性体积应变 (45) 5.4 土体硬化模型的参数 (46) 5.5 土体硬化模型中帽盖屈服面 (52) 6 小应变土体硬化模型(HSS) (54) 6.1 用双曲线准则描述小应变刚度 (55) 6. 2 HS 模型中使用HARDIN-DRNEVICH 关系 (56) 6.3 初始加载VS 卸载/重加载 (58) 6.4模型参数 (59) 6.5 参数0G 和0.7γ (61) 6.6 模型初始化 (62) 6.7 与土体硬化模型的其他区别 (63) 7 软土模型 (64) 7.1 应力和应变的各向同性状态(123'''σσσ==) (64)

材料模型手册笔记

8 材料模型手册笔记 1 、概述 1.1 不同模型的选用 Mohr-Coulomb 模型(MC),弹塑性Mohr-Coulomb 模型包括五个输入参数,即:表示土体弹性的E 和ν,表示土体塑性的?和c,以及剪胀角ψ。通过选择适当的K0值,可以生成初始水平土应力。 节理岩石模型(JR),节理模型是一种各向异性的弹塑性模型,特别适用于模拟包括层理尤其是断层方向在内的岩层行为等。 Hardening-Soil 模型(HS),是一种改进了的模拟岩土行为的模型,适用于所有的土,但是它不能用来解释粘性效应,即蠕变和应力松弛。对比Mohr-Coulomb 模型,Hardening-Soil 模型还可以用来解决模量依赖于应力的情况。这意味着所有的刚度随着压力的增加而增加。因此,输入的三个刚度值(三轴加载刚度E50、三轴卸载刚度Eur 和固结仪加载刚度E oed)与一个参考应力有关,这个参考应力值通常取为100kPa (1 bar)。 软土蠕变模型(SSC),是一个新近开发的应用于地基和路基等的沉陷问题的模型。 软土模型(SS),适用于接近正常固结的粘性土的主压缩。 改进的Cam-Clay 模型(MCC),主要用于模拟接近正常固结的粘性土。 不同模型的分析 对考虑的问题进行一个简单迅速的初步分析使用Mohr-Coulomb 模型。软土蠕变模型可以用于分析蠕变(即:极软土的次压缩)。 1.2 局限性 HS 模型:不能用来说明由于岩土剪胀和崩解效应带来的软化性质,不能用来模拟滞后或者反复循环加载情形,常需要较长的计算时间。 SSC 模型,通常会过高地预计弹性岩土的行为范围。特别是在包括隧道修建在内的开挖问题上。 SS 模型,同样的局限性(包括HS 模型和SSC 模型的)存在于SS 模型中。在开挖问题上不推荐使用这种模型。

Hardening soil模型简介(Plaxis)

Chapter8 The hardening soil model 8.1Reasons for the election of the model 8.1.1Introduction The numerical modeling is going to be carried out by means of the?nite-element method as it allows for modeling complicated nonlinear soil behavior and various interface conditions, with di?erent geometries and soil properties. PLAXIS program will be used,this program has a series of advantages:?Excess pore pressure:Ability to deal with excess pore-pressure phenomena.Ex-cess pore pressures are computed during plastic calculations in undrained soil.?Soil-pile interaction:Interfaces can be used to simulate intensely shearing zone in contact with the pile,with values of friction angle and adhesion di?erent to the friction angle and cohesion of the soil.Better insight into soil-structure interaction.?Automatic load stepping:The program can run in an automatic step-size and an automatic time step selection mode,providing this way robust results.?Dynamic analysis:Possibility to analyze vibrations and wave propagations in the soil. ?Soil model:It can reproduce advanced constitutive soil models for simulation of non-linear behavior. 8.1.2Model election:soil,pile and interface The available soil models are(PLAXIS Version8): 1Linear elastic model:it is the simplest available stress-strain relationship.Ac-cording to the Hooke law,it only provides two input parameters,i.e.Young’s modu-lus E and Poisson’s ratioν.It is NOT suitable here because soil under load behaves strongly inelastically.However,this will be used to model the pile 2Mohr-Coulomb model:it is a perfectly elastoplastic model of general scope,thus, has a?xed yield surface.It involves?ve input parameters,i.e.E andνfor soil elas-ticity,the friction angle?and the cohesion c for soil plasticity,and the angle of dilatancyψ.It is a good?rst-order model,reliable to provide us with a trustful?rst insight into the problem. Advantages:

Plaxis中常见问题集锦讲解

2008/6/5 Z-Soil软件比较?Plaxis,1 问:Geo FEM,9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受范围之内。的建模可以在前Z-SoilGEO。Plaxis大家都用得很多了,就易用性来说,Plaxis好于Z-Soil好于比较烦琐。只能输入剖面线的坐标,或者通过dxf文件导入;GEO4处理模块中用CAD元素绘制,只能解决隧道、基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,Plaxis 和Z-soil 可以进行渗流分析(非饱和)包括流固偶合分析。Plaxis和Z-Soil边坡等相关问题;里面的一个工具GEO4是专业的岩土工程有限元程序;GEO FEM是总的来说,Plaxis和Z-Soil类似于国内的理正一样,是遵循Eurocode 的设计软件。包,而GEO4问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等2008/6/5 2 这些滑裂面的相关参数呢?9:36:26 slip surface,故不会有这些数据。答:使用强度折减法,不用假定问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半,2008/6/5 过个月再填一半,而且这一半也不是一次填完,要在几天内完成,请问怎么在3 Plaxis中模拟,怎9:47:25 么设置可以反应填筑速率,请高手指教? 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实现。 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,EI2008/6/5 4 和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度?9:49:13 是弹性模量I是惯性矩答:应该是:A=沿着洞轴方向L×厚度d E问:在网上看到有人怀疑Plaxis 3D Foundation 和3D Tunnel的真三维性,有人说它们不是2008/6/5 5 真正的三维计算,有谁知道是怎么回事吗?9:59:42 答:Plaxis 3D Tunnel计算内核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困难。3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专将在此方面有重3D FoundationFLAC3d。近期业,特别是考虑了一些工程实际,但开放性不如和hs 尤其是大改进,新版本前处理借用GID 作为前处理工具。Plaxis 系列优点长处是其理论,hs-small模型。问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm2008/6/5 6 左右。深圳规范要求水平位移不超过30mm,要是用Plaxis是很难算出小于规范值的结果的,事10:05:32 实上,也不至于有那么大的位移的? 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量,有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其他参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程经验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比较高。问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其2008/6/5 7 进行网格划分,这要怎么解决呢?10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受力状况,这需要模拟隧道开挖过程才能得到其受力状况,基坑开挖的影响也是在其这个受力状况上产生的。你现在的目的是让基坑开挖前,隧道结构的内力和弯矩

相关文档
相关文档 最新文档