成都理工大学TCPIP实验报告

成都理工大学TCPIP实验报告
成都理工大学TCPIP实验报告

本科生实验报告

实验课程计算机网络与TCP/IP协议体系(2)学院名称信息科学与技术学院

专业名称通信工程

学生姓名杜立华

学生学号201313070112

指导教师刘飚

实验地点6B603

实验成绩

二〇一五年二月——二〇一五年六月

实验一Linux内核通用链表的使用

实验目的

学习Linux内核通用链表的设计原理,熟练掌握Linux内核通用链表的使用。

实验内容

1、掌握Linux通用链表的创建

2、掌握通用链表添加元素、删除元素和遍历链表的方法

3、掌握通用链表的查找方法

实验要求

?待创建的链表头变量名为user_queue。

?作为链表的宿主节点类型定义如下:

struct user {

int id; /* user id */

struct list_head list;

};

?针对上述user_queue链表,要求以队列方式向其中依次添加10个类型为struct user的宿主节点,并要求这10个宿主节点的id依次为1—10

?依次遍历输出这10个宿主节点的id

?从链表中删除首个宿主节点,然后依次遍历该队列并输出余下各宿主节点的id

?在struct user结构体中增加一个username字段,用于存储该用户名字,重新以队列方式向其中依次添加10个类型为struct user的宿主节点,并要求这10个宿主节点的id依次为1—10

?在链表中搜索id值为5的节点,并输出该节点username值

实现原理

Linux的内核源文件list.h提供了所有的链表定义,以及各类链表的操作接口和实现。其中创

建链表的方法如下:

LIST_HEAD(my_list);

源文件list.h中定义了如下若干接口,用于对通用链表进行各种操作:

?在指定的head后插入新节点,常用于堆栈数据结构的实现

// @newsk:即将添加的新链表节点

// @head:在此节点后添加

list_add(struct list_head *new, struct list_head *head);

?在指定的head前插入新节点,常用于队列数据结构的实现

// @newsk:即将添加的新链表节点

// @head:在此节点前添加

list_add_tail(struct list_head *new, struct list_head *head); ?从链表中删除一个指定节点

// @entry:要从链表中删除的节点

list_del(struct list_head *entry);

?根据当前链表节点指针ptr获得宿主节点指针

// @ptr:struct list_head类型的指针

// @type:链表节点所在的宿主节点的类型

// @member:嵌入宿主的链表节点的变量名

list_entry(ptr, type, member);

?遍历链表

// @pos:遍历链表时用于指示正在遍历的链表节点的指针

// @head:链表头

list_for_each(pos, head);

实现代码和运行结果

请打印本实验的程序代码和程序运行截图,并作为附件附在本实验报告后。

#include

#include

#include "list.h"

struct user

int id;

struct list_head list;

};

int main(void)

{

struct user *p;

LIST_HEAD(user_queue);

for (int i = 0; i < 10; i++)

{

p = (struct user *)malloc(sizeof(struct user)); p->id = i;

list_add_tail(&p->list, &user_queue);

}

struct list_head *q;

list_for_each(q, &user_queue)

{

p = list_entry(q, struct user, list);

printf("%d\n", p->id);

}

return 0;

}

#include

#include

#include "list.h"

struct user

