搜档网
当前位置:搜档网 › Android Wifi工作流程

Android Wifi工作流程

Android Wifi工作流程
Android Wifi工作流程

Android Wifi的工作流程一、WIFI工作相关部分

Wifi 网卡状态

1. WIFI_STATE_DISABLED: WIFI网卡不可用

2. WIFI_STATE_DISABLING: WIFI正在关闭

3. WIFI_STATE_ENABLED:WIFI网卡可用

4. WIFI_STATE_ENABLING:WIFI网卡正在打开

5. WIFI_STATE_UNKNOWN:未知网卡状态

WIFI 访问网络需要的权限

"android.permission.CHANGE_NETWORK_STATE">

修改网络状态的权限

android:name="android.permission.CHANGE_WIFI_STATE">

修改WIFI状态的权限

"android.permission.ACCESS_NETWORK_STATE">

访问网络权限

"android.permission.ACCESS_WIFI_STATE">

访问WIFI权限

WIFI 核心模块

n WifiService

由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及跟新WIFI的状态

n WifiMonitor

负责从wpa_supplicant接收事件通知

n Wpa_supplicant

1、读取配置文件

2、初始化配置参数,驱动函数

3、让驱动scan当前所有的bssid

4、检查扫描的参数是否和用户设置的想否

5、如果相符,通知驱动进行权限认证操作

6、连上AP

n Wifi驱动模块

厂商提供的source,主要进行load firmware和kernel的wireless进行通信

n Wifi电源管理模块

主要控制硬件的GPIO和上下电,让CPU和Wifi模组之间通过sdio接口通信

二、Wifi工作步骤

1 Wifi模块初期化

2 Wifi启动

3 查找热点(AP)

4 配置AP

5 配置AP参数

6 Wifi连接

7 IP地址配置

三、WIFI的架构和流程

1、WIFI的基本架构

1、wifi用户空间的程序和库:

external/wpa_supplicant/

生成库libwpaclient.so和守护进程wpa_supplicant

2、hardware/libhardware_legary/wifi/是wifi管理库

3、JNI部分:

frameworks/base/core/jni/android_net_wifi_Wifi.cpp

4、JAVA部分:

frameworks/base/services/java/com/android/server/

frameworks/base/wifi/java/android/net/wifi/

5、WIFI Settings应用程序位于:

packages/apps/Settings/src/com/android/settings/wifi/

6、WIFI 驱动模块 wlan.ko

wpa_supplicant通过wireless_ext 接口和驱动通信

7、WIFI 硬件模块

2、WIFI在Android中如何工作

Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,代码位于external/wpa_supplicant。wpa_supplicant是通过socket与

hardware/libhardware_legacy/wifi/wifi.c通信。UI通过https://www.sodocs.net/doc/0311906694.html,.wifi package (frameworks/base/wifi/java/android/net/wifi/)发送命令给wifi.c。相应的JNI实现位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp。更高一级的网络管理位于frameworks/base/core/java/android/net。

3、配置Android支持WIFI

在BoardConfig.mk中添加:

BOARD_HAVE_WIFI := true

BOARD_WPA_SUPPLICANT_DRIVER := WEXT

这将在external/wpa_supplicant/Android.mk设置WPA_BUILD_SUPPLICANT为true,默认使用驱动driver_wext.c。

如果使用定制的wpa_supplicant驱动(例如wlan0),可以设置:

BOARD_WPA_SUPPLICANT_DRIVER := wlan0

4、使能wpa_supplicant调试信息

默认wpa_supplicant设置为MSG_INFO,为了输出更多信息,可修改:

1、在common.c中设置wpa_debug_level = MSG_DEBUG;

2、在common.c中把#define wpa_printf宏中的

if ((level) >= MSG_INFO)

改为

if ((level) >= MSG_DEBUG)

5、配置wpa_supplicant.conf

wpa_supplicant是通过wpa_supplicant.conf中的ctrl_interface=来指定控制socket的,应该在AndroidBoard.mk中配置好复制到$(TARGET_OUT_ETC)/wifi(也就是

/system/etc/wifi/wpa_supplicant.conf)这个位置会在init.rc中再次检测的。

一般的wpa_supplicant.conf配置为:

ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi

update_config=1

fast_reauth=1

有时,驱动需要增加:

ap_scan=1

如果遇到AP连接问题,需要修改ap_scan=0来让驱动连接,代替wpa_supplicant。

如果要连接到non-WPA or open wireless networks,要增加:

network={

key_mgmt=NONE

}

6、配置路径和权限

Google修改的wpa_supplicant要运行在wifi用户和组下的。代码可见

wpa_supplicant/os_unix.c

中的os_program_init()函数。

如果配置不对,会出现下面错误:

E/WifiHW ( ): Unable to open connection to supplicant on

"/data/system/wpa_supplicant/wlan0": No such file or directory will appear.

确认init.rc中有如下配置:

mkdir /system/etc/wifi 0770 wifi wifi

chmod 0770 /system/etc/wifi

chmod 0660 /system/etc/wifi/wpa_supplicant.conf

chown wifi wifi /system/etc/wifi/wpa_supplicant.conf

# wpa_supplicant socket

mkdir /data/system/wpa_supplicant 0771 wifi wifi

chmod 0771 /data/system/wpa_supplicant

#wpa_supplicant control socket for android wifi.c

mkdir /data/misc/wifi 0770 wifi wifi

mkdir /data/misc/wifi/sockets 0770 wifi wifi

chmod 0770 /data/misc/wifi

chmod 0660 /data/misc/wifi/wpa_supplicant.conf

如果系统的/system目录为只读,那应该使用路径/data/misc/wifi/wpa_supplicant.conf。

7、运行wpa_supplicant和dhcpcd

在init.rc中确保有如下语句:

service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -dd

-Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf

user root

group wifi inet

socket wpa_wlan0 dgram 660 wifi wifi

oneshot

service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d -B wlan0

disabled

oneshot

根据所用的WIFI驱动名字,修改wlan0为自己驱动的名字。

8、编译WIFI驱动为modul e或kernel built in

1、编译为module

在BoardConfig.mk中添加:

WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/xxxx.ko"

WIFI_DRIVER_MODULE_ARG := "" #for example nohwcrypt

WIFI_DRIVER_MODULE_NAME := "xxxx" #for example wlan0

WIFI_FIRMWARE_LOADER := ""

2、编译为kernel built in

1)在hardware/libhardware_legacy/wifi/wifi.c要修改interface名字,

2)在init.rc中添加:

setprop wifi.interface "wlan0"

3)在hardware/libhardware_legacy/wifi/wifi.c中当insmod/rmmod时,直接return 0。

9、WIFI需要的firmware

Android不使用标准的hotplug binary,WIFI需要的firmware要复制到/etc/firmware。

或者复制到WIFI驱动指定的位置,然后WIFI驱动会自动加载。

10、修改WIFI驱动适合Android

Google修改的wpa_supplicant要求SIOCSIWPRIV ioctl发送命令到驱动,及接收信息,例如signal strength, mac address of the AP, link speed等。所以要正确实现WIFI驱动,需要从SIOCSIWPRIV ioctl返回RSSI (signal strength)和MACADDR信息。

如果没实现这个ioctl,会出现如下错误:

E/wpa_supplicant( ): wpa_driver_priv_driver_cmd failed

wpa_driver_priv_driver_cmd RSSI len = 4096

E/wpa_supplicant( ): wpa_driver_priv_driver_cmd failed

D/wpa_supplicant( ): wpa_driver_priv_driver_cmd LINKSPEED len = 4096

E/wpa_supplicant( ): wpa_driver_priv_driver_cmd failed

I/wpa_supplicant( ): CTRL-EVENT-DRIVER-STATE HANGED

10、设置dhcpcd.conf

一般/system/etc/dhcpcd/dhcpcd.conf的配置为:

interface wlan0

option subnet_mask, routers, domain_name_server

四、WIFI模块分析

Wifi模块学习流程

最近研究Wifi模块,查了不少的相关资料,但发现基本上是基于android2.0版本的的分析,而现在研发的android移动平台基本上都是2.3的版本,跟2.0版本的差别,在Wifi模块上也是显而易见的。2.3版本Wifi模块没有了WifiLayer,之前的WifiLayer主要负责一些复杂的Wifi功能,如AP选择等以提供给用户自定义,而新的版本里面的这块内容基本上被WifiSettings所代替

