第一篇:U盘枚举(自己总结)
插入U盘
直接拔出
安全拔出
A9枚举
Linux USB gadget设备驱动解析(2)---驱动调试 作者:刘洪涛, 华清远见嵌入式学院金牌讲师。
这一节主要把在实现“linuxU盘功能”过程中的一些调试过程记录下来,并加以解析。
一、背景知识
1、USB Mass Storage类规范概述
USB 组织在universal Serial Bus Mass Storage Class Spaceification 1.1版本中定义了海量存储设备类(Mass Storage Class)的规范,这个类规范包括四个
独立的子类规范,即:
1.USB Mass Storage Class Control/Bulk/Interrupt(CBI)Transport 2.USB Mass Storage Class Bulk-Only Transport 3.USB Mass Storage Class ATA Command Block 4.USB Mass Storage Class UFI Command Specification 前 两个子规范定义了数据/命令/状态在USB 上的传输方法。Bulk-Only 传输规范仅仅使用Bulk 端点传送数据/命令/状态,CBI 传输规范则使用Control/Bulk/Interrupt 三种类型的端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA 命令规范用于硬盘,UFI 命令规范是针对USB 移动存储。Microsoft Windows 中提供对Mass Storage 协议的支持,因此USB 移动设备只需要遵循 Mass Storage 协议来组织数据和处理命令,即可实现与PC 机交换数据。而Flash 的存储单元组织形式采用FAT16 文件系统,这样,就可以直接在Windows的浏览器中通过可移动磁盘来交换数据了,Windows 负责对FAT16 文件系统的管理,USB 设备不需要干预FAT16 文件系统操作的具体细节。
USB(Host)唯一通过描述符了解设备的有关信息,根据这些信息,建立起通信,在这 些描述符中,规定了设备所使用的协议、端点情况等。因此,正确地提供描述符,是USB 设备正常工作的先决条件。
Linux-2.6.26内核中在利用USB gadget驱动实现模拟U盘时主要涉及到file_storage.c、s3c2410_udc.c等驱动文件(这些文件的具体结构,将在下一篇文章中 描述)。此时我们想先从这些代码中找到USB描述描述符,从中确定使用的存储类规范,从而确定协议。确定通讯协议是我们调试的基础。存储类规范是由接口描述符决定的。接口描述符各项的定义义如下:
其中,bInteaceClass、bInterfaceSubClass、bInterfaceProtocol可以判断出设备是否是存储类,以及属于哪种存储子类和存储介质的操作命令。在file_storage.c文件中,/* USB protocol value = the transport method */ #define USB_PR_CBI 0x00 // Control/Bulk/Interrupt #define USB_PR_CB 0x01 // Control/Bulk w/o interrupt #define USB_PR_BULK 0x50 // Bulk-only /* USB subclass value = the protocol encapsulation */ #define USB_SC_RBC 0x01 // Reduced Block Commands(flash)#define USB_SC_8020 0x02 // SFF-8020i, MMC-2, ATAPI(CD-ROM)#define USB_SC_QIC 0x03 // QIC-157(tape)#define USB_SC_UFI 0x04 // UFI(floppy)#define USB_SC_8070 0x05 // SFF-8070i(removable)#define USB_SC_SCSI 0x06 // Transparent SCSI 默认的情况是:
mod_data = { // Default values.transport_parm = “BBB”,.protocol_parm = “SCSI”, „„
默认的赋值如下:
bInterfaceClass=08 表示:存储类
bInterfaceSubClass=0x06 表示:透明的SCSI指令 bInterfaceProtocol=0x50 表示:bulk-only 传输
2、Bulk-Only 传输协议
下面看看Bulk-Only 传输协议:(详细的规范请阅读《Universal Serial BusMass Storage ClassBulk-Only Transport》)
设 备插入到USB 后,USB 即对设备进行搜索,并要求设备提供相应的描述符。在USBHost 得到上述描述符后,即完成了设备的配置,识别出为Bulk-Only 的Mass Storage 设备,然后即进入Bulk-Only 传输方式。在此方式下,USB 与设备间的所有数据均通过Bulk-In和Bulk-Out 来进行传输,不再通过控制端点传输任何数据。
在 这种传输方式下,有三种类型的数据在USB 和设备之间传送,CBW、CSW 和普通数据。CBW(Command Block Wrapper,即命令块包)是从USB Host 发送到设备的命令,命令格式遵从接口中的bInterfaceSubClass 所指定的命令块,这里为SCSI 传输命令集。USB设备需要将SCSI 命令从CBW 中提取出来,执行相应的命令,完成以后,向Host 发出反映 当前命令执行状态的CSW(Command Status Wrapper),Host 根据CSW 来决定是否继续发 送下一个CBW 或是数据。Host 要求USB 设备执行的命令可能为发送数据,则此时需要将 特定数据传送出去,完毕后发出CSW,以使Host 进行下一步的操作。USB 设备所执行的操
作可用下图描述:
CBW的格式如下:
dCBWSignature:
CBW的标识,固定值:43425355h(little endian)。dCBWTag:
主机发送的一个命令块标识,设备需要原样作为dCSWTag(CSW中的一部分)再发送给Host;主要用于关联CSW到对应的CBW。dCBWDataTransferLength:
本次CBW命令要求在命令与回应之间传输的字节数。如果为0,则不传输数据。bmCBWFlags:
反映数据传输的方向,0 表示来自Host,1 表示发至Host; bCBWLUN:
对于有多个LUN逻辑单元的设备,用来选择具体目标。如果没有多个LUN,则写0。
bCBWCBLength:
命令的长度,范围在0~16.CBWCB:
传输的具体命令,符合bInterfaceSubClass.中定义的命令规范,此处是SCSI CSW命令格式如下:
dCSWSignature:
CSW的标识,固定值:53425355h(little endian)dCSWTag:
设置这个标识和CBW中的dCBWTag一致,参照上面关于dCBWTag的解释 dCSWDataResidue:
还需要传送的数据,此数据根据dCBWDataTransferLength-本次已经传送的数据得到
bCSWStatus:
指示命令的执行状态。如果命令正确执行,bCSWStatus 返回0 即可。
3、SCSI指令集
Bulk-Only 的CBW 中的CBWCB 中的内容即为如下格式的命令块描述符(Command Block Descriptor)。SCSI-2 有三种字长的命令,6 字节、10字节和12字节,Microsoft Windows 环境下支持12 字节长的命令。
Operation Code:
操作代码,表示特定的命令。高3 位为Group Code,共有8 种组合,即8 个组,低5 五位为Command Code,可以有32 种命令。Logicol unit Number:
为了兼容SCSI-1 而设的,此处可以不必关心。Logical block address:
为高位在前,低位在后的逻辑块地址,即扇区地址。第2 位为高位,第3、4、5 依次为低位。
Transfer length:
为需要从逻辑块地址处开始传输的扇区数(比如在Write 命令中)。Parameter list length:
为需要传输的数据长度(比如在Mode Sense 命令中); Allocation length:
为初始程序为返回数据所分配的最大字节数,此值可以为零,表示不需要传送数据。
SCSI指令集的Direct Accesss 类型存储介质的传输命令有许多,Mass Storage协议只用到了其中的一些。更多的SCSI指令参见:http://en.wikipedia.org/wiki/SCSI_command 指令代码 指令名称 说明
04h Format Unit 格式化存储单元 12h Inquiry 索取器件信息 1Bh Start/Stop load/unload 55h Mode select 允许Host对外部设备设置参数。5Ah Mode Sense 向host传输参数 Eh Prevent/Allow Medium Removal 写保护
>28h Read(10)Host读存储介质中的二进制数据 A8h Read(12)同上,不过比较详细一点 25h Read Capacity 要求设备返回当前容量
23h Read Format Capacity 查询当前容量及可用空间 03h Request Sense 请求设备向主机返回执行结果,及状态数据
01h Rexero Unit 返回零轨道 2Bh Seek(10)为设备分配到特定地址 1Dh Send Diagnostic 执行固件复位并执行诊断
00h Test Unit Ready 请求设备报告是否处于Ready状态 2Fh Verify 在存储中验证数据
2Ah Write(10)从主机向介质写二进制数据 AAh Write(12)同上,不过比较详细 2Eh Write and Verify 写二进制数据并验证
对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不同,根据相 应的文档,可以对每种请求作出适当的回应。比如,下面是INQUIRY 请求的命令块描述符和其返回内容的数据格式:如:INQUIRY 命令描述符:
返回数据格式
Host 会依次发出INQUIRY、Read Capacity、UFI Mode Sense 请求,如果上述请求的返回结果都正确,则Host 会发出READ 命令,读取文件系统0 簇0 扇区的MBR 数据,进入文件系统识别阶段。
4、利用USB View观察结果
可通过USB View软件查看到USB设置阶段获取到的信息。
二、出现的主要问题
在调试过程中遇到了一个问题。现象是:在目标板加载完驱动后,即执行完: # insmod g_file_storage.ko file=“/dev/mtdblock2” stall=“0” removable=“1” 后,接好USB线。此时在windows端设备出有usb storage设备加入,但出现不了盘符。
下面记录下调试过程。
三、调试过程
根据规范,当完成SCSI指令集中Inquiry 命令时,可以出现盘符。所以可以通过bushound软件查看通讯过程,找出原因。下面是利用bushound工具在出现问题时采集到的数据。
Dev Phase Data Info Time Cmd.Phase.Ofs------------------------------------26 CTL 80 06 00 0100 00 00 1012 03 01 02........%.......4.8ms 1.2.0 03 01..1.2.16 26 CTL 80 06 00 0201 01 04 c000 00 20 00 GET DESCRIPTR 16us 3.1.0 26 DI 09 02 20 0001 09 04 0081 02 40 0002 40 00 00 P.....@......@..3.2.16 26 CTL 80 06 00 0301 01 04 c000 00 04 00 GET DESCRIPTR 15us 5.1.0 26 DI 04 03 09 04....3.9ms 6.1.0 26 CTL 80 06 03 0309 04 1a 00 GET DESCRIPTR 18us 7.1.0 26 DI 1a 03 33 0030 00 34 0037 00 37 0000 00 00 00 SET CONFIG 16us 8.1.0 26 CTL 01 0b 00 0000 00 01 00 CLASS 62ms 10.1.0 26 DI 00.3.9ms 10.2.0 26 DO 55 53 42 4324 00 00 0000 00 00 0000 00 00...$...........11.1.16 26 DI 00 80 02 024c 69 6e 752d 53 74 6f64 67 65 74 File-Stor Gadget 12.1.16 30 33 31 32 0312 12.1.32 26 CTL 80 06 00 0201 01 04 c000 02 08 06...............4.1ms 13.2.0 50 05 07 0500 07 05 0200 00 20 00 GET DESCRIPTR 2.7sc 14.1.0 26 DI 09 02 20 0001 09 04 0081 02 40 0002 40 00 00 P.....@......@..14.2.16 26 USTS 05 00 00 c0 no response 2.8sc 15.1.0 注意上面红色部分的代码,DO发出了55 53 42 43开 始的CBW命令块,命令码是12,即Inquiry命令。要求目标返回Inquiry命令要求的数据,长度是0x24。接下来设备端通过DI返回了设备信 息。按照规范,在返回完了数据后,设备端还应该通过DI向系统返回CSW的值。但实际的捕获内容并没有。所以导致不能正确出现盘符。
在file_storage.c中,发送数据时都会调用到start_transfer()函数。在此函数中加入printk调试语句,观察现象。发现只要加入的调试语句,windows端就能够正常设别设备了。于是,可以猜测是因为需要在连续 两次发送之间加上一些延时。在函数中加入udelay(800)后,windows系统可以正常发现设备了。具体的代码架构,将在下一遍文章中解析。下面是程序正常后,用bushound捕获到的数据。
红色部分,可以看出设备正确的按照规范在发送完数据后,返回CSW信息。
四、总结做好USB gadget驱动、或者USB host驱动调试需要: ·掌握一定的知识基础
包括:USB协议、具体的类设备规范、USB驱动程序架构、USB设备端控制器操作等。·合理利用调试工具。
包括:USB view、bushound、及一些硬件USB信号分析仪。
一、追踪USB大容量设备的实现流程
1、从main.c开始
(1)main函数的执行流程
Set_System();//设置时钟、端口等。
Set_USBClock();//设置usb的时钟
USB_Interrupts_Config();//设置中断
Led_Config();//设置所使用的到的灯。
MSD_Init();//SD卡初始化
Get_Medium_Characteristics();//获取SD块总数、每块字节数。
USB_Init();//USB_init.c提供的初始化函数。从这里开始USB设备被主机检测到。
while(1)
{ //USB的工作都是在中断中完成的,主执行流程什么也没做。
}
(2)与鼠标例程不同的地方
在中断配置中,使能了USB高优先级中断。
NVIC_InitStructure.NVIC_IRQChannel= USB_HP_CAN_TX_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
用到了几个灯指示,这个我的开发板上用不到,就不详细看了。
MSD_Init(),是对SD卡进行初始化。该函数在msd.c中,我看了一下它的SD卡实现的代码,比我的SD函数代码齐整多了。以后有时间要把我的USB驱动好好的整理一下。不过现在就先不管了。
接下来这个函数获取SD卡的容量,这样的函数我在SD卡驱动中也实现了,改变一下调用方式就行了。
USB_Init()函数在usb_init.c库函数中,但它最终会调用user_prop.c宏的用户初始化例程。下面就追踪进去看一看。
(3)大容量存储设备的初始化
void MASS_init()
{ pInformation->Current_Configuration = 0;
PowerOn();连接电缆主机很快发总线复位。
_SetISTR(0);
wInterrupt_Mask = IMR_MSK;
_SetCNTR(wInterrupt_Mask);开启复位和传输中断。
pInformation->Current_Feature = MASS_ConfigDescriptor[7];
while(pInformation->Current_Configuration == 0)
{
NOP_Process();
}
bDeviceState = CONFIGURED;//这句执行完成后,设备处于已配置状态。我先在这里加一句调试语句。
#if usb_debug
Uart_PutString(“设备已配置”);
#endif
}
2、进入复位中断
(1)先列出中断处理代码
发生总线复位中断以后,处理是在usb_prop.c的Mass_Reset()函数中完成的。
void MASS_Reset(){
Device_Info.Current_Configuration = 0;
SetBTABLE(BTABLE_ADDRESS);
SetEPType(ENDP0, EP_CONTROL);//端点0控制端点
SetEPTxStatus(ENDP0, EP_TX_NAK);//不响应IN
SetEPRxAddr(ENDP0, ENDP0_RXADDR);//设置接收缓冲区(OUT)
SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);接收长度。
SetEPTxAddr(ENDP0, ENDP0_TXADDR);//发送缓冲区(IN)
Clear_Status_Out(ENDP0);
SetEPRxValid(ENDP0);//使能端点0的接收。
SetEPType(ENDP1, EP_BULK);//端点1批量模式
SetEPTxAddr(ENDP1, ENDP1_TXADDR);//设置发送缓冲区(IN)
SetEPTxStatus(ENDP1, EP_TX_NAK);发送不响应。
SetEPRxStatus(ENDP1, EP_RX_DIS);//接收无效。对OUT无效
SetEPType(ENDP2, EP_BULK);//端点2批量模式
SetEPRxAddr(ENDP2, ENDP2_RXADDR);//设置接收缓冲区OUT
SetEPRxCount(ENDP2, Device_Property.MaxPacketSize);
SetEPRxStatus(ENDP2, EP_RX_VALID);
SetEPTxStatus(ENDP2, EP_TX_DIS);//发送无效,对IN无效
SetDeviceAddress(0);//使能USB接口模块。
CBW.dSignature = BOT_CBW_SIGNATURE;
Bot_State = BOT_IDLE;//命令状态机初始化为空闲状态
}
在这里没有我没有看到将批量端点设置为双缓冲模式的迹象,难道这个例程没有用它?
3、进入枚举过程
因为在鼠标例程中已经详细分析过枚举过程,这里主要是大容量设备枚举过程中不同的地方做一下分析。
(1)获取设备描述符、设置地址。
(2)获取配置描述符
(3)获取配置描述符集合,这里主要讲接口描述符分析一下。
0x09, /* bLength: Interface Descriptor size */
0x04, /* bDescriptorType: */
0x00, /* bInterfaceNumber: Number of Interface */
0x00, /* bAlternateSetting: Alternate setting */
0x02, /* bNumEndpoints*/ 使用两个端点
0x08, /* bInterfaceClass: MASS STORAGE Class,大容量存储类 */
0x06, /* bInterfaceSubClass : SCSI transparent,SCSI传输*/
0x50, /* nInterfaceProtocol,仅批量传输*/ 4, /* iInterface: */
(4)获取字符串描述符
(5)类请求实现:
类获取逻辑盘:
一般返回0
类请求复位:
ClearDTOG_TX(ENDP1);
ClearDTOG_RX(ENDP2);
CBW.dSignature = BOT_CBW_SIGNATURE;
Bot_State = BOT_IDLE;
(6)设置配置
在用户设置的回调函数中,又调用
void Mass_Storage_SetConfiguration(void)
{
if(pInformation->Current_Configuration)
{
ClearDTOG_TX(ENDP1);
ClearDTOG_RX(ENDP2);
Bot_State = BOT_IDLE;}
} 这个工作前面已经做过了。
4、主机发命令INQUIRY
(1)首先进入批量输出中断
该中断的回调函数调用Mass_Storage_Out()进行处理。
(2)追踪进入Mass_Storage_Out()
void Mass_Storage_Out(void)
{
u8 CMD;
CMD = CBW.CB[0];//
Data_Len = GetEPRxCount(ENDP2);
PMAToUserBufferCopy(Bulk_Data_Buff,ENDP2_RXADDR, Data_Len);
switch(Bot_State)
{
case BOT_IDLE:
CBW_Decode();//第一次收到命令肯定调用这个解码函数。
break;//它的作用应该是填充CBW命令块封包结构
case BOT_DATA_OUT:
if(CMD == SCSI_WRITE10)
{
SCSI_Write10_Cmd();
break;
}
}
(3)追踪进入CBW_Decode()
这个函数的代码较长,我就不列举在这里了,我就分析一下本次的主要工作。
首先将用户缓冲区的数据复制到命令封包结构里面。
然后准备好状态封包结构:
CSW.dTag = CBW.dTag;//这个标志由主机生成,可以用于检查设备是否正确收到该命令。
CSW.dDataResidue = CBW.dDataLength;
然后主要是根据命令操作码,调用相应的SCSI命令处理函数。
switch(CBW.CB[0])
{
case SCSI_REQUEST_SENSE:
SCSI_RequestSense_Cmd();
break;
case SCSI_INQUIRY:
SCSI_Inquiry_Cmd();
break;
我这里就列出了两项,实际的命令是很多的。本次主要是查询处理。
(4)追踪进入SCSI_Inquiry_Cmd()
以上函数是在usb_bot.c里面,现在跳转到usb_scsi.c里面。
这个函数的主要工作是调用Transfer_Data_Request(Inquiry_Data, Inquiry_Data_Length)来完成。
这个Inquiry_Data = Standard_Inquiry_Data,后面这个Standard_Inquiry_Data是scsi_data.c里面定义的一个数据结构,专门用于inquiry命令的返回。
u8 Standard_Inquiry_Data[] =
{
0x00, /* Direct Access Device */
0x80, /* RMB = 1: Removable Medium */
0x02, /* Version: No conformance claim to standard */
0x02, //这里圈圈的书上说应该为 0x01
36BULK_MAX_PACKET_SIZE;
Block_offset = BULK_MAX_PACKET_SIZE;
}
else
{
UserToPMABufferCopy(Data_Buffer + Block_offset, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE);
Block_Read_count-= BULK_MAX_PACKET_SIZE;
Block_offset += BULK_MAX_PACKET_SIZE;
}
SetEPTxCount(ENDP1, BULK_MAX_PACKET_SIZE);SetEPTxStatus(ENDP1, EP_TX_VALID);
Memory_Offset += BULK_MAX_PACKET_SIZE;
Transfer_Length-= BULK_MAX_PACKET_SIZE;//剩下的需要传输的字节数。
CSW.dDataResidue-= BULK_MAX_PACKET_SIZE;
Led_RW_ON();
}
这里不清楚的是主机是一次把512字节读完,还是每次发一个命令读取64字节。我觉得应该是发一次读命令,8次“IN”读取一个扇区,再发一个“IN”读取命令状态封包。
8、写命令WRITE(10)
这个命令的处理过程跟读命令的处理差不多,只是最后它会调用Write_Memory()进行处理。
i = 0;
for(;Counter < temp;Counter++)
{
Data_Buffer[Counter] = Bulk_Data_Buff[i];
i++;
}
从接受缓冲区得到的数据总是先放到用户缓冲区,这个缓冲区有512个字节。
if(!(Transfer_Length % 512))
{
Counter = 0;
MSD_WriteBlock(Data_Buffer, Memory_OffsetInquiry之后会发出ReadFormatCapacity命令,这个命令在SCSI规范中是“厂家自定义命令”,可以参考UFI命令集文档(实际上,U盘所使用的所有SCSI命令集都可以参考UFI文档,它比SCSI标准文档更简洁明了)。注意这个命令在BusHound里是没有描述的,必须在“Device”选项页里勾选上这个U盘所对应的USB Mass Storage Device这个节点,才能看到这个命令的数据流。
-ReadFormatCapacity之后会发出ReadCapacity命令。
-U盘读数据(读扇区)时会发送Read(10)。ReadCapacity完成后就会发送Read(10)读取U盘的第一个扇区。
-U盘写数据时(写扇区)会发送Write(10)。
-TestUnitReady会在无其他数据传输时会定时发送,如果设备没有回应成功的CSW给主机,则主机认为设备已不存在。此时如果再双击磁盘图标,Windows会提示“请插入磁盘”。RequestSense:如果CSW指示此次传输不成功,那么主机会发出此请求。ModeSense6/10这两个命令可以不支持(不支持不代表不反应,任何一个命令你都要做出反应,对于不支持的命令,可以通过STALL握手来向主机表明),暂时也未遇到过什么异常情况,而且我查看过一些U盘,有相当一部分就是随便回了几个数据给主机。这两个命令只会在U盘插入后发送一次,此后不再发送。
U盘开发的几点体会
如果你开发过USB相关项目,理解USB的一些基本概念,例如设备描述符、配置描述符、子类规范等,那么开发U盘只要概念清晰应该不难。以下是我开发过程中的几个相关步骤:
保证USB 芯片正常工作,用其他USB成功项目验证硬件连接及固件的正确性
按Mass Storage协议 Bulk-Only 模式提供描述符,使PC 机控制面板上设备类型出现Mass Storage Device 响应SCSI指令集中Inquiry 命令,可以出现盘符 实现FAT16文件系统
处理SCSI命令集中READ命令及其他UFI命令,可以访问盘符 处理SCSI命令集中WRITE命令 U盘开发成功
开发U盘有三个工具软件应该必备:USBVIEW 察看设备描述符,端点测试等;BUSHOUND 截取USB总线数据,可分析UFI命令及U盘返回的数据流;串口助手可实时了解U盘所收命令流及程序流程由于每个人知识面不同,我想实现上面的几个步骤遇到的问题也不一样。对我最大的困惑是实现FAT16文件系统,直到在微软网站找到它的白皮书才算解惑。这里简介一下方便大家有的放矢。USB 组织定义了海量存储设备类(Mass Storage Class)的规范,这个类规范包括四个独立的子类规范,即:
1.USB Mass Storage Class Control/Bulk/Interrupt(CBI)Transport 2.USBMass Storage Class Bulk-Only Transport 3.USB Mass Storage Class ATA Command Block 4.USB Mass Storage Class UFI Command Specification。
前两个子规范定义了数据/命令/状态在USB 上的传输方法。Bulk-Only 传输规范仅仅使用Bulk 端点传送数据/命令/状态,CBI 传输规范则使用Control/Bulk/Interrupt三种类型的端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA 命令规范用于硬盘,UFI 命令规范是针对USB 移动存储。
Windows95 OSR2和Windows 98开始支持FAT32 文件系统,它是对早期DOS的FAT16文件系统的增强,由于文件系统的核心--文件分配表FAT由16位扩充为32位,所以称为FAT32文件系统。在一逻辑盘(硬盘的一分区)超过 512 兆字节时使用这种格式,会更高效地存储数据,减少硬盘空间的浪费,一般还会使程序运行加快,使用的计算机系统资源更少,因此是使用大容量硬盘存储文件的极有效的系统。本人对Windows 98下的FAT32 文件系统做了分析实验,总体上与FAT16文件系统变化不大,现将有关变化部分简介如下:
(一)FAT32 文件系统将逻辑盘的空间划分为三部分,依次是引导区(BOOT区)、文件分配表区(FAT区)、数据区(DATA区)。引导区和文件分配表区又合称为系统区。
(二)引导区从第一扇区开始,使用了三个扇区,保存了该逻辑盘每扇区字节数,每簇对应的扇区数等等重要参数和引导记录。之后还留有若干保留扇区。而FAT16文件系统的引导区只占用一个扇区,没有保留扇区。
(三)文件分配表区共保存了两个相同的文件分配表,因为文件所占用的存储空间(簇链)及空闲空间的管理都是通过FAT实现的,FAT如此重要,保存两个以便第一个损坏时,还有第二个可用。文件系统对数据区的存储空间是按簇进行划分和管理的,簇是空间分配和回收的基本单位,即,一个文件总是占用若干个整簇,文件所使用的最后一簇剩余的空间就不再使用,而是浪费掉了。
从统计学上讲,平均每个文件浪费0.5簇的空间,簇越大,存储文件时空间浪费越多,利用率越低。因此,簇的大小决定了该盘数据区的利用率。FAT16系统簇号用16位二进制数表示,从0002H到FFEFH个可用簇号(FFF0H到FFFFH另有定义,用来表示坏簇,文件结束簇等),允许每一逻辑盘的数据区最多不超过FFEDH(65518)个簇。FAT32系统簇号改用32位二进制数表示,大致从00000002H到FFFFFEFFH个可用簇号。FAT表按顺序依次记录了该盘各簇的使用情况,是一种位示图法。每簇的使用情况用32位二进制填写,未被分配的簇相应位置写零;坏簇相应位置填入特定值;已分配的簇相应位置填入非零值,具体为:如果该簇是文件的最后一簇,填入的值为FFFFFF0FH,如果该簇不是文件的最后一簇,填入的值为该文件占用的下一个簇的簇号,这样,正好将文件占用的各簇构成一个簇链,保存在FAT表中。0000000H、00000001H两簇号不使用,其对应的两个DWORD位置(FAT表开头的8个字节)用来存放该盘介质类型编号。FAT表的大小就由该逻辑盘数据区共有多少簇所决定,取整数个扇区。
(四)FAT32系统一簇对应8个逻辑相邻的扇区,理论上,这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时,可以用一簇对应16个扇区,依此类推。FAT16系统在逻辑盘容量介于128MB到256MB时,一簇对应8个扇区,容量介于256MB到512MB时,一簇对应16个扇区,容量介于512MB到1GB时,一簇对应32个扇区,容量介于1GB到2GB时,一簇对应32个扇区,超出2GB的部分无法使用。显然,对于容量大于512MB的逻辑盘,采用FAT32的簇比采用FAT16的簇小很多,大大减少了空间的浪费。
但是,对于容量小于512MB的盘,采用FAT32虽然一簇8个扇区,比使用FAT16一簇16个扇区,簇有所减小,但FAT32的FAT表较大,占用空间较多,总数据区被减少,两者相抵,实际并不能增加有效存储空间,所以微软建议对小于512M的逻辑盘不使用FAT32。
另外,对于使用FAT16文件系统的用户提一建议,硬盘分区时,不要将分区(逻辑盘)容量正好设为某一区间的下限,例:将一逻辑盘容量设为1100M(稍大于1024M),则使用时其有效存储容量比分区为950M的一般还少,因其簇大一倍,浪费的空间较多。还有,使用FDISK等对分区指定容量时,由于对1MB的定义不一样(标准的二进制的1MB为1048576B,有的系统将1MB理解为1000000B,1000KB等),及每个分区需从新磁道开始等因素,实际分配的容量可能稍大于指定的容量,亦需注意掌握。
(五)根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分。因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512的限制。FAT16文件系统的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区,最多保存512个目录项,作为系统区的一部分。
(六)目录区中的目录项变化较多,一个目录项仍占32字节,可以是文件目录项、子目录项、卷标项(仅跟目录有)、已删除目录项、长文件名目录项等。目录项中原来在DOS下保留未用的10个字节都有了新的定义,全部32字节的定义如下:
(1)0--7字节 文件正名。(2)8--10字节 文件扩展名。
(3)11字节 文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。
(4)12--13字节 仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。(5)14--15字节 24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。
(6)16--17字节 16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
(7)18--19字节 16位二进制的文件最新访问日期,定义同(6)。(8)20--21字节 起始簇号的高16位。
(9)22--23字节 16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。
(10)24--25字节 16位二进制的文件最新修改日期,定义同(6)。(11)26--27字节 起始簇号的低16位。(12)28--31字节 32位的文件字节长度。
其中第(4)至(8)项为以后陆续定义的。对于子目录项,其(12)为零;已删除目录项的首字节值为E5H。在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目录项前面,全部是采用双字节内码保存的,每一项最多保存十三个字符内码,首字节指明是长文件名的第几项,11字节一般为0FH,12字节指明类型,13字节为校验和,26--27字节为零。
(七)以前版本的 Windows 和DOS与 FAT32 不兼容,不能识别FAT32分区,有些程序也依赖于 FAT16文件系统,不能和 FAT32 驱动器一道工作。将硬盘转换为 FAT32,就不能再用双引导运行以前版本的Windows(Windows 95 [Version 4.00.950]、Windows NT 3.x、Windows NT 4.0 和 Windows 3.x)。
磁盘结构综述 1.硬盘结构
硬盘的内部是由圆形金属片堆叠起来的,每个盘片的两面都有一个磁头(Head)负责读写这个磁面(Side),在每个磁面上划分了一圈一圈的同心圆,叫做柱面(Cylinder)对于软盘通常称之为磁道,在每个柱面中又划分了若干段,称之为扇区(Sector)。由于技术的发展,硬盘的密度越来越大,使得硬盘的实际盘片数越来越少,对磁盘操作的柱面、磁头、扇区被硬盘控制器内部转换,已经不是实际的柱面、磁头、扇区了。由于最早时磁盘存取系统估计不足,传输数据时只给扇区留了6位,柱面留了10位,磁头留了8位。也就是说,柱面最大只能为1023。但是大硬盘的柱面远大于这个数,所以后来就采用将柱面数减少,将磁头数增加的方式来满足磁盘寻址的要求,对于实际地址的转换在BIOS中进行,这叫逻辑块寻址方式(Logical Block Addressing,LBA)硬盘中有关柱面、磁头、扇区的数据都是以此为基准的。
第二篇:《枚举算法》教学设计
《枚举算法》教学设计
苍南县成人教育中心学校 陈荣军
一、教学目标
1、知识与技能目标:
理解枚举算法的基本原理,熟悉枚举算法程序设计的基本思路及程序结构特点;学会使用枚举算法解决现实生活、学习中所遇到的问题。
2、过程与方法:
围绕“课堂任务导航程序”,通过课堂任务设计,让学生熟悉用枚举算法求解问题的基本过程,并把它运用到实际生活中去解决问题,学会选择适当的枚举方法多角度分析问题,解决问题。
3、情感态度与价值观:
激发学生的学习热情,提高学生自主学习能力,增强学生创新意识;引导学生关注枚举算法在社会生活中的应用,并以此培养学生将算法思想运用到解决实际问题中去的能力。
二、学情分析
本节内容的教学对象是普通高中高一学生,他们经过半学期的信息技术教学,具备了一定的计算机操作能力;在VB程序设计方面,也已经有所学习,具备一定的基础,但因所上课时不多,学生对VB还只是略知皮毛,语法及编程能力有待于进一步提高。
三、教材分析
1、本节主要内容介绍
枚举算法是程序设计中使用最为普遍、学生必须熟练掌握和正确运用的一种算法。它利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检查,从中找出符合要求的答案。用枚举算法解决问题,通常可以从确定范围、逐一列举,验证条件、逐一验证这两个方面进行分析,把这两个方面分析好了,问题自然会迎刃而解。
2、重点难点分析 教学重点:
(1)理解枚举算法的基本原理。
(2)能根据问题描述确定枚举范围,并能用程序正确表示验证条件。(3)枚举算法的程序实现。教学难点:
(1)各种枚举算法的优劣评价。(2)编程实现枚举算法。
四、教学设计理念 采用了以学生的学习和发展为中心,基于建构主义理论的任务驱动、情境教学等教学方法,突出自主、合作、探究等学习方法;强调信息技术与生活实际的联系,培养学生的逻辑思维能力、解决问题的能力以及创新意识等;设置多元化的评价方式,让学生掌握学习内容的同时,形成交流与评价的能力。
主要教学方法:讲授法、演示法、任务驱动、情境教学等 主要学习方法:自主学习,合作探究学习等
五、教学策略
通过“课堂任务导航程序”,在教学过程中,围绕“情境导入→回顾算法思想→任务引领→自主学习→合作探究→交流评价→课堂总结”的教学流程来展开教学活动。
六、教学环境
教师用VB自制的“课堂任务导航程序”(客户端)、教师服务端程序、多媒体网络教室、多媒体教学软件、VB6.0中文企业版等。
七、教学过程
一、情境导入(3分钟)
教师活动:同学们,大家好!首先,很高兴今天能给大家上一节课,希望老师今天的这节课能让大家有所收获。在上新课内容之前,老师想先请同学们帮老师一个忙(教师广播展示VB制作的“QQ登录程序”):老师前段时间申请了个QQ,结果把密码给忘记了,但我记得密码是由六位相同的数字组成,哪位同学能上来帮老师找出密码?
学生活动:学生上台,根据老师的描述,从000000到999999一一测试密码,最终找到密码。教师活动:非常感谢这位同学的帮忙!这位同学能说下,你是怎么找出密码的吗? 学生活动:从000000,111111,222222„„ 999999这样逐个测试。教师活动:很好。像刚才这位同学这样,根据老师给的范围,逐一列举所有可能,并根据程序提示(验证条件)逐一验证,从而找出答案的方法就是今天我们要来共同学习的《枚举算法》。
设计理念:通过学生熟悉的QQ密码破解来引入课堂,增强学生兴趣,也能使学生乐于接受。
二、回顾枚举算法思想,提出课堂任务(5分钟)
教师活动:教师广播展示课件,学习枚举算法的概念,说明枚举算法的两个关键点:
1、确定范围,一一列举(既不遗漏,也不多余);
2、确定条件,逐一验证。教师活动:在了解了枚举算法的概念后,同学们能不能列举几个我们实际生活中用枚举算法解决的问题的例子呢? 学生活动:学生举例(教师根据例子引导分析,重点强调“确定范围、一一列举,根据条件、逐一验证”)
教师活动:非常好!看来大家对枚举算法已经有了一定的理解了,接下来,我们来看下在程序里面,如何实现枚举算法解决问题。请大家打开桌面“学生”文件夹里的“课堂任务导航.exe”,完成“任务一”。(教师简要说明“课堂任务导航程序“使用方法)
三、课堂任务一(10分钟)
学生活动:根据课堂任务导航程序及帮助信息自主完成课堂“任务一”(4分钟)教师活动:教师巡视、个别指导,观察、总结并及时记录学生在完成任务过程中出现的问题。同时,在“教师服务端”程序中观察展示学生任务一的完成情况,及时了解学生的学习进度。
任务反馈:大部分学生能顺利完成任务一,对于不能自主完成的,可由已完成学生帮助完成。
教师活动:很好!大部分同学已经完成任务一了,接下来让我们一起看下我们的程序是如何实现枚举算法的。教师展示任务一程序(广播)教师活动:我们知道要想实现枚举算法,主要是要做到两点:一个是确定枚举范围进行一一列举;还有就是根据条件,逐一验证。我们来看下我们的程序的怎么实现这两点的?
学生活动:观察程序,思考。
教师活动:我们先来看下“确定范围、一一列举”在程序里是如何体现的?(6分钟)
学生活动:使用for语句实现
教师活动:“根据条件,逐一验证”呢? 学生活动:if语句
教师活动:很好!一般实现枚举算法的程序都是由循环结构嵌套分支结构组成。好了,大家现在已经知道了枚举算法的程序结构了,接下来请同学们继续完成任务二。
(设计理念:通过任务一的设计,让学生自主探究学习,培养学生的自主探究学习能力,通过学生互助,培养学生互帮互助的精神;通过对任务一的程序分析,培养学生的善于观察思考、解决问题的能力,并让学生熟悉枚举算法的程序结构特点,以便学生能更加顺利的完成任务二。)
四、课堂任务二(设置陷阱,探讨交流)(15分钟)学生活动:学生先自主完成任务二。(5分钟)
教师活动:教师巡视、个别指导,观察学生在完成任务过程中出现的问题:有些学生能输出58个数,有些学生只输出6个数,原因在哪里?请一个能输出58个数的学生上台演示操作,然后让学生分析输出的这些数都能满足要求吗?经过分析,学生会发现有些数的个位数不符合要求。提出问题:如何修改程序将不符合要求的数去掉?(2分钟)
学生活动:修改程序(由学生小组合作相互探讨完成)。(5分钟)教师活动:当有部分学生输出正确答案后,请一个能输出正确结果的学生分析如何修改,并到教师机上修改刚才错误的程序(算法1); 请一个不同算法的同学来修改程序(算法2);让他们分析各自算法的效率谁更高。然后教师小结,鼓励学生要善于发现问题、深入分析问题、积极解决问题;从不同角度分析问题可以得到不同效率的算法。(3分钟)
(设计理念:设计任务陷阱培养学生善于发现问题、深入分析问题、积极解决问题的能力;通过探讨交流,培养学生的团体协作能力及合作探究精神;设计任务一题多解,培养学生从不同角度分析问题的能力,锻炼学生的发散性思维。通过算法分析,让学生理解算法的执行效率,懂得选择最优算法去解决问题,提高程序的性能。)
五、层层递进,任务拓展(高层次学生做)
拓展任务:在任务二的基础上,增加验证条件:“十位数是3的倍数,百位数是4的倍数”,提出问题:如何将数字里的十位数和百位数分离?
学生活动:学生通过教师提供的帮助材料,讨论分析问题,尝试去完成拓展任务 教师活动:教师观察,引导。
(设计理念:设计拓展任务,提高任务难度梯度,供高层次学生完成,以实施课堂中的分层教学。)
六、提交作品,课堂评价(3分钟)
学生提交作品,教师选择几个作品做总结性评价。
七、归纳总结、布置课后作业(1分钟)
1、通过“教师服务端”程序中学生“自我评价”中的知识点,进行课堂总结:(1)枚举算法的基本原理:
确定范围、逐一列举(既不遗漏,也不多余)(循环语句)确定条件、逐一验证
(条件语句)
(2)枚举算法中范围的确定及列举:循环语句(如for)实现
(3)枚举算法中验证条件的表示:利用if语句进行条件判断;条件表示主要运用VB中的算数运算符及逻辑运算符实现。(4)实现枚举算法的程序结构特点:
外层循环嵌套内层条件判断
2、布置课后作业: 找水仙花数(学生任务导航程序)
(设计理念:通过知识总结,帮助学生将知识系统化,便于学生理解记忆。通过知识的延伸,促使学生将知识内化,并进行能力迁移,进一步提高学生解决问题的能力。)
八、自我评价(1分钟)
让学生利用“课堂任务导航程序”中的自我评价功能进行自我评价。教师活动:展示学生自评结果。
(设计理念:通过评价,引导学生自我反思,加深对所学知识的认识与理解;教师查看学生自我评价结果能及时了解到学生对本堂课所学知识点的掌握情况,以便安排后续教学内容。)
第三篇:简单枚举个性化教案
大愚教育中小学个性化学习中心
简单枚举
专题解析:
枚举是一种常见的分析问题、解决问题的方法。一般地,要根据问题要求,一一列举问题解答。运用枚举法解应用题时,必须注意无重复、无遗漏,因此必须有次序、有规律地进行枚举。运用枚举法解题的关键是要正确分类,要注意以下两点:一是分类要全,不能造成遗漏;二是枚举要清,要将每一个符合条件的对象都列举出来。
例1.小华家到学校有3条路可走,从学校到文峰公园有4条路可走。从小华家到文峰公园,有几种不同的走法?
分析与解答:为了帮助理解题意,我们可以画出如上示意图。
我们把小华的不同走法一一列举如下:根据列举可知,从小明家经学校到文峰公园,走①路有4种不同走法,走②路有4种不同走法,走③路也有4种不同走法,共有4×3=12种不同走法。
练习一
1.从甲地到乙地,有3条公路直达,从乙地到丙地有2条铁路直达。从甲地到丙地有多少种不同走法?
2.新华书店有3种不同的英语书,4种不同的数学读物销售。小明想买一种英语书和一种数学读物,共有多少种不同买法?
例2.用红、绿、黄三种信号灯组成一种信号,可以组成多少种不同的信号?
分析与解答:要使信号不同,要求每一种信号颜色的顺序不同,我们可以把这些信号进行列举。可以看出,红色信号灯排在第一个位置时,有两种不同的信号,绿色信号灯排在第一个位置时,也有两种不同的信号,黄色信号灯排在第一个位置时,也有两种不同的信号,因而共有3个2种不同排列方法,即2×3=6种。
练习二
1.用红、黄、蓝三种颜色涂圆圈,每个圆圈涂一种颜色,一共有多少种不同的涂法?○○○
大愚教育中小学个性化学习中心
2.用2、3、5、7四个数字,可以组成多少个不同的四位数?
例3.一个长方形的周长是22米,如果它的长和宽都是整米数,那么这个长方形的面积有多少种可能?
分析与解答:由于长方形的周长是22米,可知它的长与宽之和为11米。下面列举出符合这个条件的各种长方形:
练习三
1.一个长方形的周长是30厘米,如果它的长和宽都是整厘米数,那么这个长方形的面积有多少种可能值?
2.3个自然数的乘积是18,问由这样的3个数所组成的数组有多少个?如(1.2.9)就是其中的一个,而且数组中数字相同但顺序不同的算作同一数组,如(1.2.9)和(2.9,1)是同一数组。
例4.有4位小朋友,寒假中互相通一次电话,他们一共打了多少次电话?
分析与解答:把4个小朋友分别编号:A、B、C、D,A与其他小朋友打电话,应该打3次,同样B小朋友也应打3次电话,同样C、D应该各打3次电话。4个小朋友,共打了3×4=12次。但题目要求两个小朋友之间只要通一次电话,那么A打电话给B时,A、B两人已经通过话了,所以B没有必要再打电话给A,照这样计算,12次电话中,有一半是重复计算的,所以实际打电话的次数是3×4÷2=6次。
练习四
1.6个小队进行排球比赛,每两队比赛一场,共要进行多少次比赛?
2.小芳出席由19人参加的联欢会,散会后,每两人都要握一次手,他们一共握了多少次手?
课后练习
1.明明有2件不同的上衣,3条不同的裤子,4双不同的鞋子。最多可搭配成多少种不同的装束?
2.用数字1、2、3.可以组成多少个不同的三位数?分别是哪几个数?
3把15个玻璃球分成数量不同的4堆,共有多少种不同的分法?
4.有8位小朋友,要互通一次电话,他们一共打了多少次电话?
第四篇:2011.10.25询盘总结
关于询盘的报告
第一封回盘非常重要,关系到后续客户会不会继续跟你交谈,对不的产品满不满意等问题,所以在第一封回盘时,要先对客户的询盘进行认真的分析。
拿到一份询盘,我们要先认真看清客户的资料,包括:对你的称呼、名字、哪种邮箱,国家。客户的产品需求等。其中国家很重要,我们要关注他们的时差问题,根据他们的活跃时间段给他们回复邮件,这样被关注率会大大提高,进一步的交流也会大大提高。
我们把询盘大致分为三种:
1、垃圾询盘,问一些不相关的信息,对于这种邮件可以直接pass掉。
2、群发询盘,这种询盘一般可以根据称呼来判断,如Dear sir,这种邮件一般是想寻找合作伙伴,不用马上给他回复,可以等把手头上重要的邮件回复完再去回复他们。这种客户一般是潜在客户,要持续和他们保持联系,了解他们的需求。必要的时候用不同邮箱跟他们交流。
3、高质量询盘,有针对性地问了产品问题或者直接给出订单等。这些邮件要认真揣测客户的意象,具体有下面几种形式。
(1)直接要报价单,这种邮件一般是群发的。第一次回复一定不能马上给我们的报价单。先跟他进行一些细节的交谈,看看客户是不是真诚的要买产品。比如问客户需要什么类型产品、规格、型号、材质、市场需求、以为的采购数量、有没有与中国供应商交易的经历等。如果客户有留下自己的公司名称,可以直接到谷歌去搜索一下。经过交谈我们也可以跟他推荐一下他们之前用过、我们有的一些新款产品,说出我们产品的优点等。
(2)如果询盘的邮件用很大的篇幅去描述他们的公司,就是针对一些大公司客户时,我们的回盘一定要专业。价格一般不是大公司考虑的首要问题,品质和服务是最重要的。我们要详细地举出我们产品品质的优势,回盘要让客户感受的我们的良好的服务质量。
(3)如果一些客户询盘是直接给出了要买哪种产品,型号,数量都已经说得很清楚,也就是说订单已经成了,现在只关心价格问题。这时他肯定针对的不只是你一个客户。所以我们一定要给出报价,价格要适当留一点空间,而且服务要好点,这种客户能成就马上成,不行就over了。不过如果这次订单没成的话,我们也要这个客户保存着,实时跟他联系,了解他的需求。这有一关键的点,就是如果你可以打电话,直接打电话更好。这样客户对你就印象深刻,也让客户知道你对他的重视。
我们要有针对地回复客户的询盘,比如一些客户有讲了他们公司的简介,我们回盘时也要相应介绍一下我们公司等。
报价问题,对小订单的报价,我们一般直接报总价(产品价格和一切运费杂费都加进去),对于大订单的报价,我们一般报基本价格和FOB,这两部分。
以上是我今天的心得总结。
Michael cheung
2011.12.25
第五篇:4月份复盘总结
4月份复盘总结
通过4月份的工作,监理单位对本月工作情况总结:
一、质量方面:
1、钢筋加工
钢筋料场方面:监理单位在上月对现场钢筋料场进行了严格管控,做到每日一检。对料场内钢筋的净长尺寸,弯钩长度,以及箍筋内截面尺寸进行实测实量,如实填写实测实量表格并及时上报给业主。通过上月监理对料场的严格管控,施工方在钢筋安装时减少了很多不必要的错误,加快了监理验收进度,同时也控制了现场的钢筋安装质量。
2、钢筋安装
上月监理单位严格按照图集及规范要求对钢筋安装方面进行了重点检查,对于措施筋,墙柱钢筋以及梁板筋进行了严格管控,包括钢筋搭接锚固长度问题,保护层问题,钢筋偏位问题,绑线满绑及垫块的铺放问题等。监理单位在验收过程中做到了过程中管控,对于现场每道施工工序做到提前验收,并做好实测实量工作。对于现场钢筋施工进度方面给予了最大的支持,施工方对于监理单位的要求也进行了相应的整改,但有些细节问题仍没有完全按照首件制制度进行施工。要求施工单位在本月的施工过程中对于细节问题进行进一步的管控。
3、模板安装
现场模板安装方面存在的问题相应较多,包括模板标高,垂直度,定位情况,模板加固情况以及现场支模架问题。监理单位在模板安装过程中进行了严格管控,并及时做好实测实量工作,对于不满足规范要求的地方,要求其立即整改。但对于部分问题的解决有了相应的难度,例如支模架的安装不能完全按照施工方案进行施工。要求下月在模板安装的过程中,施工单位必须对此类问题进行进一步整改,监理单位对模板安装加强管控。
4、混凝土浇筑
①监理单位对于混凝土浇筑做到了全程管控并做好旁站工作,对于现场混凝土浇筑过程中钢筋修补问题,混凝土标号问题,现场混凝土振捣问题做到了及时管控,并做好旁站记录。同时也对混凝土浇筑完成后的养护及成活面问题进行了及时跟踪,对于不满足规范要求问题,要求施工单位及时进行整改。
② 对于现场混凝土拆模后的墙面、梁底混凝土缺陷问题进行及
时跟踪。并对墙身截面尺寸,垂直度,平整度问题做好实测实量工作,并及时要求施工单位对于相应问题进行整改。
5、实测实量工作
上月监理单位对于实测实量工作进行了严格管控,在各项工序验收的过程中对于各道工序进行具有真实性的实测实量工作,并及时做好实测实量记录与台帐并要求施工单位进行100%。实测实量,对提升施工质量和施工速度起到了重要作用。
二、安全方面
1、外脚手架问题
上月监理单位对现场外脚手架安装问题进行了严格管控,并有了相应的改进。但在2013年施工过程中,对于外脚手架安装问题的遗留过多,监理单位已经及时发现并要求施工单位及时进行整改。希望施工单位在遗留问题整改过程中能做到进一步的管控,并加强管控力度。做到在最短的时间内将上述问题整改完毕。
2、支模架问题
监理单位在验收过程中,对于现场支模架问题进行了严格管控,包括支模架扫地杆,横杆、立杆间距,剪刀撑,U托,次龙骨间距,自由端横杆等问题。施工单位对于支模架的安装也有了相应改进,但仍有一些问题没有完全按照施工方案进行施工,希望施工单位在日后施工过程中能进一步加强管控。同时也将此项工作作为今后安全管控的重点。
3、临边洞口修复问题
监理单位在巡视过场中对于各栋号内洞口及临边防护问题进行跟踪检查,并且要求施工单位对于此类问题进行及时整改。但对于拆模后楼层洞口筋临边的防护问题监理单位虽然反复要求,但施工单位仍没有整改动作。在本月监理方重点加强这方面的管控。
4、配电箱管控问题
1、对于现场配电箱电线无接地,一闸多用,巡检记录不完整等
问题,监理单位已明确提出并要求施工单位及时进行整改。
三、内业资料问题
1、监理工程师通知单,联系单的下发与回复问题
监理单位对于现场各道工序发生的问题及时以监理通知单或联系单形式及时下发到施工单位,并要求施工单位及时整改并回复。但施工单位对监理通知单的回复严肃性没有高度的认识,对监理通知单的回复有敷衍现象。
2、原材料进厂管控问题
上月监理单位对于现场原材料进厂问题进行了重点控制,对于原材料外观,直径尺寸,合格证及炉批号进行重点验收,做好实测实量表格及影像资料等并及时汇总,做好台帐。如果发现原材料不符合规范要求,要求其立即退场。
3、浇筑令问题
① 混凝土浇筑前,要求施工单位将混凝土浇筑令及相应资料提前做好。所有人签字确认后方可允许施工单位进行混凝土浇筑。
② 对于浇筑令内各项隐蔽验收、检验批、测量放线、复试报告、施工单位自检记录(施工单位实测实量验收表)进行检查。合格后对与现场进行验收,并做好实测实量记录。
4、各类台帐的建立、存档问题
监理单位对所有台帐进行建立,并及时存档。
5、二次复试报告管控
监理单位对于现场钢筋送样及二次报告回复问题进行严控,并要求施工单位在二次复试报告问题加强管理。
6、会议纪要、监理例会等
上月监理单位对各项会议所提出的问题进行了充分的总结,并已会议纪要的形式下发给施工单位。同时监理单位也做到了问题的跟踪与解决,并要求施工单位对于会议内容上的问题进行及时整改与回复。每周做好监理例会总结,并将监理在每周发现的问题及下周工作重点及时上报给业主。
7、销项清单
监理单位坚持每周对现场施工进行检查,做好记录及影像资料。及时汇总成销项清单形式并下发给施工单位。对于发现的问题要求施工单位及时整改并回复。
四、现场文明施工问题
现场文明施工方面:本月监理单位重点管控了现场文明施工问题,对于现场钢筋加工区围挡,责任人标识牌,钢筋标识标牌,以及现场加工棚进行了严格检查,施工单位也积极的配合了监理单位的工作,对现场文明施工情况进行了及时整改。但现场钢筋料场仍有不足的地方,包括弯曲机芯轴问题,现场机械未能全部在加工棚内进行加工问题等。监理单位应对此类问题进行进一步的管控。
通过上月各栋号首件制制度的落实,施工单位对于各道工序的质量方面有了明显的改进。但仍有一些问题没有完全按照首件制制度执
行,希望施工单位在日后的施工过程中能完全按照首件制制度执行。监理单位对于日后的施工工作加强管控,同时也希望业主对监理单位的工作给予支持。