{

char username[20];

int id;

struct list_head list;

int main(void)

{

struct user *p;

LIST_HEAD(head);

for (int i; i < 10; i++)

{

p = (struct user *)malloc(sizeof(struct user)); p->id = i + 1;

printf("user %2d, Please input username: ", i+1); scanf("%s", p->username);

list_add_tail(&(p->list), &head);

}

struct list_head *tmp;

list_for_each(tmp, &head)

{

p = list_entry(tmp, struct user, list);

printf("%d\t%s\n", p->id, p->username);

}

list_for_each(tmp, &head)

{

p = list_entry(tmp, struct user, list);

if (p->id == 5)

printf("%s\n", p->username);

}

return 0;

}

实验二Linux内核通用哈希链表的使用

实验目的

学习Linux内核通用哈希链表的设计原理,熟练掌握Linux内核通用哈希链表的使用。

实验内容

1、掌握Linux通用哈希链表的创建。

2、掌握通用哈希链表添加元素、查找元素的方法。

实验要求

1、待创建的哈希链表头数组为struct hlist_head user_hash[16],要求对

该哈希链表宿主节点的name成员值进行散列,并将散列值与15进行与运算作为哈希链表宿主元素的哈希值。

2、对该哈希表的所有表头元素进行初始化,初始化操作如下,其中index的变

化范围为0~15。

INIT_HLIST_HEAD (&user_hash[index]);

3、作为哈希链表元素的的宿主节点类型定义如下:

struct usermap {

struct hlist_node hlist;

unsigned char name[8];

};

4、针对上述user_hash哈希链表,要求向其中添加3个类型为struct

usermap的宿主节点,并要求这3个宿主节点的name成员分别为”smith”,”john”,”bob”,如下图所示:

5、向哈希表user_hash中添加2个新宿主元素,其中一个宿主元素的name

成员为”john”,另外一个宿主元素的name成员为”lisa”。要求若新宿主元素的name成员已经存在,则提示已经存在该用户,不再向哈希链表中加入该已经存在的宿主节点,否则向哈希链表中添加该新宿主元素。

6、遍历整个哈希表,输出所有表中已存在的宿主节点元素的name。

实现原理

Linux的内核源文件list.h提供了哈希链表的各种操作接口和实现。其中创建具有16个元素的哈希链表的方法如下:

struct hlist_head user_hash[16];

在上述user_hash数组的16个元素中存放的哈希表头元素定义如下:

struct hlist_head {

struct hlist_node *first;

};

哈希链表节点元素定义如下:

struct hlist_node{

struct hlist_node *next, **pprev;

};

本实验对哈希链表宿主节点的name值进行散列的算法如下:

unsigned int BKDRHash(unsigned char *str);

{

unsigned int seed = 131;

unsigned int hash = 0;

while(*str) {

hash = hash * seed + (*str++);

}

return (hash & 0x7FFFFFFF);

}

于是,本实验对一个字符串name求最终哈希值hash的方法如下:unsigned int hash = BKDRHash(name) & 15;

内核源文件list.h定义了以下若干接口,用于对哈希链表进行各种操作:(1)在指定的哈希链表头h所指向的链表头插入新节点

// @n:要添加的新哈希链表节点

// @h:在此哈希链表头节点后添加

hlist_add_head(struct hlist_node *n, struct hlist_head *h); (2)根据当前哈希链表节点指针ptr获得好像链表宿主节点指针

// @ptr:struct hlist_node类型的指针

// @type:哈希链表节点所在的宿主节点的类型

// @member:嵌入宿主的哈希链表节点的变量名

hlist_entry(ptr, type, member);

(3)遍历哈希链表中某个key值所对应的链表

// @tpos:哈希链表宿主节点指针

// @pos:哈希链表节点指针

// @head:哈希链表中某key所对应的链表的头指针

// @member:嵌在哈希链表宿主节点中的哈希链表节点的变量名

hlist_for_each_entry(tpos, pos, head, member);

实现代码和运行结果

请打印本实验的程序代码和程序运行截图,并作为附件附在本实验报告后。

#include

#include

#include "list.h"

struct usermap {

struct hlist_node hlist;

unsigned char name[8];

};

void hlist_print(struct hlist_head *hl_head);

unsigned int BKDRHash(unsigned char *str);

unsigned char hash_add(struct hlist_node *hl_node, struct hlist_head *hl_head);

int main(void)

{

struct hlist_head user_hash[16];

for (int i = 0; i < 16; i++)

INIT_HLIST_HEAD(&user_hash[i]);

struct usermap user[3];

strcpy(user[0].name, "smith");

strcpy(user[1].name, "john");

strcpy(user[2].name, "bob");

for (int i = 0; i < 3; i++)

hlist_add_head(&(user[i].hlist), &user_hash[BKDRHash(user[i].name) & 15]);

hlist_print(user_hash);

struct usermap new_user[2];

strcpy(new_user[0].name, "john");

strcpy(new_user[1].name, "lisa");

for (int i = 0; i < 2; i++)

if (!hash_add(&(new_user[i].hlist), &user_hash[BKDRHash(new_user[i].name) & 15]))

printf("用户%s重复,添加失败!\n", new_user[i].name);

hlist_print(user_hash);

return 0;

}

void hlist_print(struct hlist_head *hl_head)

{

struct usermap *puser;

struct hlist_node *phnode;

for (int i = 0; i < 16; i++)

{

printf("%d\t", i);

hlist_for_each_entry(puser, phnode, &hl_head[i], hlist)

printf("%s\t", puser->name);

printf("\n");

}

}

unsigned int BKDRHash(unsigned char *str)

{

unsigned int seed = 131;

unsigned int hash = 0;

while(*str) {

hash = hash * seed + (*str++);

}

return (hash & 0x7FFFFFFF);

}

unsigned char hash_add(struct hlist_node *hl_node, struct hlist_head *hl_head) {

char *name = hlist_entry(hl_node, struct usermap, hlist)->name;

struct usermap *puser;

struct hlist_node *pnode;

hlist_for_each_entry(puser, pnode, hl_head, hlist)

{

if (!strcmp(puser->name, name))

return 0;

}

hlist_add_head(hl_node, hl_head);

return 1;

}

实验三Linux多线程程序设计

实验目的

学习Linux下多线程程序的编写,掌握IP报文分段重组模拟程序的整体框架。

实验内容

完成Linux下多线程的程序编写,利用线程同步的方法,完成多线程访问一个由Linux内核通用链表所实现的消息队列。

实验要求

7、待创建的消息队列名为msg_queue。

8、作为消息队列的消息宿主节点类型定义如下:

struct msg_buff {

int id;

struct list_head list;

};

9、针对上述msg_queue队列,要求创建两个线程1和线程2,其中线程1向该

队列尾逐步添加10个类型为struct msg_buff的宿主节点,并要求者10个宿主节点的id分别为1—10。另外,在线程1向该队列添加宿主节点的同时,要求线程2从该队列头部依次取出下一个宿主节点,并输出该节点的id值。

实现原理

线程模型

本实验要求创建两个线程,分别为由main函数代表的线程1和由run函数代表的线程2。

其中线程1模拟从网络持续接收消息,并将收到的消息放入消息队列中;线程2模拟网络协议处理程序,当消息队列不空时,持续从消息队列头取出下一个收到的消息并进行处理,如下图所示:

线程

线程2

线程互斥与同步方法

由于消息队列是一临界资源,线程1和线程2将竞争访问该队列,因此必须对线程1和线程2进行互斥与同步管理。即当线程1正在向消息队列尾放入消息时,线程2必须等待线程1操作完毕并退出对临界资源的操作后,方可以从该队列头部中取出下一个消息进行处理,反之亦然。此外,当消息队列为空时,线程2将进入休眠状态,当消息队列不空时,线程2被线程1唤醒后继续处理。下面给出实现线程1和线程2互斥与同步的部分关键代码。

/* 定义访问临界资源的互斥变量*/

pthread_mutex_t mqlock = PTHREAD_MUTEX_INITIALIZER;

/* 定义条件变量*/

pthread_cond_t mqlock_ready = PTHREAD_COND_INITIALIZER;

/ * 线程1 */

int main()

{

struct msg_buff *msg;

for(;;) {

...

pthread_mutex_lock(&mqlock); /* 加锁互斥量*/

list_add_tail(msg->list, &msg_queue)); /* 消息入队列尾*/

pthread_mutex_unlock(&mqlock); /* 解锁互斥量*/

/* 通知线程2条件发生改变*/

pthread_cond_signal(&mqlock_ready);

...

}

...

return 0;

}

/ * 线程2 */

void *run(void *arg)

{

struct msg_buff *msg;

for(;;) {

pthread_mutex_lock(&mqlock); /* 加锁互斥量*/

while(list_empty(&msg_queue))

/* 消息队列空,休眠等待条件改变*/

pthread_cond_wait(&mqlock_ready, &mqlock);

/* 消息队列不空,从队列中取下一消息*/

msg = getnextmsg(msg_queue.next);

/* 解锁互斥量*/

pthread_mutex_unlock(&mqlock);

/* 处理此消息*/

handle_msg(msg);

}

}

实现代码和运行结果

请在本实验所提供的代码msg.c的基础上,完成其中的add_msg和getnextmsg函数的实现;打印本实验的程序代码和程序运行截图,并作为附件附在本实验报告后面。

#include

#include

#include

#include

#include "list.h"

#define PAUSE 3000

void *run(void *); /* 消息处理线程*/

void add_msg(int);

struct msg_buff *getnextmsg(struct list_head *);

void handle_msg(struct msg_buff *);

struct msg_buff {

int id;

struct list_head list;

};

/* 线程互斥量*/

pthread_mutex_t mqlock = PTHREAD_MUTEX_INITIALIZER;

/* 条件变量*/

pthread_cond_t mqlock_ready = PTHREAD_COND_INITIALIZER;

pthread_t tid; /* 消息处理线程id */

LIST_HEAD(msg_queue); /* 消息队列*/

int main()

{

int err = 0;

err = pthread_create(&tid, NULL, run, NULL);/* 创建并启动消息处理线程*/ for(int i = 0; i < 10; i++){

add_msg(i);/* 向消息队列添加消息*/

sleep(1);

}

return 0;

}

void add_msg(int i)

{

// 完成向队列添加消息代码

struct msg_buff *new_msg = (struct msg_buff *)malloc(sizeof(struct msg_buff));

new_msg->id = i;

pthread_mutex_lock(&mqlock);

list_add_tail(&new_msg->list, &msg_queue);

pthread_mutex_unlock(&mqlock);

pthread_cond_signal(&mqlock_ready);

}