本文就是基于android2.3版本的Wifi分析,主要分为两部分来分别说明:

(a) Wifi的启动流程(有代码供参考分析)

(b) Wifi模块相关文件的解析

(c) Wpa_supplicant解析

Awifi的基本运行流程(针对代码而言)

首先给一张我网上down下来的图,针对2.3版本之前的,由于不怎么擅长画这些,大家也就将就点,只要能助理解就可以了

(一)初始化

a.流程

1.在SystemServer启动的时候会生成一个ConnectivityService的实例

2.ConnectivityService的构造函数会创建WifiService

3.WifiStateTracker会创建WifiMonitor接受来自底层的事件,WifiService和WifiMonitor是整个wifi模块的核心,WifiService负责启动和关闭wpa_supplicant,启动和关闭WifiMonitor 监视线程和把命令下方给wpa_supplicant,而WifiMonitor则负责从wpa_supplicant接受事件通知

b.代码分析

要想使用Wifi模块,必须首先使能Wifi,当你第一次按下Wifi使能按钮时,WirelessSettings 会实例化一个WifiEnabler对象,实例化代码如下:

packages/apps/settings/src/com/android/settings/WirelessSettings.java

[java]view plaincopy

1.protected void onCreate(Bundle savedInstanceState) {

2.

3.super.onCreate(savedInstanceState);

4.……

5. CheckBoxPreferencewifi = (CheckBoxPreference) findPreference(K

EY_TOGGLE_WIFI);

6.

7. mWifiEnabler= new WifiEnabler(this, wifi);

8.……

9.}

WifiEnabler类的定义大致如下,它实现了一个监听接口,当WifiEnabler对象被初始化后,它监听到你按键的动作,会调用响应函数onPreferenceChange(),这个函数会调用WifiManager的setWifiEnabled()函数。

[java]view plaincopy