void *run(void *arg)

{

struct msg_buff *msg;

for (;;) {

// 通过getnextmsg函数从队列中取下一消息

pthread_mutex_lock(&mqlock);

while (list_empty(&msg_queue))

pthread_cond_wait(&mqlock_ready, &mqlock);

msg = getnextmsg(&msg_queue);

pthread_mutex_unlock(&mqlock);

handle_msg(msg); /* 处理消息*/

free(msg);

}

}

struct msg_buff *getnextmsg(struct list_head *q) {

struct msg_buff *msg;

// 完成从队列中取下一消息代码

msg = list_first_entry(q, struct msg_buff, list);

list_del(&msg->list);

return msg;

}

void handle_msg(struct msg_buff *m)

{

printf("m->id=%d\n", m->id); /* 处理此分组*/ }

1

电气控制系统工程实训报告

电气控制系统工程实训报告 ——Z3050型摇臂钻床电气控制原理 一、机床加工工艺 钻床是一种用途广泛的孔加工机床。它主要是用钻头钻削精度要求不太高的孔,另外还可用来扩孔、铰孔、镗孔,以及刮平面、攻螺纹等。Z3050摇臂钻床是一种立式钻床,它的最大加工孔径是50mm,适用于单件或批量生产中带有多孔的大型零件的孔加工。 二、机床实际电路控制分析 2.1主电路的控制分析 如图2-1所示,M1是主轴电动机,由交流接触器KM1控制,只要求单方向旋转,主轴的正反转有机械手柄操作。M1装在主轴箱顶部,带动主轴及进给传动系统,热继电器FR1是过载保护元件,短路保护电器是总电源开关中的电磁脱扣装置。 M2是摇臂升降电动机,装于主轴顶部,用接触器KM2和KM3控制其正反转。因为电动机短时间工作,故不设过载保护电器。

M3是液压泵电动机,可以做正向转动和反相转动。正向转动和反向转动的启动与停止由接触器KM4和KM5控制。热继电器FR2是液压泵电动机的过载保护电器。该电动机的主要作用是供给夹紧装置压力油,实现摇臂和立柱的夹紧与松开。 M4是冷却泵电动机,功率小,不设过载保护,有开关QS1直接启动与停止。 2.2控制电路的控制分析 (1)主轴的控制 控制电路图如图2-2所示。合上QF,按启动按钮SB2,KM1吸合并自锁,M1启动运转,指示灯HL3亮。按SB1,KM1断电释放,M1停转,HL3熄灭。 (2) 摇臂升降的控制 按摇臂上升按钮SB3(下降按钮SB4),其复合互锁断开KM3(或KM2),时间继电器KT吸合,其瞬动常开触点闭合,还要因为是断电延时,故其延时闭合的常闭触点断开,延时断开的常开触点闭合,使接触器KM5失电复位,同时接触器KM4和电磁铁YA得电闭合,液压泵电动机M3旋转,供给压力油,使摇臂松开。摇臂松开到位后,压位置开关SQ2,使KM4释放,M3停转,放松动作停止,而KM2 (或KM3)吸合,升降电动机M2运转,带动摇臂上升(或下降)当摇臂上升(或下降)到所需位置时,松开SB3 (或SB4),KM2 (或KM3)、KT 断电释放,M2停转,摇臂停止上升(或下降)。由于KT为断电延时,经过1~3秒

TCPIP实验指导书

TCP/IP协议分析与编程实践实验提要 本学期实验课程为24学时,必做实验6个,具体内容如下介绍。除实验5要求采用winpcap,其他实验不限定实现的编程语言和平台。 实验1-1 系统时间同步程序 要求:(1)TCP (2)C/S 摘要:设计简单的客户/服务器程序实现客户系统时间和服务器系统时间同步。 具体: 客户:(1)客户创建流套接字,向服务器发起TCP连接。 (2)连接创建成功后,接收服务器返回的时间,更新客户系统时间。 (3)断开与服务器的连接。 服务器:(1)服务器创建监听套接字,监听客户TCP连接请求。 (2)当收到一个客户TCP连接请求,创建连接套接字同意与其创建连接。 (3)获取系统时间,通过连接套接字返回给客户。 实验1-2 系统时间同步程序 要求:(1)UDP (2)C/S 摘要:设计简单的客户/服务器程序实现客户系统时间和服务器系统时间同步。 具体: 客户:(1)客户创建数据报套接字,通过该套接字向服务器发出”time”命令获取服务器系统时间。 (2)接收服务器返回的时间,更新客户系统时间。 (3)断开与服务器的连接。 服务器:(1)服务器创建数据报套接字,等待接收客户数据。 (2)接收客户发来的“time”命令,获取系统时间,通过套接字返回给客户。实验2 聊天程序设计 要求:(1)TCP/UDP (2)C/S 摘要:设计简单的客户/服务器程序实现客户和服务器相互收发数据直到一端输入“end”结束。 具体: 客户:(1)客户创建流套接字,向服务器发起TCP连接。(或是客户创建数据报套接字)

(2)连接创建成功后,通过套接字向服务器持续发送或是接收数据。 (3)输入或是收到命令”end”,结束收发数据,并断开与服务器的连接。 服务器:(1)服务器创建监听套接字,监听客户TCP连接请求。(或是创建数据报套接字)(2)当收到一个客户TCP连接请求,创建连接套接字同意与其创建连接。 (3)通过套接字与客户持续发送或是接收数据。 (4)输入或是收到”end“命令,结束与该客户的收发数据,断开连接。 实验3 TCP和UDP套接字综合应用 要求:(1)TCP、UDP (2)C/S (3)多线程编程 摘要:设计简单的客户/服务器,服务器实现并发同时响应客户的UDP通信要求,也能响应客户端发过来的TCP通信要求。 TCP客户: (1)客户创建流套接字,向服务器发起TCP连接。 (2)连接创建成功后,通过套接字向服务器持续发送或是接收数据。 (3)输入或是收到命令”end”,结束收发数据,并断开与服务器的连接。 UDP客户: (1)客户创建数据报套接字,通过该套接字向服务器发出”time”命令获取服务器系统时间。 (2)接收服务器返回的时间,更新客户系统时间。 (3)断开与服务器的连接。 服务器: 针对TCP客户,提供的服务如下: (1)服务器创建监听套接字,监听客户TCP连接请求。 (2)当收到一个客户TCP连接请求,创建连接套接字同意与其创建连接。 (3)通过套接字与客户持续发送或是接收数据。 (4)输入或是收到”end“命令,结束与该客户的收发数据,断开连接。 针对UDP客户,提供的服务如下: (1)服务器创建数据报套接字,等待接收客户数据。 (2)接收客户发来的“time”命令,获取系统时间,通过套接字返回给客户。 实验4 Web服务器 要求:(1)TCP (2)C/S (3)http 摘要:设计一个简单的web服务器,它仅能处理一个请求。 具体: Web服务器:

tcpip实验报告

网络协议分析实验 一、实验目的 通过使用协议分析软件,对通信系统的通信过程进行监控、分析,以了解通信协议的工作过程。 二、实验内容 利用协议分析软件(如:Wireshark)跟踪局域网报文(如条件允许也可跟踪多种局域网协议报文),实验内容如下: 将安装协议分析软件的PC接入以太网中,跟踪PC之间的报文,并存入文件以备重新查。 设置过滤器过滤网络报文以检测特定数据流。 利用协议分析软件的统计工具显示网络报文的各种统计信息。 三、实验步骤 1、在PC中安装协议分析软件(如:Wireshark)。具体安装过程详见附录:Wireshark用户指南。 2、启动Wireshark协议分析软件,选择抓包菜单项启动实时监视器,开始实时跟踪显示网络数据报文。可根据系统提示修改显示方式,详见附录:Wireshark用户指南。 3、调出跟踪存储的历史报文,选择有代表性的ETHERNET,IEEE802.3,IP,ICMP,TCP,UDP报文,对照有关协议逐个分析报文各字段的含义及内容。 EHERNET报文格式 IEEE802.3报文格式 IP报文格式

4、设置过滤器属性,如目的地址,源地址,协议类型等。如过滤不需要的网络报文,过滤器允许设置第二层,第三层或第四层的协议字段。 过滤器有两种工作方式: 1)捕获前过滤:协议分析软件用过滤器匹配网络上的数据报文,仅当匹配通过时才捕获报文。 2)捕获后过滤:协议分析软件捕获所有报文,但仅显示匹配符合过滤条件的报文。选择统计菜单项可以显示网络中各种流量的统计信息,如:关于字节数,广播中报文数,出错数等。

UDP 客户/服务器实验 一、实验目的 本实验目的是使用因特网提供的UDP 传输协议,实现一个简单的UDP 客户/服务器程序,以了解传输层所提供的UDP 服务的特点,应用层和传输层之间的软件接口风格,熟悉socket 机制和UDP 客户端/服务器方式程序的结构。 二、实验内容 本实验为UDP 客户/服务器实验。实验内容:UDP echo 客户/服务器程序的设计与实现。UDP echo 客户/服务器程序完成以下功能: 客户从标准输入读一行文本,写到服务器上;服务器从网络输入读取此行,并回射(echo )给客户;客户读此回射行,并将其写到标准输出。 三、实验步骤 1、 总体设计 客户程序从标准输入读一行文本,写到服务器程序上;服务器程序从网络输入读取此行,并回射给客户程序;客户程序读此回射行,并将其写到标准输出。 2、 详细设计 U D P 客户-服务器程序所用套接口函数 1)服务器main 函数 2)服务器str_echo 函数

电气实训报告

电气控制实训 ——报告题目名称:电气控制实训报告 专业班级:机械设计制造及自动化10-3班 学号: 学生姓名: 指导老师: 目录

一、实习的性质、目的、意义 电气控制技术实习是在学习常用低压电气设备、电气控制线路的基本控制环节,典型机床电气控制线路等章节的基础上进行的实践性教学环节、其目的是培养我们掌握本专业所学必须的基本技能和专业知识。通过学习使学我们熟悉并掌握各种常用的低压电器设备的构造、工作原理及使用方法,初步掌握电气控制基本控制的原理、连接规则、故障排除方法,学习常用机床的电气控制的线路结构、工作原理、故障分析和排除方法。通过实习培养我们热爱专业、热爱劳动、吃苦耐劳、刻苦钻研的精神。

二、Z3050摇臂钻床机加工工艺介绍 钻床是一种用途广泛的孔加工机床。它主要是用钻头钻削精度要求不太高的孔,另外还可用来扩孔、铰孔、镗孔,以及刮平面、攻螺纹等。Z3050摇臂钻床是一种立式钻床,它的最大加工孔径是50mm,适用于单件或批量生产中带有多孔的大型零件的孔加工。 三、机床实际电路控制分析 主电路控制分析 图3-1主电路原理图 如图3-1所示: (1)M1是主轴电动机,由交流接触器KM1控制,只要求单方向旋转,主轴的正反转有机械手柄操作。M1装在主轴箱顶部,带动株洲及进给传动系统,热继电器FR1是过载保护元件,短路保护电气是总电源开关中的电磁脱扣装置。 (2)M2是摇臂升降电动机,装于主轴顶部,用接触器KM2和KM3控制其正反转。应为电动机短时间工作,故不设过载保护电源。 (3)M3是液压泵电动机,可以做正向转动和反向转动。正向转动和反向转动的气动与停止有接触器KM4和KM5控制。热继电器FR2是液压泵电动机的过载保护电气。该电动机的主要作用是供给加夹紧装置压力油,实现摇臂和立柱的夹紧和松开。 (4)M4是冷去泵电动机,功率小,不设过载保护,有开关QS1直接气动与停止。 控制电路的控制分析 图3-2控制电路原理图 (1)主轴的控制

武大电气工程电磁场仿真实验报告

武汉大学 工程电磁场及高电压综合实验

一、题目 有一极长的方形金属槽,边宽为1cm,除顶盖电位为100sinπxV外,其他三面的电位均为零,试用差分法求槽内电位的分布。 二、解题原理:均匀媒质中的有限差分法 我们在求解场的分布时,当边界形状比较复杂时,解析分析法不再适合了,我们可以采用数值计算的方法,数值计算法的基本思想,是将整体连续的场域划分为若干个细小区域,一般称之为网格或单元,如图1所示,然后用所求的网格交点(一般称为节点或离散点)的数值解,来代替整个场域的真实解。因而数值解,即是所求场域离散点的解。虽然数值解是一种近似解法,但当划分的网格或单元愈密时,离散点数目也愈多,近似解(数值解)也就愈逼近于真实值。 实解。在此处键入公式。 图1场域的剖分,网格节点及步长