1.public class WifiEnabler implementsPreference.OnPreferenceChangeListener {

2.……

3.public boolean onPreferenceChange(Preference preference,Object value) {

4. booleanenable = (Boolean) value;

5.……

6.if (mWifiManager.setWifiEnabled(enable)) {

7. mCheckBox.setEnabled(false);

8.……

9.}

10.……

11.}

我们都知道Wifimanager只是个服务代理,所以它会调用WifiService的setWifiEnabled()函数,而这个函数会调用sendEnableMessage()函数,了解android消息处理机制的都知道,这个函数最终会给自己发送一个MESSAGE_ENABLE_WIFI的消息,被WifiService 里面定义的handlermessage()函数处理,会调用setWifiEnabledBlocking()函数。下面是调用流程:

mWifiEnabler.onpreferencechange()===>mWifiManage.setWifienabled()===>mWifiService.set WifiEnabled()===>mWifiService.sendEnableMessage()

===>mWifiService.handleMessage()===>mWifiService.setWifiEnabledBlocking().

在setWifiEnabledBlocking()函数中主要做如下工作:加载Wifi驱动,启动wpa_supplicant,注册广播接收器,启动WifiThread监听线程。代码如下:

1.……

2.if (enable) {

3.if (!mWifiStateTracker.loadDriver()) {

4. Slog.e(TAG, "Failed toload Wi-Fi driver.");

5. setWifiEnabledState(WIFI_STATE_UNKNOWN, uid);

6.return false;

7. }

8.if (!mWifiStateTracker.startSupplicant()) {

9. mWifiStateTracker.unloadDriver();

10. Slog.e(TAG, "Failed tostart supplicant daemon.");

11. setWifiEnabledState(WIFI_STATE_UNKNOWN, uid);

12.return false;

13. }

14. registerForBroadcasts();

15. mWifiStateTracker.startEventLoop();

16.……

至此,Wifi使能(开启)结束,自动进入扫描阶段。

(二)扫描AP

当驱动加载成功后,如果配置文件的AP_SCAN = 1,扫描会自动开始,WifiMonitor将会从supplicant收到一个消息EVENT_DRIVER_STATE_CHANGED,调用handleDriverEvent(),然后调用mWifiStateTracker.notifyDriverStarted(),该函数向消息队列添加

EVENT_DRIVER_STATE_CHANGED,handlermessage()函数处理消息时调用scan()函数,并通过WifiNative将扫描命令发送到wpa_supplicant。

看代码Frameworks/base/wifi/java/android/net/wifi/WifiMonitor.java

[java]view plaincopy

1.private void handleDriverEvent(Stringstate) {

2.if (state == null) {

3.return;

4. }

5.if (state.equals("STOPPED")) {

6. mWifiStateTracker.notifyDriverStopped();

7. } else if (state.equals("STARTED")) {

8. mWifiStateTracker.notifyDriverStarted();

9. } else if (state.equals("HANGED")) {

10. mWifiStateTracker.notifyDriverHung();

11. }

12.}

Frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java

[java]view plaincopy

1....

2.case EVENT_DRIVER_STATE_CHANGED:

3.switch(msg.arg1) {

4.case DRIVER_STARTED:

5.

6. setNumAllowedChannels();

7.synchronized (this) {

8.if (mRunState == RUN_STATE_STARTING) {

9. mRunState = RUN_STATE_RUNNING;

10.if (!mIsScanOnly) {

11. reconnectCommand();

12. } else {

13.// In somesituations, supplicant needs to be

kickstarted to

14.// start thebackground scanning

15. scan(true);

16. }

17. }

18. }

19.break;

20....

上面是启动Wifi时,自动进行的AP的扫描,用户当然也可以手动扫描AP,这部分实现在WifiService里面,WifiService通过startScan()接口函数发送扫描命令到supplicant。

看代码:Frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java

[java]view plaincopy

1.public boolean startScan(booleanforceActive) {

2. enforceChangePermission();

3.switch (mWifiStateTracker.getSupplicantState()) {

4.case DISCONNECTED:

5.case INACTIVE:

6.case SCANNING:

7.case DORMANT:

8.break;

9.default:

10. mWifiStateTracker.setScanResultHandling(

11. WifiStateTracker.SUPPL_SCAN_HANDLING_LIST_ONLY);

12.break;

13. }

14.return mWifiStateTracker.scan(forceActive);

15.}

然后下面的流程同上面的自动扫描,我们来分析一下手动扫描从哪里开始的。我们应该知道手动扫描是通过菜单键的扫描键来响应的,而响应该动作的应该是WifiSettings类中Scanner类的handlerMessage()函数,它调用WifiManager的startScanActive(),这才调用WifiService的startScan()。

如代码:packages/apps/Settings/src/com/android/settings/wifiwifisettings.java

[java]view plaincopy

1.public boolean onCreateOptionsMenu(Menu menu) {

2. menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.wifi_menu_scan)

3. .setIcon(R.drawable.ic_menu_scan_network);

4. menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.wifi_menu_advanced)

5. .setIcon(android.R.drawable.ic_menu_manage);

6.return super.onCreateOptionsMenu(menu);

7.}

当按下菜单键时,WifiSettings就会调用这个函数绘制菜单。如果选择扫描按钮,WifiSettings 会调用onOptionsItemSelected()。

packages/apps/Settings/src/com/android/settings/wifiwifisettings.java

1.public booleanonOptionsItemSelected(MenuItem item) {

2.switch (item.getItemId()) {

3.case MENU_ID_SCAN:

4.if(mWifiManager.isWifiEnabled()) {

5. mScanner.resume();

6. }

7.return true;

8.case MENU_ID_ADVANCED:

9. startActivity(new Intent(this,AdvancedSettings.class));

10.return true;

11. }

12.return super.onOptionsItemSelected(item);

13.}

Handler类:

1.private class Scanner extends Handler {

2.private int mRetry = 0;

3.void resume() {

4.if (!hasMessages(0)) {

5. sendEmptyMessage(0);

6. }

7. }

8.void pause() {

9. mRetry = 0;

10. mAccessPoints.setProgress(false);

11. removeMessages(0);

12. }

13.@Override

14.public void handleMessage(Message message) {

15.if (mWifiManager.startScanActive()){

16. mRetry = 0;

17. } else if (++mRetry >= 3) {

18. mRetry = 0;

19. Toast.makeText(WifiSettings.this, R.string.wifi_fail_to_scan,

20. Toast.LENGTH_LONG).show();

21.return;

22. }

23. mAccessPoints.setProgress(mRetry != 0);

24. sendEmptyMessageDelayed(0, 6000);

25. }

26.}

这里的mWifiManager.startScanActive()就会调用WifiService里的startScan()函数,下面的流程和上面的一样,这里不赘述。

当supplicant完成了这个扫描命令后,它会发送一个消息给上层,提醒他们扫描已经完成,WifiMonitor会接收到这消息,然后再发送给WifiStateTracker。

Frameworks/base/wifi/java/android/net/wifi/WifiMonitor.java

1.void handleEvent(int event, String remainder) {

2.switch (event) {

3. caseDISCONNECTED:

4. handleNetworkStateChange(NetworkInfo.DetailedState.DISCON

NECTED,remainder);

5.break;

6.case CONNECTED:

7. handleNetworkStateChange(NetworkInfo.DetailedState.CONNEC

TED,remainder);

8.break;

9.case SCAN_RESULTS:

10. mWifiStateTracker.notifyScanResultsAvailable();

11.break;

12.case UNKNOWN:

13.break;

14. }

15.}

WifiStateTracker将会广播SCAN_RESULTS_AVAILABLE_ACTION消息:

代码如:Frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java

1.public voidhandleMessage(Message msg) {

2. Intent intent;

3.……

4.case EVENT_SCAN_RESULTS_AVAILABLE:

5.if(ActivityManagerNative.isSystemReady()) {

6. mContext.sendBroadcast(new Intent(WifiManager.SCAN_RESUL

TS_AVAILABLE_ACTION));

7. }

8. sendScanResultsAvailable();

9.

10. setScanMode(false);

11.break;

12.……

13.}

由于WifiSettings类注册了intent,能够处理SCAN_RESULTS_AVAILABLE_ACTION消息,它会调用handleEvent(),调用流程如下所示。

WifiSettings.handleEvent() ====>WifiSettings.updateAccessPoints() ====> mWifiManager.getS canResults()====> mService.getScanResults()====>mWifiStateTracker.scanResults() ====> W ifiNative.scanResultsCommand()……

将获取AP列表的命令发送到supplicant,然后supplicant通过Socket发送扫描结果,由上层接收并显示。这和前面的消息获取流程基本相同。

(三)配置,连接AP

当用户选择一个活跃的AP时,WifiSettings响应打开一个对话框来配置AP,比如加密方法和连接AP的验证模式。配置好AP后,WifiService添加或更新网络连接到特定的AP。

代码如:packages/apps/settings/src/com/android/settings/wifi/WifiSetttings.java

1.public booleanonPreferenceTreeClick(PreferenceScreen screen, Preference pref

erence) {

2.if (preference instanceof AccessPoint) {

3. mSelected = (AccessPoint) preference;

4. showDialog(mSelected, false);

5. } else if (preference == mAddNetwork) {

6. mSelected = null;

7. showDialog(null, true);

8. } else if (preference == mNotifyOpenNetworks) {

9. Secure.putInt(getContentResolver(),

10. Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,

11. mNotifyOpenNetworks.isChecked() ? 1 : 0);

12. } else {

13.return super.onPreferenceTreeClick(screen, preference);

14. }

15.return true;

16.}

配置好以后,当按下“Connect Press”时,WifiSettings通过发送LIST_NETWORK命令到supplicant来检查该网络是否配置。如果没有该网络或没有配置它,WifiService调用addorUpdateNetwork()函数来添加或更新网络,然后发送命令给supplicant,连接到这个网络。下面是从响应连接按钮到WifiService发送连接命令的代码:

packages/apps/settings/src/com/android/settings/wifi/WifiSetttings.java

[java]view plaincopy

1.public void onClick(DialogInterfacedialogInterface, int button) {

2.if (button == WifiDialog.BUTTON_FORGET && mSelected != null) {

3. forget(https://www.sodocs.net/doc/0311906694.html,workId);

4. } else if (button == WifiDialog.BUTTON_SUBMIT && mDialog !=null) {

5. WifiConfiguration config = mDialog.getConfig();

6.if (config == null) {

7.if (mSelected != null&& !requireKeyStore(mSelected.getConfig

())) {

8. connect(https://www.sodocs.net/doc/0311906694.html,workId);

9. }

10. } else if (https://www.sodocs.net/doc/0311906694.html,workId != -1) {

11.if (mSelected != null) {

12. mWifiManager.updateNetwork(config);

13.

14. saveNetworks();

15. }

16. } else {

17.int networkId =mWifiManager.addNetwork(config);

18.if (networkId != -1) {

19. mWifiManager.enableNetwork(networkId, false);

20. https://www.sodocs.net/doc/0311906694.html,workId =networkId;

21.if (mDialog.edit || requireKeyStore(config)){

22. saveNetworks();

23. } else {

24. connect(networkId);

25. }

26. }

27. }

28. }

29.}

Frameworks\base\wifi\java\android\net\wifi\WifiManager.java

1.public intupdateNetwork(WifiConfiguration config) {

2.if(config == null || https://www.sodocs.net/doc/0311906694.html,workId < 0) {

3.return -1;

4. }

5.return addOrUpdateNetwork(config);

6.}

7.private intaddOrUpdateNetwork(WifiConfiguration config) {

8.try {

9.return mService.addOrUpdateNetwork(config);

10. } catch (RemoteException e) {

11.return -1;

12. }

13.}

WifiService.addOrUpdateNetwork()通过调用mWifiStateTracker.setNetworkVariable()将连接命令发送到Wpa_supplicant。

(四)获取IP地址

当连接到supplicant后,WifiMonitor就会通知WifiStateTracker。

代码如:Frameworks/base/wifi/java/android/net/wifi/WifiMonitor.java

1.Public void Run(){

2.if (connectToSupplicant()) {

3.// Send a message indicatingthat it is now possible to send

commands

4.// to the supplicant

5. mWifiStateTracker.notifySupplicantConnection();

6. } else {

7. mWifiStateTracker.notifySupplicantLost();

8.return;

9. }

10.……

11.}

WifiStateTracker发送EVENT_SUPPLICANT_CONNECTION消息到消息队列,这个消息有自己的handlermessage()函数处理,它会启动一个DHCP线程,而这个线程会一直等待一个消息事件,来启动DHCP协议分配IP地址。

frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java

1.void notifySupplicantConnection() {

2. sendEmptyMessage(EVENT_SUPPLICANT_CONNECTION);

3.}

4.public void handleMessage(Message msg) {

5. Intent intent;

6.switch (msg.what) {

7.case EVENT_SUPPLICANT_CONNECTION:

8.……

9. HandlerThread dhcpThread = newHandlerThread("DHCP Handler Threa

d");

10. dhcpThread.start();

11. mDhcpTarget = newDhcpHandler(dhcpThread.getLooper(), this);

12.……

13.……

14."code"class="java"> case EVENT_NETWORK_STATE_CHANGED:

15.……

16. configureInterface();

17.……

18. }}

19."code"class="java">private void configureInterface() {

20. checkPollTimer();

21. mLastSignalLevel = -1;

22.if(!mUseStaticIp) { //使用DHCP线程动态IP

23.if(!mHaveIpAddress && !mObtainingIpAddress) {

24. mObtainingIpAddress = true;

25.//发送启动DHCP线程获取IP

26. mDhcpTarget.sendEmptyMessage(EVENT_DHCP_START);

27. }

28. } else { //使用静态IP,IP信息从mDhcpInfo中获取

29. intevent;

30.if(NetworkUtils.configureInterface(mInterfaceName, mDhcpInfo)) {

31. mHaveIpAddress = true;

32. event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED;

33.if (LOCAL_LOGD) Log.v(TAG, "Static IP configurationsucceeded"

);

34. }else {

35. mHaveIpAddress = false;

36. event = EVENT_INTERFACE_CONFIGURATION_FAILED;

37.if (LOCAL_LOGD) Log.v(TAG, "Static IP configuration failed");

38. }

39. sendEmptyMessage(event); //发送IP获得成功消息事件

40. }

41.当Wpa_supplicant连接到AP后,它会发送一个消息给上层来通知连接成功,WifiMonitor会

接受到这个消息并上报给WifiStateTracker。

42.Frameworks/base/wifi/java/android/net/wifi/WifiMonitor.java

43."code"class="java">void handleEvent(int event, String remainder) {

44.switch (event) {

45.case DISCONNECTED:

46. handleNetworkStateChange(NetworkInfo.DetailedState.DISCON

NECTED,remainder);

47.break;

48.case CONNECTED:

49. handleNetworkStateChange(NetworkInfo.DetailedState.CONNEC

TED,remainder);

50.break;

51.……

52. }

53.private void handleNetworkStateChange(NetworkInfo.DetailedState newState, St

ring data) {

54. StringBSSID = null;

55. intnetworkId = -1;

56.if(newState == NetworkInfo.DetailedState.CONNECTED) {

57. Matcher match = mConnectedEventPattern.matcher(data);

58.if(!match.find()) {

59.if (Config.LOGD) Log.d(TAG, "Could not find BSSID in CONNECTE

Devent string");

60. }else {

61. BSSID = match.group(1);

62.try {

63. networkId = Integer.parseInt(match.group(2));

64. } catch (NumberFormatException e) {

65. networkId = -1;

66. }

67. }

68. }

69. mWifiStateTracker.notifyStateChange(newState,BSSID, networkId);

70.}

71.void notifyStateChange(DetailedState newState, StringBSSID, int networkId) {

72. Messagemsg = Message.obtain(

73.this, EVENT_NETWORK_STATE_CHANGED,

74. newNetworkStateChangeResult(newState, BSSID, networkId));

75. msg.sendToTarget();

76.}

77.DhcpThread获取EVENT_DHCP_START消息事件后,调用handleMessage()函数,启动DHCP

获取IP地址的服务。

78.frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java

79.

80."code"class="java">public void handleMessage(Message msg) {

81. intevent;

82.switch (msg.what) {

83.case EVENT_DHCP_START:

84.……

85. Log.d(TAG, "DhcpHandler: DHCP requeststarted");

86.//启动一个DHCPclient的精灵进程,为mInterfaceName请求分配一个IP地//址

87.if (NetworkUtils.runDhcp(mInterfaceName, mDhcpInfo)) {

88. event= EVENT_INTERFACE_CONFIGURATION_SUCCEEDED;

89.if(LOCAL_LOGD) Log.v(TAG, "DhcpHandler: DHCP request succeeded");

90. } else {

91. event= EVENT_INTERFACE_CONFIGURATION_FAILED;

五、WIFI连接流程分析

Wifi 连接部分

当用户选择一个AP时会弹出一个AP参数配置对话框,此对话框会显示当前选择的AP信号强度,若此AP设置了密码则需要用户输入密码才能登录。WifiSettings中

的onPreferenceTreeClick会被调用@Override

public boolean onPreferenceTreeClick(PreferenceScreen screen,Preference prefere nce){

//点击AP响应函数

if(preference instanceof AccessPoint){

mSelected=(AccessPoint)preference;

showDialog(mSelected,false);

Word绘制精美流程图公开课教案

Word绘制流程图教案 授课人:*** 课时:1课时 教学对象:高一(1)班 教学目标:掌握插入图形的方法,掌握流程图的美化,掌握艺术字的使用,页面及段落的相 关设置。 知识目标和能力目标:熟悉图形的对齐和分布,熟悉连接符的使用,熟悉三维效果样式的设 置。 情感态度目标:能够熟练应用前面学过的知识点绘制流程图,提高学生学习计算机应用的兴 趣。 教学重点:掌握插入图形的方法,掌握流程图的美化,掌握艺术字的使用,页面及段落的相 关设置。 教学难点:图形的对齐分布设置,三维效果样式设置,连接符的使用。 难点突破:课堂讲解,任务驱动 教学地点:3楼新机房 学生分析:通过前面的学习对word已经不陌生。高一(1)班的学生女生占多数,学生上课 认真,思维活跃,但计算机水平和知识迁移能力参差不齐。 教学过程: 情境导入: 在日常工作中,为了表达某个业务的过程或流程,常常需要绘制流程图。我们可以使用比较 经典的流程图绘制工具,比如Visio;也可以使用Word自带的流程图绘制工具。使用图形 表示流程是一种极好的方法,因为千言万语不如一张图。 展示本节课要绘制的流程图。 详细步骤讲解: 步骤一:页面和段落的设置 选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中, 设置上下边距为“1厘米”,左右边距为“2厘米” 步骤二:制作流程图的标题 用矩形工具绘制标题背景,填充颜色,设置边框线条颜色为无。往矩形背景插入艺术字. 调整矩形框大小,输入“毕业论文写作流程图”文字,并将其字体设置为“宋体”、“小二”、“加粗”,对齐方式为“右对齐” . 毕业论文写作流程图

步骤三:绘制流程图框架 1.从“自选图形”——“流程图”里选择相应形状绘制流程图框架,如下图所示,并输入文字,如果觉得流程图里的文字的位置过于靠近底部,则可以适当调整它的段前距为0.5行。 按Shift键依次选中左边第一列图形,单击窗口底部“绘图”工具栏上的“绘图”按钮,依次选择“对齐或分布→水平居中”命令,将所有选中的图形“水平居中”对齐:

北京精雕- 自动油脂润滑系统使用维护说明书

定量式自动油脂润滑系统使用维护说明书 目前我司设备的润滑系统有两种形式:稀油润滑和油脂润滑。它们在使用上各有利弊。稀油润滑可以容易地实现自动润滑,而且由于润滑油的流动性好,在润滑的同时还可以带出粉尘异物;但是也会带来润滑油滴流的问题,造成工件和加工环境的污染。油脂润滑可以很好地避免润滑油滴流的问题,但不宜实现自动润滑。 现在推出了一种稀脂自动润滑系统,这种稀脂润滑系统使用的是00#极压锂基脂,它的流动性介于润滑油和普通锂基脂之间,既可以实现定时自动润滑,又不会发生润滑油的滴流现象,是一种比较理想的润滑系统。 由于自动脂润滑系统需要比较高的系统压力(最高压力可达10MPa),因此,该系统无论是油泵、油管还是计量件都与过去的稀油润滑系统有很大的区别。下面就以CarverPMS_A TC_G(厂家:浙江流遍)为例,来介绍自动脂润滑系统的使用及维护,以便各部门及分公司进行维护保养工作。 一、系统的组成 浙江流遍型自动油脂润滑系统主体采用的是DBS-J20-08D型电动卸压式油脂润滑泵(220V)和MG型定量加压式油脂分配器,并添加00#极压锂基脂。它主要由油脂润滑泵组件、Y轴油脂分油器组件、机头油脂分油器组件、两根可拆卸式高压油管组成。 润滑系统安装到机床上后,各位置如下:润滑泵组件如图1所示,Y 图1 浙江流遍型润滑泵组件安装位置 图2 浙江流遍型Y轴润滑油排安装位置 轴润滑油排如图2所示,X和Z轴润滑油排如图3所示。 图3 浙江流遍型X和Z轴润滑油排安装位置

二、分配器流量及加脂周期 本系统采用的分配器是定量式分配器,在一个供油周期内(即通、断电一次)分配器仅排油一次,并与分配器的安装位置无关。 CarverPMS_A TC_G整个润滑系统总共有16个润滑点,其中12个导轨滑块润滑点,3个丝杠润滑点,1个刀库润滑点。如图7、8所示,导轨滑块和刀库采用MG-05型定量加压式油脂分配器,泵油一次的油量为0.05ml;丝杠采用MG-10型定量加压式油脂分配器,泵油一次的油量为0.1ml。故润滑油泵泵油一次的总流量为0.95ml。 在软件中,这两种机型的泵油频率都设置为:开机泵油一次,然后每隔8小时泵油一次。 注意:公司于2011.10.26下发关于推出机床全行程润滑功能的说明的技术通知单,在客户处全面推行机床全行程润滑保养工作。这是在上述加油频率之外的额外给油,故在计算润滑泵加油周期时需特别考虑。每家客户的保养频率和相关参数设置都不尽相同,有关详情,参看《机床自动运行功能说明20111026》。 浙江流遍润滑泵的容量为0.6L,在不考虑机床全行程润滑保养的前提下,按理论计算:若机床24小时运转,则润滑泵每隔6个月需添加一次润滑油脂;在考虑机床全行程润滑保养的前提下,加脂周期大概会缩短50%,甚至更多,但每家客户的具体情况有所差异,应自行予以注意。当达到最低液位线时,机床会自动报警,提示添加润滑脂,添加方法见后面介绍。 图7 浙江流遍型Y轴润滑油排及分配器牌号 图8 浙江流遍型X轴、Z轴润滑油排及分配器牌号 三、油脂润滑泵组件的结构、连线及加油方法 1、油脂润滑泵组件的结构 油脂润滑泵组件主要由润滑泵主体、滤油器、压力表、压力开关(24V电源)、接线盒、出油口等组成。泵体上有放气阀、调压阀;滤油器上有加油口,如图11所示。润滑泵电缆线与电控柜的连接都如图12所示。高压油管与润滑泵的连接如图1所示。 图11 浙江流遍型润滑泵组件结构(最新) 图12 电缆线的连接 2、添加油脂方法 本润滑系统采用的润滑脂是00#极压锂基脂(推荐厂商:长城、美孚Mobil LUX EP 004)。

软件系统测试报告模板

技术资料 [项目名称] 系统测试报告 1测试内容及方法 1.1测试内容 本次测试严格按照《软件系统测试计划》进行,包括单元测试、集成测试、系统测试、用户接受度测试等内容。 1.2测试方法 正确性测试策略、健壮性测试策略、接口测试策略、错误处理测试策略、安全性测试策略、界面测试策略 1.3测试工作环境 1.3.1硬件环境 服务端 数据服务器: 处理器:Inter(R) Xeon(R) CPU E5410 @2.33GHz×2 操作系统:Windows Server 2003 Enterprise Edition SP2 内存空间:8G 硬盘空间:500G×2,RAID0 应用服务器: 处理器:Inter(R) Xeon(R) CPU E5410 @2.33GHz×2 操作系统:Windows Server 2003 Enterprise Edition SP2 内存空间:8G 硬盘空间:500G×2,RAID0 客户端 处理器:Inter(R) Core?2 Quad CPU Q6600 @2.4GHz

操作系统:Windows Server 2003 R2 Enterprise Edition SP2 内存空间:2G 硬盘空间:200G 1.3.2软件环境 操作系统:Windows Server 2003 R2 Enterprise Edition SP2 客户端浏览器:Internet Explorer 6.0/7.0 GIS软件:ArcGIS Server 9.3 WEB服务:IIS6.0 2缺陷及处理约定 2.1缺陷及其处理 2.1.1缺陷严重级别分类 严重程度修改紧急 程度 评定准则实例 高必须立即 修改 系统崩溃、不稳定、 重要功能未实现 1、造成系统崩溃、死机并且不能通过其它方法实现功能; 2、系统不稳定,常规操作造成程序非法退出、死循环、通讯中断或异 常,数据破坏丢失或数据库异常、且不能通过其它方法实现功能。 3、用户需求中的重要功能未实现,包括:业务流程、主要功能、安全 认证等。 中必须修改系统运行基本正 常,次要功能未实 现 1、操作界面错误(包括数据窗口内列名定义、含义不一致)。 2、数据状态变化时,页面未及时刷新。 3、添加数据后,页面中的内容显示不正确或不完整。 4、修改信息后,数据保存失败。 5、删除信息时,系统未给出提示信息。 6、查询信息出错或未按照查询条件显示相应信息。 7、由于未对非法字符、非法操作做限制,导致系统报错等,如:文本 框输入长度未做限制;查询时,开始时间、结束时间未做约束等。 8、兼容性差导致系统运行不正常,如:使用不同浏览器导致系统部分 功能异常;使用不同版本的操作系统导致系统部分功能异常。 低可延期修 改 界面友好性、易用 性、交互性等不够 良好 1、界面风格不统一。 2、界面上存在文字错误。 3、辅助说明、提示信息等描述不清楚。 4、需要长时间处理的任务,没有及时反馈给用户任务的处理状态。 5、建议类问题。

word轻松画工作流程图

II、具体操作步骤 一、步骤一:页面的设置 (一)目的:使流程图具有较大绘制空间。 (二)具体设置方法 文件→页面设置→页面设置对话框【页边距(上下边距:1厘米;左右边距:2厘米)→确定】 二、步骤二:制作流程图的标题 (一)创建矩形 单击“矩形”按钮(位于Word窗口底部)→显现“在此处创建图形。”画布→绘制矩形(宽度与画布一致,高度为3厘米)→右击矩形框(已绘制)→设置自选图形格式→设置自选图形格式对话框【颜色与线条→填充(颜色…;透明度:50%)→线条(颜色:无线条颜色)→确定】 (二)插入文字内容 右击矩形框(已绘制)→添加文字→插入→图片→艺术字→艺术字库对话框【选择第2行第2种→确定】→编辑“艺术字”文字对话框【黑体;20→确定】→回车换行→输入“毕业论文写作流程图”(宋体,小二,加粗,右对齐) 三、步骤三:绘制流程图框架 单击“自选图形”按钮→流程图→流程图:准备→显现“在此处创建图形。”画布→绘制“准备”图形(在画布内)→右击“准备”框→添加文字→输入“准备”(段前:0.5行;居中)→拖动画布右下角控制点至页面底部边缘(目的:容纳流程图其它图形)→用同样方法绘制其它图形并输入相应文字内容 四、步骤四:流程图的对齐与修饰 选中左侧竖直一系列图形(可结合Shift键)→绘图→对齐或分布→水平居中→选中右侧水平一系列图形(可结合Shift键)→绘图→对齐或分布→垂直居中→选中所有图形→单击“三维效果样式”按钮→三维样式1→三维设置 →“三维设置”工具条(深度→自定义:12磅)→右击“开始”图形→设置自选图形格式→设置自选图形格式对话框【颜色与线条→颜色…→确定】→同样方法对其它图形做类似设置 五、步骤五:添加连接箭头 单击“自选图形”按钮→连接符→直接箭头连接符→单击“自选图形”按钮→连接符→肘形箭头连接符→之后在连接符中间插入“矩形”框(添加文字;无线条颜色)

简单六步 Word 2010轻松搞定工作流程图

简单六步 Word 2010轻松搞定工作流程图 2010-07-14 10:13:11 wordhome 摘要:在Word2010文档中,利用自选图形库提供的丰富的流程图形状和连接符可以制作各种用途的流程图,制作步骤如下所述。 在Word2010文档中,利用自选图形库提供的丰富的流程图形状和连接符可以制作各种用途的流程图,制作步骤如下所述: 第1步:打开Word2010文档窗口,切换到“插入”功能区。在“插图”分组中单击“形状”按钮,并在打开的菜单中选择“新建绘图画布”命令,如图1所示。

图1 选择“新建绘图画布”命令 小提示:也可以不使用画布,而只直接在Word2010文档页面中直接插入形状。 第2步:选中绘图画布,在“插入”功能区的“插图”分组中单击“形状”按钮,并在“流程图”类型中选择插入合适的流程图。例如选择“流程图:过程”和“流程图:决策”,如图2所示。

图2 选择插入流程图形状 第3步:在Word2010“插入”功能区的“插图”分组中单击“形状”按钮,并在“线条”类型中选择合适的连接符,例如选择“箭头”和“肘形箭头连接符”,如图3所示。

图3 选择连接符 第4步:将鼠标指针指向第一个流程图图形(不必选中),则该图形四周将出现4个红色的连接点。鼠标指针指向其中一个连接点,然后按下鼠标左键拖动箭头至第二个流程图图形,则第二个流程图图形也将出现红色的连接点。定位到其中一个连接点并释放左键,则完成两个流程图图形的连接,如图4所示。

图4 Word2010中连接流程图图形 第5步:重复步骤3和步骤4连接其他流程图图形,成功连接的连接符两端将显示红色的圆点,如图5所示。

android课程介绍

1.课程基本信息 课程编号:M21F58D10 课程名称:Android应用与开发 开设学期:第3学期 总学时:60 总学分:4 课程类别:岗位能力课程课程性质:必修课 适用专业:软件技术(移动应用开发) 责任单位:计算机与软件学院 2.课程定位 《Android应用与开发》课程是软件技术(移动应用开发方向)专业的岗位能力课程,课程的开设依据是软件技术专业人才培养目标和相关职业岗位(群)的能力要求,对本专业所面向的手机软件开发与测试、软件开发与项目管理等岗位所需要的知识、技能和素质目标的达成起支撑作用。 在课程设置上,前导课程有《Java程序设计》(M21F1611),《数据结构》(M21F232),后续课程有《移动互联网开发综合实训》(M21J57B10)、《毕业实习》(M21J991)。 3.课程设计思路 首先依据专业人才培养方案中关于人才培养目标的阐述,明确课程目标;其次,结合职业教育课程观、教学观、能力观,基于软件工程的开发过程,以项目化教学来组织课程内容,在课程内容的选择与排序中,以软件项目研发的不同阶段、典型任务为载体,将课程内容划分为互相联系的学习情景;第三,通过对各学习情景中学习目标、主要内容、授课方式、师生要求等各项内容的描述,来规范课程所要求的内容;第四,通过对课程内容的选取和组合,以一个完整的项目为载体,完成课程的实施;最后,通过对项目实施过程中各个环节的考察和评价,来完成对课程的评鉴与考核。 本课程在设计上本着懂方法,重应用的总体思路,突出体现职业教育的技能型、应用性特色,着重培养学生的实践应用技能,力求达到理论方法够用,技术技能过硬的目的。 4.课程建设基本理念 本课程按照理论实践一体、课内外互补、课堂教学与培优工程相结合的课程设计指导思想,以任务或项目为载体组织教学内容,突出学生的主体地位,实现“教、学、做”的有机融合;通过班级讲授、团队学习、个体辅导、展示交流、技能大赛等手段,实现从模仿到应用到创新的高职学生递进式培养。 本课程强调对学生职业岗位能力的培养和职业素养的养成,针对不同环节,采用特定的教学方法,有意识、有步骤地将职业能力的训练和职业素养的形成融入到实际的教学过程中。

ZDRH-2000智能集中润滑系统说明书

目录 一、系统简介------------------------------------2 二、系统工作原理------------------------------3 三、系统主要部件的基本配置与技术 参数-----------------------------------------11 四、润滑系统工作制度-----------------------13 五、润滑系统操作规程-----------------------14 六、系统维护与注意事项--------------------22

一、系统简介 ZDRH-2000型智能集中润滑系统是我公司研制开发的新一代高新润滑技术产品(专利号:012402260.5),系国内首创。该润滑系统可根椐设备现场温度、环境等不同条件或设备各部位润滑要求的不同,而采用不同油脂,适应单台设备或多台设备的各种润滑要求。 润滑系统突出优点是在设备配置、工作原理、结构布置上都做了最大的改进,改变了以往以单线或双线为主的传统润滑方式,采用微电脑技术与可编程控制器相结合的方式,使设备润滑进入一个新的里程。系统中主控设备、高压电动油泵、电磁给油器、流量传感器、压力传感器等每一个部件都是经过精心研制并专为智能润滑系统所设计的。 设备采用SIEMENS S7-200系列可编程控制器作为主要控制系统,为润滑智能控制需求提供了最恰当的解决办法,可网络挂接与上位机计算机系统进行连接以实时监控,使得润滑状态一目了然;现场供油分配直接受可编程控制器的控制,供油量大小,供油循环时间的长短都由主控系统来完成;流量传感器实时检测每个润滑点的运行状态,如有故障及时报警,且能准确判断出故障点所在,便于操作工的维护与维修。操作员可根据设备各点润滑要求的不同,通过文本显示器远程调整供油参数,以适应烧结机的润滑要求。整个润滑系统的供油部分,通过公司最新研制的

教你如何利用WORD制作漂亮的流程图

教你如何利用WORD制作漂亮的流程图 在日常的很多实际任务中,我们可能需要表达某个工作的过程或流程。有些工作的过程比较复杂,如果你仅仅用文字表达,通常是很难描述清楚的。与此同时,听者也难于搞懂,在这种情况下,最好的方式就是绘制工作流程图,图形的直观性会让双方都大大获益。 笔者曾经介绍过用MS VISIO 2002制作工作流程图的方法(请参阅《用Visio做工作流程图》),但是很多朋友反映自己的电脑上并没有安装VISIO,而且对VISIO还有种陌生感。为了便于更多的朋友轻松地制作工作流程图,下面我们介绍利用Word制作漂亮工作流程图的方法。 任务要求:这里我们还是以制作毕业论文写作流程图为例,该工作流程图表达的是数理信息学院毕业生毕业论文的制作过程。 为了让朋友们对制作目标有个大概的了解,下面先来看一下完成后的效果图(图 1)。 制作共包括以下步骤: 步骤一:页面和段落的设置 步骤二:制作流程图的标题 步骤三:绘制流程图框架 步骤四:流程图的对齐与修饰 步骤五:添加连接箭头 步骤六:添加折线连接符和说明性文字 为了提高工作流程图的制作效率,在具体制作之前应该先在头脑中构思一下流程图的大概效果,最好能够在稿纸上把效果图画出来,这往往比边想边做要快很多。 在纸上画好草图之后,我们就可以打开Word 2003进行具体的制作了,本例的操作是在Word 2003中进行的,使用Word其它版本的朋友可以参照进行。 步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图 2),完成后单击“确定”按钮。

Android平台介绍及使用指导

Android平台介绍及使用指导 二○一○年二月 版本 1.0

目录 Android平台介绍 ................................................................................... - 4 -基本名词...................................................................................................................... - 5 - 操作方法介绍 .......................................................................................... - 6 - 手机按键介绍.............................................................................................................. - 6 - 快捷键介绍.................................................................................................................. - 6 - 信息功能介绍.............................................................................................................. - 7 - 联系人功能介绍........................................................................................................ - 11 - 通话记录功能介绍.................................................................................................... - 14 - 文本粘贴/复制功能介绍.......................................................................................... - 14 - Push Email(Moxier)功能介绍............................................................................ - 15 - 电子邮件功能介绍.................................................................................................... - 16 - 桌面功能介绍............................................................................................................ - 19 - 蓝牙功能介绍............................................................................................................ - 23 - Wifi功能介绍........................................................................................................... - 23 - 飞行模式功能介绍.................................................................................................... - 23 - CDMA数据链接介绍................................................................................................... - 24 - 黑屏解锁功能............................................................................................................ - 25 - 回复出厂设置............................................................................................................ - 26 - 应用程序设置............................................................................................................ - 26 - GPS设置..................................................................................................................... - 27 - 手机中英文语言切换................................................................................................ - 28 - 更换手机输入法........................................................................................................ - 29 - 数据线链接Android手机........................................................................................ - 29 - 手机测试模式进入方法............................................................................................ - 30 - 横屏显示介绍............................................................................................................ - 30 - 浏览器功能介绍........................................................................................................ - 31 - RSS功能介绍............................................................................................................ - 32 - Q/A- 34 -

干油润滑系统使用说明

宁波北仑DQ4200/4200.42堆取料机干油集中润滑系统 技术说明

目录 1系统技术参数及工作原理………………STI 2 2典型双线系统工作原理……………………STI 4 3FYK分油块…………………………………STI 6 4DRB泵………………………………………STI 8 5SSP双线分配器………………………………STI 16 6YCK-M5压差开关……………………………STI 19 1.系统技术参数及工作原理 宁波北仑DQ4200/4200.42堆取料机干油集中电动润滑系统润滑点部位包括:大车集中润滑系统和回转集中润滑系统.其余润滑系统均采用分油块润滑系统. 大车集中润滑系统原理图 回转集中润滑系统原理图 电动双线集中润滑系统:整个系统由电动干油润滑泵、双线分配器、连接管路和接头等组成。 2.典型双线系统工作原理 润滑泵开始工作后,泵不断地从贮油桶中吸入油 脂,从出油口压出油脂。泵排出的 压力油脂经液动换向阀进入主管1,送至各分配器。此 时,主管2通过XYDF型液动换向阀与回油管相连,处 图A

于卸荷状态。主管1中的油脂进入各分配器的上部进油口(图A所示),利用上部进油口处的压力油推动分配器中的所有活向下运动,并将活塞下腔的油经分配器的下出油口2,定量地送入各润滑点。当所有分配器的下出油口一次送油结束后(即所有分配器中的供油活塞下行到活塞行程的末端停止运动后),主管 1中的压力将迅速上升,当压力达到额定压力后,换 向阀换向。 换向阀换向后,润滑泵输出的压力油进入主管 2,同时主管1卸荷,各分配器的下进油口进油(图B 所示),分配器中的活塞向上运动,将活塞上腔的油 经分配器的上出油口1,定量地送入各润滑点。当所 有分配器的上出油口一次送油结束后,主管2的压力 上升,当压力达到额定压力后,换向阀换向。这样系 统就完成了一次循环,每个润滑点均得到了一次定量 的润滑油脂。 分油块示意图 3.FYK型分油块 用途及特点 分油块有结构紧凑、体积小、安装补脂方便的特点。FYK型分油块是我公司为手动集中供油而设计的一种给油装置。 FYK型分油块分为两种形式,按出油口数量分,又各有8种规格。该分油块通常与油枪或移动式加油泵车配合使用,广泛应用在港口机械、冶金设备等手动集中润滑系统中。 规格型号及技术参数 FYK-A型FYK-B型 规格型号出油口数L1 L2 重量Kg 安装螺钉规格进、出油口螺纹D FYK-A-1 1 80 — 1 GB 70-85 内六角圆柱头螺钉 M10X40 标准产品为Rc1/4 可根据用户要求定 制加工 FYK-A-2 2 110 80 1.3 FYK-A-3 3 140 110 1.7 FYK-A-4 4 170 140 2 FYK-A-5 5 200 170 2.5 图B

软件系统测试报告模板

[项目名称] 系统测试报告 1测试内容及方法 1.1测试内容 本次测试严格按照《软件系统测试计划》进行,包括单元测试、集成测试、系统测试、用户接受度测试等内容。 1.2测试方法 正确性测试策略、健壮性测试策略、接口测试策略、错误处理测试策略、安全性测试策略、界面测试策略 1.3测试工作环境 1.3.1硬件环境 服务端 数据服务器: 处理器:Inter(R) Xeon(R) CPU E5410 @2.33GHz X 2 操作系统:Windows Server 2003 Enterprise Edition SP2 内存空间:8G 硬盘空间:500G X 2 , RAIDO 应用服务器: 处理器:Inter(R) Xeon(R) CPU E5410 @2.33GHz X 2 操作系统:Windows Server 2003 Enterprise Edition SP2 内存空间:8G 硬盘空间:500G X 2 , RAID0 客户端 处理器:Inter(R) Core ? 2 Quad CPU Q6600 @2.4GHz 操作系统:Windows Server 2003 R2 Enterprise Edition SP2

内存空间:2G 硬盘空间:200G 1.3.2软件环境 操作系统:Windows Server 2003 R2 Enterprise Edition SP2 客户端浏览器:In ternet Explorer 6.0/7.0 GIS 软件:ArcGIS Server 9.3 WEB 服务:IIS6.0 2缺陷及处理约定 2.1缺陷及其处理 2.1.1缺陷严重级别分类

WORD制作工作流程图

为了提高工作流程图的制作效率,在具体制作之前应该先在头脑中构思一下流程图的大概效果,最好能够在稿纸上把效果图画出来,这往往比边想边做要快很多。 在纸上画好草图之后,我们就可以打开Word 2003进行具体的制作了,本例的操作是在Word 2003中进行的,使用Word其它版本的朋友可以参照进行。 步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图2),完成后单击“确定”按钮。

2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。 步骤二:制作流程图的标题 基本工作环境设置好之后就开始制作流程图的标题。大家看到的最终效果中的标题是放在一个矩形自选图形中的,下面开始制作。 1.在窗口Word窗口底部的自选图形工具栏中选择“矩形”按钮(图 4)。

2.这时可以在页面中看到“在此创建图形”的画布,接着拖动鼠标,在该画布中绘制矩形,让矩形的宽度与画布相同,高度可参照最终效果图,约3厘米。 3.画好后调整画布的高度,使之与矩形的高度相同(图 5)。 4.接下来选中插入的矩形,单击鼠标右键,在弹出的菜单中选择“设置自选图形格式”命令,打开“设置自选图形格式”对话框,在“颜色与线条”选项卡中,先设置线条颜色为“无线条颜色”,接着单击“填充”区“颜色”下拉箭头,选择“其它颜色”命令,打开“颜色”对话框,参照下图设置填充颜色(图6),完成后依次单击两次“确定”。

三浪集中润滑KFU操作维护手册

第1章 KFU2-40自动集中润滑系统系统组成 控制器 压力传感器 润滑点 主油管 堵头集中润滑泵分配器 分油管 1-1

部件介绍 一、油泵 KFU2-40油泵由一个12VDC或24VDC直流电机带动齿轮泵旋转,通过一个限压溢流阀和卸压的卸荷阀组成一个泵源系统,其工作或休息由DKQ型程序控制器控制,整个外形为半封闭状,以防外力打击透明油箱。 外形尺寸 1-2

1-3 液压原理图 KFU2-40 技术参数: KFU2-40KFU2-40B 最多连接润滑点数 60工 作压 力 油 箱容 积 使 用电 压 控制器3.8MPa 3L 12或24VDC DKQ型或SL-ECU SL-ECU 参数 型号

工作原理:当油泵收到控制器发来的起动指令后,电机带动齿轮泵沿压油方向旋转,产生真空吸入油脂,油脂被齿轮泵压送至压力出口,迅速打开卸荷阀中的出油通道,开始对外供油,当外接分配器储油结束后,整个系统成封闭,压力上升到溢流阀控制压力,压力传感器向控制器发出系统正常讯息,系统余油经溢流阀泄回油箱,这样主油路保持溢流阀控制压力值不变。如果油泵接收到控制器发来的停止指令,油泵电机停转(间歇工况),泵出口至卸荷阀入口段压力逐步下降,在卸荷阀弹簧作用下打开卸荷口,系统主油管的油压迅速下降,定量分配器开始进入向润滑点供油工况。由于管路的滞阻作用,系统只能卸压至0.05-0.1MPa。 t1:系统上压时间,取决于泵大小,分配器数量多少。 t2:系统压力保持时间,为了保证分配器可靠储油。 t3:泵工作时间 t7:一个润滑周期时间 t4:系统卸荷时间 P1:最大残压0.1MPa t5:分配器供油时间 P2:分配器动作压力区间 t6:间歇时间 P:额定压力 注 意: 油泵的电压必须与汽车的电源电压相匹配。 1-4

用Word制作漂亮工作流程图的方法

在日常的很多实际任务中,我们可能需要表达某个工作的过程或流程。有些工作的过程比较复杂,如果你仅仅用文字表达,通常是很难描述清楚的。与此同时,听者也难于搞懂,在这种情况下,最好的方式就是绘制工作流程图,图形的直观性会让双方都大大获益。 笔者曾经介绍过用MS VISIO 2002制作工作流程图的方法(请参阅《用Visio 做工作流程图》),但是很多朋友反映自己的电脑上并没有安装VISIO,而且对VISIO还有种陌生感。为了便于更多的朋友轻松地制作工作流程图,下面我们介绍利用Word制作漂亮工作流程图的方法。 任务要求:这里我们还是以制作毕业论文写作流程图为例,该工作流程图表达的是数理信息学院毕业生毕业论文的制作过程。 步骤一:页面和段落的设置 步骤二:制作流程图的标题 步骤三:绘制流程图框架 步骤四:流程图的对齐与修饰 步骤五:添加连接箭头 步骤六:添加折线连接符和说明性文字 为了让朋友们对制作目标有个大概的了解,下面先来看一下完成后的效果图(图 1)。

为了提高工作流程图的制作效率,在具体制作之前应该先在头脑中构思一下流程图的大概效果,最好能够在稿纸上把效果图画出来,这往往比边想边做要快很多。 在纸上画好草图之后,我们就可以打开Word 2003进行具体的制作了,本例的操作是在Word 2003中进行的,使用Word其它版本的朋友可以参照进行。 步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图 2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。

word流程图制作

1、首先在“绘图”工具栏上,单击“自选图形”,指向“流程图”,再单击所需的形状。 2、单击要绘制流程图的位置。此时你会发现,在页面上出现了如下图所示的虚框。这是什么?以前的版本好像没这东东啊。是,这是Word2002新增功能之一的绘图画布。 绘图画布是在创建图形对象(例如自选图形和文本框)时产生的。它是一个区域,可在该区域上绘制多个形状。因为形状包含在绘图画布内,所以它们可作为一个单元移动和调整大小。明白吧,这个绘图画布可帮助您排列并移动多个图形,当图形对象包括几个图形时这个功能会很有帮助。还记得以前要在Word中排列、移动一组图形的麻烦吗?有了绘图画布,这些烦恼就不再困扰你了。 绘图画布还在图形和文档的其他部分之间提供一条类似框架的边界。在默认情况下,绘图画布没有背景或边框,但是如同处理图形对象一样,可以对绘图画布应用格式。 3、在绘图画布上插入你选择的那个图形。就像这样,插入一个矩形。

4、若要向流程图中添加额外的形状,请重复步骤1 到3,再按所需的顺序对其进行排列。如果绘图画布太小,没办法把所有你要画的流程图放进去怎么办?没关系你可以调整它的大小。看到上图的绘图画布周围比较粗的几个小线条了吗?选择它们,你可以任意的增大或者缩小绘图画布了。如果不想使用绘图画布,可以将图形对象从绘图画布上拖下来,选择绘图画布,然后将之删除。 5、我们一遍遍的重复步骤1到3,终于画出了如下图所示的流程图的基本框架。 6、接下来,要做什么呢?既然是流程图,自然是要建立各种图形之间的连接了。这里我们使用Word2002提供的一个非常好用的自选图形——连接符来建立连接。 什么是连接符?你希望使用线条来连接形状并保持它们之间的连接吗?这 就是连接符的作用。连接符看起来像线条,但是它将始终与其附加到的形状相连。也就是说,无论你怎样拖动各种形状,只要它们是以连接符相连的,就会始终连在一起。 在Word2002提供了三种线型的连接符用于连接对象:直线、肘形线(带角度)和曲线。

机泵群油雾润滑系统操作手册

机泵群油雾润滑系统操作手册 北京朗润德科技有限公司 2005年9月

目录1产品用途 2工作原理 3机泵群油雾润滑系统外形图 4运行 4.1运行前的准备 4.2 运行油雾发生装置 5辅油雾发生器 5.1一般说明和应用 5.2辅油雾发生器起动 6维护检查 6.1日常检查 6.2每周检查 6.3半年检查 2

1产品用途 机泵群油雾润滑系统是一个产生、传送并自动向各种工业机械设备中的轴承、齿轮箱、链条和滑动表面提供润滑剂的集中润滑系统。 2工作原理 机泵群油雾润滑系统以压缩空气作为动力,使油液雾化,即产生一种像烟雾一样的干燥油雾,然后通过管道再经凝缩嘴使油雾重新凝聚成较大的油滴,送到需润滑的摩擦副,起到润滑效果。 3

a)打开前门。核实大油箱、主油箱和辅油箱的排放阀处于关闭位置。排放阀的堵塞应安装并上紧。 b)大油箱油盖位于旋转式管路过滤器的右边。松开并卸下注油盖并放在一边。注意盖用一根链条联接至大油箱。 检查注油软管的端部是否有污染。清除掉可能会在软管端管嘴中或管上的灰尘和沙粒。将软管插入注油接头并充注大油箱。监视油位计,不要过分充注。如果注油时大油箱内有压力,可打开放气阀,排放大油箱内的空气。 c)一旦注油完成,关闭放气阀,拿开注油软管并重新安装注油盖。盖只需用手牢固上紧。油软管应揩干净并存放好以防污染。将来会需要它重新充注油箱。 ! 不要使用钳子或其他工具来旋开和上紧注油盖。用手拧紧注油盖。 4.1.2起动油雾发生器前的准备 起动前重新检查所有联接并保证上紧所有接头,且电气联接正确完好。保证油雾分配器放气和排放正确安装。核实用来维持气源的设备和系统处于正确工作状态而这些气源在装置空气入口接头处已接通。 4.2运行油雾发生装置 起动油雾发生器非常简单且只需要几个启动的动作。起动油雾发生器的步骤是: 1)接通入口气源。 2)接通电源。 3)设定油雾压力。 5

如何用WORD文档绘制流程图

如何用WORD文档做流程图 步骤一:页面和段落的设置(可以略去) 步骤二:绘制流程图框架 步骤三:流程图的对齐与修饰 步骤四:添加连接箭头 步骤一:页面和段落的设置(可以略去) 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图3)。 步骤二:绘制流程图框架 接下来我们开始绘制流程图的框架。所谓框架就是画出图形、把图形大致布局并在其中输入文字。在这里大家可以体会到,如果已经作好了草图,这里的操作将是比较轻松的,如果在这里边想边画,可能会耽搁很多时间。 1.单击窗口底部工具栏上的“自选图形”按钮,在弹出的菜单中选择“流程图”,接着选择“流程图”中的“准备”图形(图11)。 2.这时,在页面中标题的下方也会出现一个“在此创建图形”的画布,拖动鼠标,在画布的恰当位置画出“准备”图形。 3.选中“准备”图形,单击鼠标“右键”,在弹出的菜单中选择“添加文字”命令,接着在其中输入文字“开始”。 4.如果觉得“开始”文字的位置过于靠近底部,则可以适当调整它的段前距为“0.5”行(图12)。 5.然后设置其对齐方式为“居中对齐”,完成后的效果如下图(图13)。 6.接下来先拖动“画布”右下角控制点,使其扩大面积到页面底部边缘,以便能容纳流程图的其它图形。

《Android平台软件开发》课程设计报告

《Android平台软件开发》课程设计报告 " 《Android平台软件开发》课程设计报告 题 目基于安卓的计算标准体重的应用程序 专 业计算机科学与技术 学生姓名 学 号 二O一六年 X月 X 日 目 录 1背景介绍 1 2需求分析 1 3设计目的 2 4技术介绍 2 4.1 Android Studio--开发软件 2 4.2 java+Android 类库+xml 2 4.2.1 java 2 4.2.2 xml 2 5 设计思路 2 5.1功能分析 2 5.2模块划分 2 5.3程序流程图 3 6 程序实现及代码分析 3 6.1用户登录界面 3 6.2输入和提交信息程序界面 8 6.3显示计算结果程序界面 10 7 总结 12 参考文献 13 基于安卓的计算标准体重的应用程序 周超南京信息工程大学滨江学院计算机系,江苏南京210044

摘要:本报告主要阐述的是根据身高计算标准体重的应用程序。本应用程序是以安卓技术、Java开发语和android studio开发平台为背景来进行设计的。本应用程序包含了用户登录功能、背景音乐播放功能和计算标准体重功能。 关键词:Java;android studio;安卓; 1 背景介绍随着移动通信与Internet向移动终端的普及,网络和用户对移动终端的要求越来越高,而Symbian,WindowsMobile,PalmOS等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要一个开发性很强的平台。经过多年的发展,第三代数字通信(3G)技术活动了广泛的接受,它为移动终端用户带来了更快的数据传输速率。随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。Google为此于2007年11月推出了一个专为移动设备设计的软件平台——Android。Android是一套真正意义上的开发性的移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android 是由Linux+Java构成的开源软件,允许所有厂商和个人在其基础上进行开发。Android平台的开放性等特点既能促进技术(包括平台本身)的创新,又有助于降低开发成本,还可以是运营商能非常方便地制定自己的特色化的产品。因此,它具有很大的市场发展潜力。

相关主题