(一)、场域的剖分、网格节点及步长 由边界Γ所界定的二维平行平面场(见图1),若采用直角坐标系则可令该场处在xoy 平面内。 所谓场域的剖分就是场域的离散化,即将场域剖分为若干个网格或单元。最常见最简单的剖分为正方形剖分,这种剖分就是在xy 平面上作许多分别与x 轴及y 轴平行的直线,称为网格线。网格线的交点称为节点或离散点,场域内的节点称为内节点,场域边界上的节点称为边界节点。两相邻网格线间距离称为步长,一般以h 表示。若步长相等则整个场域就被剖分为许多正方形网格,这就是正方形剖分。节点(离散点)的布局不一定采用正方形剖分,矩形剖分也常采用,正三角形剖分偶尔也被应用,不过最常见的最简单的仍然是正方形剖分。 (二)、差分与微分 从前面的分析可知,稳恒电、磁场的求解问题,归根到底是求解满足给定边界条件的偏微分方程(泊松方程或拉普拉斯方程)的解的问题所谓差分方法,就是用差商近似代替偏微商,或者说用差分代替微分,从而把偏微分方程转换为差分方程,后者实际上为代数方程。因此这种转化有利于方程的求解。 下面分别对一阶及二阶的差分公式进行推导。首先回顾有关偏导数的定义,有 00(,)(,)(,)(,) lim lim x x f f x x y f x y f x y f x x y x x x →→?+---==? (1) 因此当|x| 充分小时,可近似地用(,)(,)f x x y f x y x +- 或(,)(,) f x y f x x y x -- 代 替 f x ??,所谓差分公式,即是基于上述观点推得的。 设图1所示场域中的位函数为A ,任取一网格节点0,它在xy 平面上的坐标为(x ,i i y ),记节点0的矢量磁位为,i j A ,并把与节点0相邻的其他四个节点1、2、3、4的矢量磁位分别记为1,i j A +、,1i j A +、1,i j A -、,1i j A -,将节点0处函数A 的 一阶偏微商A x ??,用1、0两点函数值的差商1,,i j i j A A h +-近似代替,则有

实验一TCPIP配置与测试

实验一TCP/IP配置与测试 一、实验目的及任务 1、熟悉并掌握TCP/IP的基本配置。 2、掌握TCP/IP的基本测试方法。 二、实验环境 与因特网连接的计算机局域网; 主机操作系统为windows 2000; 三、预备知识 从某种程度上说,Internet/Intranet与传统网络的主要区别在于它采用了TCP/IP协议,TCP/IP通信协议是目前最完整的、被普遍接受的通信协议标准。它可以使不同的硬件结构、不同软件操作系统的计算机之间相互通信。TCP/IP 是一个广泛发布的公开标准,完全独立于任何硬件或软件厂商,可以运行在不同体系的计算机上。它采用通用寻址方案,一个系统可以寻址到任何其他系统,即使在Internet这样庞大的全球网络内,寻址也是游刃有余。 主流的操作系统都支持TCP/IP协议。微软公司的操作系统平台对TCP/IP提供了强有力的支持,其安装和配置管理都是基于图形化窗口的,只要对TCP/IP 基本知识有所了解,即使是初学者按照提示也能够很轻易地进行基本的安装配置。 TCP/IP配置完毕后,即可利用测试工具进行测试。Windows提供了许多测试工具软件,常用的有: .Ping ,检测网络是否连通。 .Ipconfig ,显示目前TCP/IP的配置。 .Netstat ,显示目前TCP/IP网络连接与每一种协议的统计数据。 .Route ,显示路由配置信息。 .Tracert ,根踪由本机将数据包传送到目的主机所经的路由器及时间。 四、实验步骤 1、在Windows2000 Server中配置TCP/IP。

(1)选择[开始]>[设置]>[控制面板]>[网络和拨号连接],打开网络和拨号连接对话框。 (2)选择[本地连接],单击鼠标右键,从弹出的快捷菜单中选择[属性]、从组件列表中选择[1nternet协议(TCP/IP)] ,单击[属性]按钮打开如图 1.1所示的对话框。 图1.1 [Internet协议(TCP/IP)属性]对话框 (3)选择1P地址分配方式,这里有两种情况: ●如果要通过动态分配的方式获取IP地址,请选择[自动获得IP地址选 项] 。这样计算机启动时自动向DHCP服务器申请IP地址,除了获取 IP地址外,还能获得子网掩码、默认网关、DNS服务器等信息,自动 完成TCP/IP协议配置。对于服务器一般不让DHCP服务器指派地址, 而应设置固定的IP地址。 ●如果要分配一个静态地址,请选择[使用下面的IP地址]选项,接着在 下面的区域输入指定的IP地址、子网掩码以及默认的网关地址,必须 为不同的计算机设置不同的IP地址,同一网段内的子网掩码必须相同。(4)选择DNS服务器地址分配方式,一般要使用DNS域名服务,如果要通过动态分配的方式获取IP地址,请选择[自动获得DNS服务器地址]选 项:如果要分配一个静态地址,请选择[使用下面的DNS服务器地址] 选项,接着在下面的区域输入指定的首选DNS服务器地址和备用DNS

TCPIP实验报告

TCP/IP技术实验报告 书 专业:[通信工程] 学生姓名:[张世超] 完成时间:9:28 AM

实验一网络应用程序基础 实验目得: 通过实验,使学生熟悉并掌握运用TCP/IP技术进行网络编程得基本知识,加深对课堂教学内容得理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中得实际问题,进行一些简单得网络应用程序设计。实验内容: 1,Winsock得启动与终止。 2,Winsock得创建及绑定与关闭。 3,建立通信连接listen及accept与connect。 4,数据得传输。 5,简单得客户机/服务器之间得通信。 要求:通过在SDK模式下完成数据通信得过程,掌握Windows Socket得常用函数得形式与使用方法,理解数据通信得过程。 实验步骤: 1,打开VC环境 1,使用向导为客户端创建工程:选择可执行程序,选择使用wsa环境,单文档环境,其她得选择默认设置 2,在文件中添加代码 3,编译调试 4,使用向导为服务器端创建工程:选择可执行程序,选择使用wsa环境,单文档环境,其她得选择默认设置 5,在文件中添加代码 6,编译调试 7,分别打开两个系统命令窗口中,并分别在其中运行客户端与服务器端程序。 8,在客户端侧输入字符,可以瞧到服务器收到字符串 参考代码:课本156页--160页 实验结果: Client: #include<Winsock2、h> #include<stdio、h> //服务器端口号为5050 #define DEFAULT_PORT 5050 #define DATA_BUFFER 1024 void main(int argc,char *argv[]) { ?WSADATA wsaData; SOCKET sClient; ?int iPort=DEFAULT_PORT;

电气控制实验报告.

黑龙江科技学院 综合性、设计性实践报告 实验项目名称配电盘设计 所属课程名称电气控制 实验日期 班级 学号 姓名 成绩 电气与信息工程学院实验室

实验概述: 【实验目的及要求】 电气控制工程实践是电类专业大学阶段重要的实践性教学环节,着眼于工程设动手组装、调试等实践来验证课程的基本理论,并培养学生的大工程意识和实践技能。 电气控制工程实践应达到如下基本要求: 1. 综合运用电气控制课程中所学的理论知识去独立完成一个项目的设计。 2. 通过查阅手册和文献资料,培养学生独立分析和解决实际问题的能力。 3. 熟悉常用电气元件的类型和特性,并掌握合理选用的原则。 4. 学会电气控制电路的安装、配线、以及调试技能。 5.学会电气控制电路的故障分析和处理方法。 6.学会撰写实践总结报告。 7.培养严肃认真的工作作风和严谨的科学态度。 8. 对时间继电器配线时要分析所控制的开关所在。 9.配线完成后未经指导教师允许不能擅自接电调试。 10.接电后不能用手或导体接触电路装置,以免触电。 【实验原理】 1. 空气隔离开关: 可作为不频繁地手动接通和分断交直流电路或作隔离开关用,也可以用不频繁地接通和分断额定电流以下的负载,如小型电动机等。应注意自动开关的额定电压和额定电流应不小于电路的正常工作电压和电流。 2. 熔断器: 可串联在保护的可作为不频繁地手动接通和分断交直流电路或作隔离开关用,也可以用不频繁地接通和分断额定电流以下的负载,如小型电动机等。应注意自动开关的额定电压和额定电流应不小于电路的正常工作电压和电流。电路中。当电路正常工作时,熔断器允许通过一定大小的电流不熔断;当电路发生短路或严重过载时,熔体中流过很大的故障电流,当电流产生的热量使熔体温度上升到熔点时,熔体熔断切断电路,使电气设备脱离电源,从而达到保护电器设备的目的。熔断器额定电压应大于或等于线路的工作电压,额定电流必须大于或等于所装熔体的额定电流。 3. 交流接触器: 是一种用来频繁地接通或断开交直流主电路及大容量控制电路的自动切电路,还具有低电

电气工程及其自动化综合实训

目录 第一部分电气线路安装调试技能训练 (2) 题目一: 三相异步电动机的可逆控制 (2) 一.课题分析 (2) 二.设计电气原理图 (3) 三.设计电气安装接线图 (4) 四.设备清单 (5) 五.故障现象及故障分析 (5) 题目二: 三相异步电动机Y-△降压启动控制 (6) 一.课题分析 (6) 二.设计电气原理图 (7) 三.设计电气安装接线图 (9) 四.设备清单 (10) 五.故障现象及故障分析 (10) 电气线路安装调试技能训练小结 (11) 一电气原理图的绘制要求 (11) 二电气接线图的绘制要求: (12) 三电器安装、接线的工艺要求: (12) 四实训线路发生的故障及排除办法 (13) 第二部分PLC电气控制系统设计 (14) 题目三电镀生产线的PLC控制 (14) 一.课题分析 (14) 二、设计主电路 (16) 三、设计PLC的I/O分配表 (17) 四、设计PLC的I/O接线图 (18) 五、设计功能图 (19) 六、设计梯形图 (20) 七、小结 (26) 第三部分基础知识培训 (27) 一电工基础知识 (27) 二、钳工基础知识 (27) 三、电气安全技术与文明生声及环境保护知识 (27) 四、质量管理知识及相关法律与法规知识 (27) 参考文献 (28)

第一部分电气线路安装调试技能训练题目一: 三相异步电动机的可逆控制 一.课题分析 1课题要求 设计三相异步电机可逆双重联锁控制电气原理图、电气安装接线图;按设计图纸工艺接线,即按横平竖直原则走线,每元件出线需做直角(出线距离6~8厘米),不得背线、跳线、反圈及露铜过多,接线不得松动,保持排线美观;能排查自己或老师设置的故障,并列写故障分析。 2课题分析 接触器控制的三相异步电动机可逆双重连锁控制电路的实质上是两个方向相反的单向运行电路的组合。反转电路只需要将电动机三相当中的任意两相接线方法对调,其他保持不变,就可实现电动机的反转。为了避免正反向同时工作引起电源相间短路,必须在这两个运行电路中加设互锁装置,保证同时只能有一个电路工作。按照电动机正反转操作顺序的不同,分“正—停——反”和“正—反—停”两种控制电路。 而实际运用中则要求直接实现从正转到反转转换的控制(即“正—反—停”控制电路),因为此控制方法电路简单,易于实现,成本较低廉。通常来说,使用此种控制方式要求电机功率相对比较小,且负荷较低,能够迅速实现电动机的反转,否则电动机可能会因为过热而损坏。 在本课题设计的控制电路中,采用复合按钮来控制电动机的正、反转。正转启动按钮SB2的常开触点串接于正转接触器KM1的线圈回路,用于接通KM1的线圈,而SB2的常闭触点则串接于反转接触器KM2线圈回路中,工作时首先断开KM2的线圈,以保证KM2不得电,同时KM1得电。反转启动按钮SB3的接法与SB2类似,常开触点串接于KM2的线圈回路,常闭触点串接于KM1的线圈回路中,从而保证按下SB3使KM1不得电,KM2能可靠得电,实现电动机的反转。 根据设计的要求以及电气的一些基本常识,为防止两个接触器同时得电而导致电源短路,需采用双重互锁来保证其不短路,即利用两个接触器的常闭触点KM1、KM2分别串接在对方的工作线圈电路中,构成相互制约的关系,称为联锁,实现联锁作用的常闭辅助触点称为联锁触点。由复合按钮SB2、SB3常闭触点实现的互锁称为机械互锁。

实验1TCPIP属性设置(参考答案)

实验一TCP/IP属性设置与测试 【一】实验目的 1. 通过实验学习局域网接入Internet时的TCP/IP属性的设置; 2. 掌握ping、ipconfig等命令的使用; 3. 熟悉使用相关命令测试和验证TCP/IP配置的正确性及网络的连通性。 【二】实验要求 1. 设备要求:计算机2台以上(装有Windows 2000/XP/2003操作系统、装有网卡已联网); 2. 分组要求:2人一组,合作完成。 【三】实验预备知识 1. IP地址、子网掩码、默认网关、DNS服务器 (1)IP地址 IP地址(IP Address)就是给每个连接在Internet上的主机分配的一个32bit二进制地址,为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节,IP地址它就像一个人可以合法的在社会上办理银行卡、移动电话等社会活动所需要一个身份证号标识一样。 所有的IP地址都由国际组织NIC(Network Information Center)负责统一分配,目前全世界共有三个这样的网络信息中心:InterNIC(负责美国及其他地区)、ENIC(负责欧洲地区)、APNIC(负责亚太地区),我国申请IP地址要通过APNIC,APNIC的总部设在澳大利亚布里斯班。申请时要考虑申请哪一类的IP地址,然后向国内的代理机构提出。 (2)子网掩码 子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 (3)默认网关 默认网关(Default Gateway)是一个可直接到达的IP 路由器的IP 地址,配置默认网关可以在IP 路由表中创建一个默认路径,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包,它就好像一所学校有一个大门,我们进出学校必须经过这个大门,这个大门就是我们出入的默认关口。现在主机使用的网关,一般指的是默认网关。一台主机的默认网关是不可以随随便便指定的,必须正确地指定,否则一台主机就会将数据包发给不是网关的主机,从而无法与其他网络的主机通信。 (4)DNS服务器 DNS服务器(Domain Name System或者Domain Name Service) 是域名系统或者域名服务,域名系统为Internet上的主机分配域名地址和IP地址。用户使用域名地址,该系统就会自动把域名地址转为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器,通过DNS服务器来应答域名服务的查询。TCP/IP属性设置中填入的是DNS服务器的IP地址。 2. Ping命令 Ping命令是最常用的一种网络命令,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。根据返回的信息,可以推断TCP/IP参数是否设置正确以及运行是否正常。按照缺省设置,Windows上运行的Ping命令发送4个ICMP(互联网控制报文协议)回送请求,每个32字节数据,

TCP.IP课程实验报告

TCP/IP协议族分析 课程设计

目录 第一章TCP/IP 概述 (3) 1.1 TCP/IP协议族定义 (3) 1.2 TCP/IP协议族的特点 (3) 1.3 TCP/IP协议族的分层 (3) 1.4 TCP/IP协议族的结构 (4) 第二章地址解析协议(ARP)——链路层 (5) 2.1 ARP概述 (6) 2.2 ARP的组成 (6) 2.3 ARP工作原理 (7) 2.4 ARP帧结构 (7) 第三章因特网控制消息协议(ICMP)——网络层 (13) 3.1 ICMP协议简介 (13) 3.2 ICMP消息结构 (14) 3.3 Echo Request和Echo Reply查询消息 (14) 3.4 ICMP各字段分析 (15) 第四章传输控制协议(TCP)——运输层 (18) 4.1 TCP协议简介 (18) 4.2 TCP数据包结构 (19) 4.3 TCP数据包分析 (20) 4.4 TCP三次“握手” (25) 第五章普通文件传输协议(TFTP)——应用层 (27) 5.1 TFTP数据传输模式 (27) 5.2 TFTP会话实例 (28) 总结 (31) 参考文献 (31)

第一章 TCP/IP 协议族概述 1.1 TCP/IP协议族定义 TCP/IP协议族是指一整套数据通信协议, 其名字是由这些协议中的两个协议组成的,即传输控制协议(Transmission Control Protocol ——TCP)和网间协议(Internet Protocol——IP)。虽然还有很多其他协议,但是TCP和IP显然是两个最重要的协议。 1.2 TCP/IP协议族的特点 TCP/IP协议族有一些重要的特点,以确保在特定的时刻能满足一种重要的需求,即世界范围内的数据通信。其特点包括: ●开放式协议标准。可免费使用,且与具体的计算机硬件或操作系统无关。由于它受到如此广泛的支持,因而即使不通过Internet 通信,利用TCP/IP来统一不同的硬件和软件也是很理想的。 ●与物理网络硬件无关。这就允许TCP/IP可以将很多不同类型的网络集成在一起,它可以适用于以太网、令牌环网、拨号线、X.25网络以及任何其它类型的物理传输介质。 ●通用的寻址方案。该方案允许任何TCP/IP设备唯一的寻址整个网络中的任何其他设备,该网络甚至可以像全球Internet那样大。 ●各种标准化的高级协议。可广泛而持续地提供多种用户服务。 1.3 TCP/IP协议族的分层 图1-1 TCP/IP协议族中不同层次的协议

电气控制技术与PLC 实验报告样本

西华大学实验报告(理工类) 开课学院及实验室:电气与电子信息学院电气信息专业实验中心 实验时间:2016年 月 日 一、实验目的 1、通过对三相异步电动机正反转控制线路的接线,掌握由电路原理图接成实际操作电路的方法。 2、掌握三相异步电动机正反转的原理和方法。 3、掌握手动控制正反转控制、接触器联锁正反转、按钮联锁正反转控制及按钮和接触器双重联锁正反转控制线路的不同接法,并熟悉在操作过程中有哪些不同之处。 二、实验原理 利用自锁、互锁技术进行电机多种正反转电路设计。包括倒顺开关正反转控制线路设计、接触器联锁正反转控制线路设计、按钮联锁正反转控制线路设计以及按钮和接触器双重联锁正反转控制线路设计。 三、实验设备、仪器及材料 D61继电接触控制挂箱(一)、D62继电接触控制挂箱(二)、三相鼠笼异步电动机(△/220V) 四、实验步骤(按照实际操作过程) 1、倒顺开关正反转控制线路设计 (1) 旋转调压器旋钮将三相调压电源U 、V 、W 输出线电压调到220V ,按下“关”按钮切断交流电源。 (2) 按图1接线。图中Q 1 (用以模拟倒顺开关)、FU 1 、FU 2、FU 3选用D62挂件,电机选用DJ24(△/220V )。 (3) 启动电源后,把开关Q 1合向“左合”位置,观察电机转向。 (4) 运转半分钟后,把开关Q 1合向“断开”位置后,再扳向“右合”位置,观察电机转向。 2、接触器联锁正反转控制线路设计 (1) 按下“关”按钮切断交流电源。按图8-5接线。图中SB 1、SB 2、SB 3、KM 1、KM 2、FR 1选用D61件,Q 1、FU 1、FU 2 、FU 3、FU 4选用D62挂件,电机选用DJ24(△/220V )。经指导老师检查无误后,按下“开”按钮通电操作。 (2) 合上电源开关Q 1,接通220V 三相交流电源。 (3) 按下SB 1,观察并记录电动机M 的转向、接触器自锁和联锁触点的吸断情况。

昆明理工大学电气工程及其自动化 发电机同步实验报告

实验二:同步发电机综合实验 三相同步发电机并网运行 一、 实验目的 1、学习三相同步发电机投入并网运行的方法。 2、测试三相同步发电机并网运行条件不满足时的冲击电流。 3、研究三相同步发电机并网运行时的静态稳定性。 4、测试三相同步发电机突然短路时的短路电流。 二、 实验原理 1. 同步发电机的并网运行 发电机与电网是否符合下列条件: a 、双方应有相同的相序; b 、双方应有相同的电压; c 、双方应有相同或接近相同的频率; d 、双方应有相同的电压初相位。 在实际并网中,这些条件并不要求完全达到,只要在一定的 误差范围之内就可以进行并网,比如转速(频率)相差约??(2%~5%)。 总之,在并车的时候必须避免产生巨大的冲击电流,以防止同步电机损坏,避免电力系统受到严重的干扰。 2. 同步发电机的静态稳定性 发电机输出的电磁功率与功角的关系为: 静态稳定的条件用数学表达为0>??δM P ,我们称δ ??M P 为比整步功率,又称为整补功率系数,其大小可以说明发电机维护同步运行的能力,既说明静态稳定的程度,用P ss 表示。

δ角越小,P ss 数值越大,发电机越稳定。由δ d dP E 和P E 可知,当δ小于90°时,δ d dP E 为正值,在这个范围内发电机的运行是稳定的,但当δ愈接近90°,其值愈小,稳定的程度越低。当δ等于90°时,是稳定和不稳定的分界点,称为静态稳定极限。在所讨论的简单系统情况下,静态稳定极限所对应的功角正好与最大功率或称功率极限的功角一致。对应的o 90=δ时达到静态稳定功率极限。为了安全可靠,极限功率应该比额定功率大一定的倍数,即发电机的额定运行点都远低于稳定极限,以保持有足够的静稳定储备。P em 与P en 之比称为静过载能力K m ,即: 一般要求K m >1.7,也可以说发电机带额定有功负荷运行时静态稳定储备应该在70% 以上,因此额定功角n δ一般应该是30°左右。 三、 实验线路 四、 实验结果及分析 a 、 在短路器断开的情况下,测出电网和发电机的电压波形,找到并联条件满 足的点,确定并网的时间,进行并网实验,测试并网时的冲击电流; 实验参数: 图1:励磁电流图2:相位 实验结果: 图3:电网与发电机的电压波形图4:调整后的电网与发电机电压波形 图5:并网时间图6:冲击电流波形 b 、 调整发电机的运行条件,分别在初相位不同和电压幅值不同时,进行并网 实验,测试并网时的冲击电流 实验参数: 图7:相位不同,幅值相同图8:并网时间 实验结果:

TCP实验报告 计算机网络

计算机网络实验报告——TCP客户/服务器应用程序设计 姓名: 班级:

一.实验目的 实现在TCP方式下客户端和服务器端的数据传输过程。 二.实验要求 编程实现一个聊天室系统。该系统首先必须设立服务器,建立完成后必须建立与服务器的连接。建立成功后可以接收客户端输入的信息。该系统包括客户端和服务器端两部分。用户通过客户端发送消息。服务器端在收到消息后,显示在主界面上 实验报告要求有实现过程的流程图,对主要的函数及其参数给予说明,要有实现过程的主要程序段,并对各段程序的功能及作用进行说明。 三.程序实验原理及流程图 在TCP/IP协议下,通讯是建立在服务器与客户端之间的。由客户端想服务器发送连接请求,服务器响应后建立连接,然后才能开始进行通讯。一下是实现的流程图。 系统工作流程:

四.节目设计 在VC++的MFC下创建基于对话框模式的TCP服务器端和TCP客户端,设置控件并调整相应的属性。下面是初始化的效果:

五.主要函数及其参数说明 1、服务器端 1)BOOL CCSocketDlg::OnInitDialog() 用于初始化对话框。在这个这个系统自动生成的函数中添加对进程的控制。 count=0; m_list.InsertColumn(0,"消息");

m_list.SetColumnWidth(0,435); m_edit.SetLimitText(99); for (int i=0;i<50;i++) msgsock[i]=NULL; //设定地址 serv.sin_addr.s_addr=htonl(INADDR_ANY); serv.sin_family=AF_INET; serv.sin_port=5000;//htons(5000); addlen=sizeof(serv); m_button.EnableWindow(FALSE); //创建socket sock=socket(AF_INET,SOCK_STREAM,0); //绑定 if (bind(sock,(sockaddr*)&serv,addlen)){ m_edit.SetWindowText("绑定错误"); } else{ //m_list.InsertItem(count++,inet_ntoa(serv.sin_addr)); m_edit.SetWindowText("服务器创建成功"); //开始侦听 listen(sock,5); //调用线程 AfxBeginThread(&thread,0); 2)getcount() 用于获得还没有使用的socket数组号int CCSocketDlg::getcount(){ for (int i=0;i<50;i++){ if (msgsock[i]==NULL) return i;} return -1;

电气控制与PLC综合实习报告心得

《PLC控制技术》实训总结报告 姓名: 班级: 指导教师:

实训时间:

目录 前言 (5) 实训背景 (5) 实训目的 (5) 实训器材 (5) 设计选题 (6) 1.PLC控制系统应用现状及发展趋势 (7) 1.1应用现状 (7) 1.2主流产品介绍 (9) 1.3发展趋势 (14) 2.主要实训项目及解决方案(书写三个解决方案,每组选择一个题目) (16) 2.1项目1及解决方案 (17) 2.1.1项目介绍 (17) 2.1.2硬件配置及I/O (17) 2.1.3梯形图设计 (18) 2.2项目2及解决方案 (18) 2.2.1项目介绍 (18) 2.2.2硬件配置及I/O (19) 2.2.3梯形图设计 (20) 2.3项目3及解决方案 (22) 2.3.1项目介绍 (22)

2.3.2硬件配置及I/O (23) 2.3.3梯形图设计 (24) 3.实训过程总结 (28) 3.1实训收获 (28) 3.2存在的问题及解决思路 (29) 4.结束语 (29)

前言 实训背景 PLC控制功能是通过存放在存储器内的程序来实现的,主要对控制功能作必要地修改,只需改变软件指令即可,使硬件软件化。可编程序控制器采用易学易懂的梯形图语言,它是以计算机软件技术构成人们惯用的继电器模型,形成一套独具风格的以继电器梯形图为基础的形象编程语言,梯形图使用的符号和定义与常规的继电器展开图完全一致,电气操作人员使用起来得心应手,不存在计算机技术与传统电气控制技术之间的专业“鸿沟”。在了解PLC简要工作原理和它的编程技术之后,就可结合实际需要进行应用设计,进而将PLC用于实际控制系统中。该课程实训的任务是培养学生利用PLC应用技术,设计和开发自动化控制装置的综合运用能力。 实训目的 通过本次课程设计让同学们了解PLC的内部结构以及工作原理,掌握S7-200可编程控制器的指令系统,熟悉各个指令及其应用,培养学生利用PLC技术设计和开发控制装置的综合运用能力。重点是将PLC 应用于实际,根据控制要求对PLC进行编程和使用。 实训器材

TCPIP实验之IP数据包分析--

TCP/IP协议与编程实验 姓名: 班级: 学号: 实验题目用Wireshark抓包分析ip数据包 一、实验目的 1、了解并会初步使用Wireshark,能在所用电脑上进行抓包 2、了解IP数据包格式,能应用该软件分析数据包格式 3、查看一个抓到的包的内容,并分析对应的IP数据包格式 二、实验内容 Wireshark 是网络包分析工具。网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细的情况。 实验步骤: 1、打开wireshark,选择接口选项列表。或单击“Capture”,配置“option” 选项。

2、设置完成后,点击“start”开始抓包: 3、显示结果: 3、选择某一行抓包结果,双击查看此数据包具体结构。

4、捕捉IP数据报。 ① 写出IP数据报的格式。 IP数据报首部的固定部分中的各字段含义如下: (1)版本占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。 (2)首部长度占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60 字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部

3)区分服务占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务 DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。 (4)总长度总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。长度就是20字节(即首部长度为0101),这时不使用任何选项。 (5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 (6)标志(flag) 占3位,但目前只有2位有意义。 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。 7)片偏移占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8 个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。 (8)生存时间占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。 #TTL通常是32或者64,scapy中默认是64 (9)协议占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。(在scapy中,下层的这个protocol一般可以从上曾继承而来,自动填充,我们一般可以省略不填此项) (10)首部检验和占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和

相关文档
最新文档