• 本设计采用的STM32F103芯片为核心,通过它定时准确、操作多样、调用便捷等性能进行主操控。以最先进的RFID射频读写模块为主运用,通过采用平板天线的方式自动识别货架货物的RFID电子标签,能够快捷准确定位货物位置...
  • 针对传统仓储管理模式中...对基于RFID的物流仓储管理信息系统进行了需求分析,通过对传统物流仓储业务流程进行分析研究,给出了物流仓储业务流程的信息和过程结构,并建立了基于RFID技术的仓储业务系统实施架构方法。
  • 基于51单片机的RFID RC522智能钱包,这个程序主要演示的是RFID RC522智能钱包中的设置及扣款功能,相信会扣款那么充值也就改一个数字的事,具体的功能要自己根据实际情况进行编写,下面是代码: #include "reg...
    			RFID RC522智能钱包
    

    基于51单片机的RFID RC522智能钱包,这个程序主要演示的是RFID RC522智能钱包中的设置及扣款功能,相信会扣款那么充值也就改一个数字的事,具体的功能要自己根据实际情况进行编写,下面是代码:

    #include "reg52.h"
    #include "main.h"
    #include "mfrc522.h"	
    #include <string.h>
    //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
    //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反 
    unsigned char code data2[4]  = {0x01,0,0,0};
    unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 
    unsigned char g_ucTempbuf[20];    
    unsigned char idata MLastSelectedSnr[4];
    unsigned char idata RevBuffer[30];  
    //unsigned char data IDBuffer[20]; 
    void ID_Verify();			   
    void delay_ms(unsigned int ms);			   
    
    void iccardcode()
    {	     
      	unsigned char cmd;
    	unsigned char status;
    	
    	cmd = RevBuffer[0];
    	switch(cmd)
     	{
    		case 1:     // Halt the card     //终止卡的操作
    			status= PcdHalt();;			
    			RevBuffer[0]=1;
    			RevBuffer[1]=status;
    			break;			
    		case 2:     // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
    			 // 寻卡,防冲突,选择卡    返回卡类型(2 bytes)+ 卡系列号(4 bytes)
    			status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
    			if(status!=0)
    			{
    				status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
    				if(status!=0)				
    				{
    					RevBuffer[0]=1;	
    					RevBuffer[1]=status;
    					break;
    				}
    			}  
    			RevBuffer[0]=3;	
    			RevBuffer[1]=status;
    			break;
    			
    		case 3:                         // 防冲突 读卡的系列号 MLastSelectedSnr
    			status = PcdAnticoll(&RevBuffer[2]);
    			if(status!=0)
    			{
    				RevBuffer[0]=1;	
    				RevBuffer[1]=status;
    				break;
    			}
    			memcpy(MLastSelectedSnr,&RevBuffer[2],4);
    			RevBuffer[0]=5;
    			RevBuffer[1]=status;
    			break;	
    		case 4:		                    // 选择卡 Select Card
    			status=PcdSelect(MLastSelectedSnr);
    			if(status!=MI_OK)
    			{
    				RevBuffer[0]=1;	
    				RevBuffer[1]=status;
    				break;
    			}
    			RevBuffer[0]=3;
    			RevBuffer[1]=status;			
    			break;
    		case 5:	    // Key loading into the MF RC500's EEPROM
                status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校验卡密码
    			RevBuffer[0]=1;
    			RevBuffer[1]=status;			
    			break;							
    		case 6: 
    			RevBuffer[0]=1;
    			RevBuffer[1]=status;			
    			break;				
    		case 7:     
        		RevBuffer[0]=1;
    			RevBuffer[1]=status;			
    			break;
    		case 8:     // Read the mifare card
    		            // 读卡
    			status=PcdRead(RevBuffer[1],&RevBuffer[2]);
    			if(status==0)
    			{RevBuffer[0]=17;}
    			else
    			{RevBuffer[0]=1;}
    			RevBuffer[1]=status;			
    			break;
    		case 9:     // Write the mifare card
    		            // 写卡  下载密码
    			status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
    			RevBuffer[0]=1;
    			RevBuffer[1]=status;			
    			break;
    		case 10:
                PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
    			RevBuffer[0]=1;	
    			RevBuffer[1]=status;
    			break;
    		case 12:    // 参数设置
    		    PcdBakValue(RevBuffer[1], RevBuffer[2]);
    			RevBuffer[0]=1;	//contact
    			RevBuffer[1]=0;
    			break;		
    	}
    
    	}											 
    /////////////////////////////////////////////////////////////////////
    //系统初始化
    /////////////////////////////////////////////////////////////////////
    void InitializeSystem()
    {
        P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;
    
    	SCON=0X50;			//设置为工作方式1
    	TMOD=0X20;			//设置计数器工作方式2
    	PCON=0X80;			//波特率加倍
    	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
    	TL1=0XF3;
    	ES=1;						//打开接收中断
    	EA=1;						//打开总中断
    	TR1=1;					//打开计数    
    
        LED_GREEN = 1;
        PcdReset();
        PcdAntennaOff(); 
        PcdAntennaOn();  
    	M500PcdConfigISOType( 'A' );
        LED_GREEN = 0;
     	delay_10ms(10);	
        LED_GREEN = 1;
     	delay_10ms(10);
        LED_GREEN = 0;
    }
    
    ///////////////////////////////////////////////////////////////////////
    // 接收和发送中断
    ///////////////////////////////////////////////////////////////////////
    void isr_UART(void) interrupt 4 using 1
    {
        unsigned char len, i;
    	if(TI)
    	{
    		TI=0;
    		len=RevBuffer[0];
    		for(i=0;i<len+1;i++)
    		{
    			SBUF=RevBuffer[i];
    			while(!TI);
    			TI=0;			
    		}
    		REN=1;
    	}
    }
    
    
    
      void main( )
    {   
        InitializeSystem( );
    	ID_Verify();
        
    }
    void delay_ms(unsigned int ms)
    {
    	unsigned int m,n;
    	for(m=ms;m>0;m--)
    		for(n=110;n>0;n--);
    
    }
    
    void ID_Verify()
    {
     	while(1)
    	{
    	 //寻卡
    	 RevBuffer[0]=2;
    	 RevBuffer[1]=0x52;
    	 iccardcode();
    	 if(RevBuffer[1]!=0)
    	 {
    	 	continue;
    	 }
    	
    	 //防冲突
    	 RevBuffer[0]=0x03;
    	 iccardcode();
    	 if(RevBuffer[1]!=0)
    	 {
    	 	continue;
    	 }
    
    	 //选择卡
    	 RevBuffer[0]=0x04;
    	 iccardcode();
    	 if(RevBuffer[1]!=0)
    	 {
    	 	continue;
    	 }
    	 
    	 //密码检验 
    	 RevBuffer[0]=0x05;
    	 RevBuffer[1]=0x61;
    	 RevBuffer[3]=0x08;
    	 iccardcode();
    	 if(RevBuffer[1]!=0)
    	 {
    	 	continue;
    	 }
       	 //读09块的16个字节数据
    	 RevBuffer[0]=0x08;
    	 RevBuffer[1]=0x09;
    	 iccardcode();
    	 if(RevBuffer[1]!=0)
    	 {
    	 	continue;
    	 }
    	 TI=1;
    	//扣款
    	 RevBuffer[0]=0x0A;//cmd
    	 RevBuffer[1]=0xC0;//扣款
    	 RevBuffer[2]=0x09;//地址09块
    	 RevBuffer[3]= data2[0];
    	 RevBuffer[4]= data2[1];
    	 RevBuffer[5]= data2[2];
    	 RevBuffer[6]= data2[3];
    	 iccardcode();
    	 if(RevBuffer[1]!=0)
    	 {
    	 	continue;
    	 }
    
    	 //读09块的16个字节数据
    	 RevBuffer[0]=0x08;
    	 RevBuffer[1]=0x09;
    	 iccardcode();
    	 if(RevBuffer[1]!=0)
    	 {
    	 	continue;
    	 }
    	 if(RevBuffer[1]==0)
    	 {
    	 	LED_SWITCH=0;
    		delay_ms(1000);
    		LED_SWITCH=1;
    	 }
    	 TI=1;
    
    	}
    }
    
    
    
    //////////////////////////////////
    //端口定义
    /////////////////////////////////////////////////////////////////////
    //MFRC522
    sbit     MF522_RST  =    P1^4;                   //RC500片选
    sbit     MF522_NSS  =    P1^0;
    sbit     MF522_SCK  =    P1^1;
    sbit     MF522_SI   =    P1^2;
    sbit     MF522_SO   =    P1^3;
    //指示灯
    sbit     LED_GREEN  =    P1^5;
    sbit     LED_SWITCH = P1^6;    
    /////////////////////////////////////////////////////////////////////
    //函数原型
    /////////////////////////////////////////////////////////////////////
    void InitializeSystem();                                   
    #define BAUD_115200             256 - (OSC_FREQ/192L)/115200L   // 255
    #define BAUD_57600              256 - (OSC_FREQ/192L)/57600L    // 254
    #define BAUD_38400              256 - (OSC_FREQ/192L)/38400L    // 253
    #define BAUD_28800              256 - (OSC_FREQ/192L)/28800L    // 252
    #define BAUD_19200              256 - (OSC_FREQ/192L)/19200L    // 250
    #define BAUD_14400              256 - (OSC_FREQ/192L)/14400L    // 248
    #define BAUD_9600               256 - (OSC_FREQ/192L)/9600L     // 244                                   
    #define OSC_FREQ                22118400L
    //#define  OSC_FREQ        7372800L
    #define OSC_FREQ          22118400L
    #define  RCAP2_50us      65536L - OSC_FREQ/40417L
    #define  RCAP2_1ms       65536L - OSC_FREQ/2000L
    #define  RCAP2_10ms      65536L - OSC_FREQ/1200L
    #define  TIME0_500us     65536L - OSC_FREQ/8000L
    #define  TIME0_10ms      65536L - OSC_FREQ/200
    
    
    
    
    
    #define CALL_isr_UART()         TI = 1
    #define TRUE 1
    #define FALSE 0
    
    
    
    #include <intrins.h>
    #include "reg52.h"
    #include "main.h"
    #include "mfrc522.h"
    #include <string.h> 
    #define MAXRLEN 18                        
    /////////////////////////////////////////////////////////////////////
    //功    能:寻卡
    //参数说明: req_code[IN]:寻卡方式
    //                0x52 = 寻感应区内所有符合14443A标准的卡
    //                0x26 = 寻未进入休眠状态的卡
    //          pTagType[OUT]:卡片类型代码
    //                0x4400 = Mifare_UltraLight
    //                0x0400 = Mifare_One(S50)
    //                0x0200 = Mifare_One(S70)
    //                0x0800 = Mifare_Pro(X)
    //                0x4403 = Mifare_DESFire
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////
    char PcdRequest(unsigned char req_code,unsigned char *pTagType)
    {
       char status;  
       unsigned int  unLen;
       unsigned char ucComMF522Buf[MAXRLEN]; 
    //  unsigned char xTest ;
       ClearBitMask(Status2Reg,0x08);
       WriteRawRC(BitFramingReg,0x07);
    
    //  xTest = ReadRawRC(BitFramingReg);
    //  if(xTest == 0x07 )
     //   { LED_GREEN  =0 ;}
     // else {LED_GREEN =1 ;while(1){}}
       SetBitMask(TxControlReg,0x03);
     
       ucComMF522Buf[0] = req_code;
    
       status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
    //     if(status  == MI_OK )
    //   { LED_GREEN  =0 ;}
    //   else {LED_GREEN =1 ;}
       if ((status == MI_OK) && (unLen == 0x10))
       {    
           *pTagType     = ucComMF522Buf[0];
           *(pTagType+1) = ucComMF522Buf[1];
       }
       else
       {   status = MI_ERR;   }
       
       return status;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:防冲撞
    //参数说明: pSnr[OUT]:卡片序列号,4字节
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////  
    char PcdAnticoll(unsigned char *pSnr)
    {
        char status;
        unsigned char i,snr_check=0;
        unsigned int  unLen;
        unsigned char ucComMF522Buf[MAXRLEN]; 
        
    
        ClearBitMask(Status2Reg,0x08);
        WriteRawRC(BitFramingReg,0x00);
        ClearBitMask(CollReg,0x80);
     
        ucComMF522Buf[0] = PICC_ANTICOLL1;
        ucComMF522Buf[1] = 0x20;
    
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
    
        if (status == MI_OK)
        {
        	 for (i=0; i<4; i++)
             {   
                 *(pSnr+i)  = ucComMF522Buf[i];
                 snr_check ^= ucComMF522Buf[i];
             }
             if (snr_check != ucComMF522Buf[i])
             {   status = MI_ERR;    }
        }
        
        SetBitMask(CollReg,0x80);
        return status;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:选定卡片
    //参数说明: pSnr[IN]:卡片序列号,4字节
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////
    char PcdSelect(unsigned char *pSnr)
    {
        char status;
        unsigned char i;
        unsigned int  unLen;
        unsigned char ucComMF522Buf[MAXRLEN]; 
        
        ucComMF522Buf[0] = PICC_ANTICOLL1;
        ucComMF522Buf[1] = 0x70;
        ucComMF522Buf[6] = 0;
        for (i=0; i<4; i++)
        {
        	ucComMF522Buf[i+2] = *(pSnr+i);
        	ucComMF522Buf[6]  ^= *(pSnr+i);
        }
        CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
      
        ClearBitMask(Status2Reg,0x08);
    
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
        
        if ((status == MI_OK) && (unLen == 0x18))
        {   status = MI_OK;  }
        else
        {   status = MI_ERR;    }
    
        return status;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:验证卡片密码
    //参数说明: auth_mode[IN]: 密码验证模式
    //                 0x60 = 验证A密钥
    //                 0x61 = 验证B密钥 
    //          addr[IN]:块地址
    //          pKey[IN]:密码
    //          pSnr[IN]:卡片序列号,4字节
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////               
    char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
    {
        char status;
        unsigned int  unLen;
        unsigned char i,ucComMF522Buf[MAXRLEN]; 
    
        ucComMF522Buf[0] = auth_mode;
        ucComMF522Buf[1] = addr;
        for (i=0; i<6; i++)
        {    ucComMF522Buf[i+2] = *(pKey+i);   }
        for (i=0; i<6; i++)
        {    ucComMF522Buf[i+8] = *(pSnr+i);   }
     //   memcpy(&ucComMF522Buf[2], pKey, 6); 
     //   memcpy(&ucComMF522Buf[8], pSnr, 4); 
        
        status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);
        if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08)))
        {   status = MI_ERR;   }
        
        return status;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:读取M1卡一块数据
    //参数说明: addr[IN]:块地址
    //          pData[OUT]:读出的数据,16字节
    //返    回: 成功返回MI_OK
    ///////////////////////////////////////////////////////////////////// 
    char PcdRead(unsigned char addr,unsigned char *pData)
    {
        char status;
        unsigned int  unLen;
        unsigned char i,ucComMF522Buf[MAXRLEN]; 
    
        ucComMF522Buf[0] = PICC_READ;
        ucComMF522Buf[1] = addr;
        CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
       
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
        if ((status == MI_OK) && (unLen == 0x90))
     //   {   memcpy(pData, ucComMF522Buf, 16);   }
        {
            for (i=0; i<16; i++)
            {    *(pData+i) = ucComMF522Buf[i];   }
        }
        else
        {   status = MI_ERR;   }
        
        return status;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:写数据到M1卡一块
    //参数说明: addr[IN]:块地址
    //          pData[IN]:写入的数据,16字节
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////                  
    char PcdWrite(unsigned char addr,unsigned char *pData)
    {
        char status;
        unsigned int  unLen;
        unsigned char i,ucComMF522Buf[MAXRLEN]; 
        
        ucComMF522Buf[0] = PICC_WRITE;
        ucComMF522Buf[1] = addr;
        CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
     
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    
        if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
        {   status = MI_ERR;   }
            
        if (status == MI_OK)
        {
            //memcpy(ucComMF522Buf, pData, 16);
            for (i=0; i<16; i++)
            {    ucComMF522Buf[i] = *(pData+i);   }
            CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);
    
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);
            if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
            {   status = MI_ERR;   }
        }
        
        return status;
    }
    
    
    
    /////////////////////////////////////////////////////////////////////
    //功    能:命令卡片进入休眠状态
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////
    char PcdHalt(void)
    {
        char status;
        unsigned int  unLen;
        unsigned char ucComMF522Buf[MAXRLEN]; 
    
        ucComMF522Buf[0] = PICC_HALT;
        ucComMF522Buf[1] = 0;
        CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
     
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    
        return MI_OK;
    }
    
    /////////////////////////////////////////////////////////////////////
    //用MF522计算CRC16函数
    /////////////////////////////////////////////////////////////////////
    void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData)
    {
        unsigned char i,n;
        ClearBitMask(DivIrqReg,0x04);
        WriteRawRC(CommandReg,PCD_IDLE);
        SetBitMask(FIFOLevelReg,0x80);
        for (i=0; i<len; i++)
        {   WriteRawRC(FIFODataReg, *(pIndata+i));   }
        WriteRawRC(CommandReg, PCD_CALCCRC);
        i = 0xFF;
        do 
        {
            n = ReadRawRC(DivIrqReg);
            i--;
        }
        while ((i!=0) && !(n&0x04));
        pOutData[0] = ReadRawRC(CRCResultRegL);
        pOutData[1] = ReadRawRC(CRCResultRegM);
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:复位RC522
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////
    char PcdReset(void)
    {
        MF522_RST=1;
        _nop_();
        MF522_RST=0;
        _nop_();
        MF522_RST=1;
         _nop_();
        WriteRawRC(CommandReg,PCD_RESETPHASE);
        _nop_();
        
        WriteRawRC(ModeReg,0x3D);            //和Mifare卡通讯,CRC初始值0x6363
        WriteRawRC(TReloadRegL,30);           
        WriteRawRC(TReloadRegH,0);
        WriteRawRC(TModeReg,0x8D);
        WriteRawRC(TPrescalerReg,0x3E);
        WriteRawRC(TxAutoReg,0x40);     
        return MI_OK;
    }
    //////////////////////////////////////////////////////////////////////
    //设置RC632的工作方式 
    //////////////////////////////////////////////////////////////////////
    char M500PcdConfigISOType(unsigned char type)
    {
       if (type == 'A')                     //ISO14443_A
       { 
           ClearBitMask(Status2Reg,0x08);
    
     /*     WriteRawRC(CommandReg,0x20);    //as default   
           WriteRawRC(ComIEnReg,0x80);     //as default
           WriteRawRC(DivlEnReg,0x0);      //as default
    	   WriteRawRC(ComIrqReg,0x04);     //as default
    	   WriteRawRC(DivIrqReg,0x0);      //as default
    	   WriteRawRC(Status2Reg,0x0);//80    //trun off temperature sensor
    	   WriteRawRC(WaterLevelReg,0x08); //as default
           WriteRawRC(ControlReg,0x20);    //as default
    	   WriteRawRC(CollReg,0x80);    //as default
    */
           WriteRawRC(ModeReg,0x3D);//3F
    /*	   WriteRawRC(TxModeReg,0x0);      //as default???
    	   WriteRawRC(RxModeReg,0x0);      //as default???
    	   WriteRawRC(TxControlReg,0x80);  //as default???
    
    	   WriteRawRC(TxSelReg,0x10);      //as default???
       */
           WriteRawRC(RxSelReg,0x86);//84
     //      WriteRawRC(RxThresholdReg,0x84);//as default
     //      WriteRawRC(DemodReg,0x4D);      //as default
    
     //      WriteRawRC(ModWidthReg,0x13);//26
           WriteRawRC(RFCfgReg,0x7F);   //4F
    	/*   WriteRawRC(GsNReg,0x88);        //as default???
    	   WriteRawRC(CWGsCfgReg,0x20);    //as default???
           WriteRawRC(ModGsCfgReg,0x20);   //as default???
    */
       	   WriteRawRC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec) 
    	   WriteRawRC(TReloadRegH,0);
           WriteRawRC(TModeReg,0x8D);
    	   WriteRawRC(TPrescalerReg,0x3E);
    	   
    
      //     PcdSetTmo(106);
    	    		delay_10ms(1);
           PcdAntennaOn();
       }
       else{ return -1; }
       
       return MI_OK;
    }
    /////////////////////////////////////////////////////////////////////
    //功    能:读RC632寄存器
    //参数说明:Address[IN]:寄存器地址
    //返    回:读出的值
    /////////////////////////////////////////////////////////////////////
    unsigned char ReadRawRC(unsigned char Address)
    {
         unsigned char i, ucAddr;
         unsigned char ucResult=0;
    
         MF522_SCK = 0;
         MF522_NSS = 0;
         ucAddr = ((Address<<1)&0x7E)|0x80;
    
         for(i=8;i>0;i--)
         {
             MF522_SI = ((ucAddr&0x80)==0x80);
             MF522_SCK = 1;
             ucAddr <<= 1;
             MF522_SCK = 0;
         }
    
         for(i=8;i>0;i--)
         {
             MF522_SCK = 1;
             ucResult <<= 1;
             ucResult|=(bit)MF522_SO;
             MF522_SCK = 0;
         }
    
         MF522_NSS = 1;
         MF522_SCK = 1;
         return ucResult;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:写RC632寄存器
    //参数说明:Address[IN]:寄存器地址
    //          value[IN]:写入的值
    /////////////////////////////////////////////////////////////////////
    void WriteRawRC(unsigned char Address, unsigned char value)
    {  
        unsigned char i, ucAddr;
    
        MF522_SCK = 0;
        MF522_NSS = 0;
        ucAddr = ((Address<<1)&0x7E);
    
        for(i=8;i>0;i--)
        {
            MF522_SI = ((ucAddr&0x80)==0x80);
            MF522_SCK = 1;
            ucAddr <<= 1;
            MF522_SCK = 0;
        }
    
        for(i=8;i>0;i--)
        {
            MF522_SI = ((value&0x80)==0x80);
            MF522_SCK = 1;
            value <<= 1;
            MF522_SCK = 0;
        }
        MF522_NSS = 1;
        MF522_SCK = 1;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:置RC522寄存器位
    //参数说明:reg[IN]:寄存器地址
    //          mask[IN]:置位值
    /////////////////////////////////////////////////////////////////////
    void SetBitMask(unsigned char reg,unsigned char mask)  
    {
        char tmp = 0x0;
        tmp = ReadRawRC(reg);
        WriteRawRC(reg,tmp | mask);  // set bit mask
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:清RC522寄存器位
    //参数说明:reg[IN]:寄存器地址
    //          mask[IN]:清位值
    /////////////////////////////////////////////////////////////////////
    void ClearBitMask(unsigned char reg,unsigned char mask)  
    {
        char tmp = 0x0;
        tmp = ReadRawRC(reg);
        WriteRawRC(reg, tmp & ~mask);  // clear bit mask
    } 
    
    /////////////////////////////////////////////////////////////////////
    //功    能:通过RC522和ISO14443卡通讯
    //参数说明:Command[IN]:RC522命令字
    //          pInData[IN]:通过RC522发送到卡片的数据
    //          InLenByte[IN]:发送数据的字节长度
    //          pOutData[OUT]:接收到的卡片返回数据
    //          *pOutLenBit[OUT]:返回数据的位长度
    /////////////////////////////////////////////////////////////////////
    char PcdComMF522(unsigned char Command, 
                     unsigned char *pInData, 
                     unsigned char InLenByte,
                     unsigned char *pOutData, 
                     unsigned int  *pOutLenBit)
    {
        char status = MI_ERR;
        unsigned char irqEn   = 0x00;
        unsigned char waitFor = 0x00;
        unsigned char lastBits;
        unsigned char n;
        unsigned int i;
        switch (Command)
        {
           case PCD_AUTHENT:
              irqEn   = 0x12;
              waitFor = 0x10;
              break;
           case PCD_TRANSCEIVE:
              irqEn   = 0x77;
              waitFor = 0x30;
              break;
           default:
             break;
        }
       
        WriteRawRC(ComIEnReg,irqEn|0x80);
        ClearBitMask(ComIrqReg,0x80);
        WriteRawRC(CommandReg,PCD_IDLE);
        SetBitMask(FIFOLevelReg,0x80);
        
        for (i=0; i<InLenByte; i++)
        {   WriteRawRC(FIFODataReg, pInData[i]);    }
        WriteRawRC(CommandReg, Command);
       
        
        if (Command == PCD_TRANSCEIVE)
        {    SetBitMask(BitFramingReg,0x80);  }
        
    //    i = 600;//根据时钟频率调整,操作M1卡最大等待时间25ms
     i = 2000;
        do 
        {
             n = ReadRawRC(ComIrqReg);
             i--;
        }
        while ((i!=0) && !(n&0x01) && !(n&waitFor));
        ClearBitMask(BitFramingReg,0x80);
    	      
        if (i!=0)
        {    
             if(!(ReadRawRC(ErrorReg)&0x1B))
             {
                 status = MI_OK;
                 if (n & irqEn & 0x01)
                 {   status = MI_NOTAGERR;   }
                 if (Command == PCD_TRANSCEIVE)
                 {
                   	n = ReadRawRC(FIFOLevelReg);
                  	lastBits = ReadRawRC(ControlReg) & 0x07;
                    if (lastBits)
                    {   *pOutLenBit = (n-1)*8 + lastBits;   }
                    else
                    {   *pOutLenBit = n*8;   }
                    if (n == 0)
                    {   n = 1;    }
                    if (n > MAXRLEN)
                    {   n = MAXRLEN;   }
                    for (i=0; i<n; i++)
                    {   pOutData[i] = ReadRawRC(FIFODataReg);    }
                }
             }
             else
             {   status = MI_ERR;   }
            
       }
       
    
       SetBitMask(ControlReg,0x80);           // stop timer now
       WriteRawRC(CommandReg,PCD_IDLE); 
       return status;
    }
    
    
    /////////////////////////////////////////////////////////////////////
    //开启天线  
    //每次启动或关闭天险发射之间应至少有1ms的间隔
    /////////////////////////////////////////////////////////////////////
    void PcdAntennaOn()
    {
        unsigned char i;
        i = ReadRawRC(TxControlReg);
        if (!(i & 0x03))
        {
            SetBitMask(TxControlReg, 0x03);
        }
    }
    
    
    /////////////////////////////////////////////////////////////////////
    //关闭天线
    /////////////////////////////////////////////////////////////////////
    void PcdAntennaOff()
    {
        ClearBitMask(TxControlReg, 0x03);
    }
    
    
    /////////////////////////////////////////////////////////////////////
    //功    能:扣款和充值
    //参数说明: dd_mode[IN]:命令字
    //               0xC0 = 扣款
    //               0xC1 = 充值
    //          addr[IN]:钱包地址
    //          pValue[IN]:4字节增(减)值,低位在前
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////                 
    char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue)
    {
        char status;
        unsigned int  unLen;
        unsigned char ucComMF522Buf[MAXRLEN]; 
        
        ucComMF522Buf[0] = dd_mode;
        ucComMF522Buf[1] = addr;
        CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
     
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    
        if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
        {   status = MI_ERR;   }
            
        if (status == MI_OK)
        {
            memcpy(ucComMF522Buf, pValue, 4);
    //        for (i=0; i<16; i++)
    //        {    ucComMF522Buf[i] = *(pValue+i);   }
            CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
            unLen = 0;
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
            if (status != MI_ERR)
            {    status = MI_OK;    }
        }
        
        if (status == MI_OK)
        {
            ucComMF522Buf[0] = PICC_TRANSFER;
            ucComMF522Buf[1] = addr;
            CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]); 
       
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    
            if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
            {   status = MI_ERR;   }
        }
        return status;
    }
    
    /////////////////////////////////////////////////////////////////////
    //功    能:备份钱包
    //参数说明: sourceaddr[IN]:源地址
    //          goaladdr[IN]:目标地址
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////
    char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr)
    {
        char status;
        unsigned int  unLen;
        unsigned char ucComMF522Buf[MAXRLEN]; 
    
        ucComMF522Buf[0] = PICC_RESTORE;
        ucComMF522Buf[1] = sourceaddr;
        CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
     
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    
        if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
        {   status = MI_ERR;   }
        
        if (status == MI_OK)
        {
            ucComMF522Buf[0] = 0;
            ucComMF522Buf[1] = 0;
            ucComMF522Buf[2] = 0;
            ucComMF522Buf[3] = 0;
            CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
     
            status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
            if (status != MI_ERR)
            {    status = MI_OK;    }
        }
        
        if (status != MI_OK)
        {    return MI_ERR;   }
        
        ucComMF522Buf[0] = PICC_TRANSFER;
        ucComMF522Buf[1] = goaladdr;
    
        CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
     
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    
        if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
        {   status = MI_ERR;   }
    
        return status;
    }
    
    
    ///////////////////////////////////////////////////////////////////////
    // Delay 10ms
    ///////////////////////////////////////////////////////////////////////
    void delay_10ms(unsigned int _10ms)
    {
    #ifndef NO_TIMER2
        RCAP2LH = RCAP2_10ms;
        T2LH    = RCAP2_10ms;
        
        TR2 = TRUE;
        while (_10ms--)
        {
    	    while (!TF2);
    	    TF2 = FALSE;
        }
        TR2 = FALSE;
    #else
        while (_10ms--)
        {
    	    delay_50us(19);
    	    if (CmdValid)
    	        return;
    	    delay_50us(20);
    	    if (CmdValid)
    	        return;
    	    delay_50us(20);
    	    if (CmdValid)
    	        return;
    	    delay_50us(20);
    	    if (CmdValid)
    	        return;
    	    delay_50us(20);
    	    if (CmdValid )
    	        return;
    	    delay_50us(20);
    	    if (CmdValid)
    	        return;
    	    delay_50us(20);
    	    if (CmdValid)
    	        return;
    	    delay_50us(20);
    	    if (CmdValid)
    	        return;
    	    delay_50us(20);
    	    if (CmdValid)
    	        return;
    	    delay_50us(19);
    	    if (CmdValid)
    	        return;
        }
    #endif
    }
    
    
    /////////////////////////////////////////////////////////////////////
    //函数原型
    /////////////////////////////////////////////////////////////////////
    char PcdReset(void);
    void PcdAntennaOn(void);
    void PcdAntennaOff(void);
    char PcdRequest(unsigned char req_code,unsigned char *pTagType);   
    char PcdAnticoll(unsigned char *pSnr);
    char PcdSelect(unsigned char *pSnr);         
    char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr);     
    char PcdRead(unsigned char addr,unsigned char *pData);     
    char PcdWrite(unsigned char addr,unsigned char *pData);    
    char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue);   
    char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr);                                 
    char PcdHalt(void);
    char PcdComMF522(unsigned char Command, 
                     unsigned char *pInData, 
                     unsigned char InLenByte,
                     unsigned char *pOutData, 
                     unsigned int  *pOutLenBit);
    void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData);
    void WriteRawRC(unsigned char Address,unsigned char value);
    unsigned char ReadRawRC(unsigned char Address); 
    void SetBitMask(unsigned char reg,unsigned char mask); 
    void ClearBitMask(unsigned char reg,unsigned char mask); 
    char M500PcdConfigISOType(unsigned char type);
    void delay_10ms(unsigned int _10ms);
    void iccardcode();
    char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr);
    char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue);
    /////////////////////////////////////////////////////////////////////
    //MF522命令字
    /////////////////////////////////////////////////////////////////////
    #define PCD_IDLE              0x00               //取消当前命令
    #define PCD_AUTHENT           0x0E               //验证密钥
    #define PCD_RECEIVE           0x08               //接收数据
    #define PCD_TRANSMIT          0x04               //发送数据
    #define PCD_TRANSCEIVE        0x0C               //发送并接收数据
    #define PCD_RESETPHASE        0x0F               //复位
    #define PCD_CALCCRC           0x03               //CRC计算
    
    /////////////////////////////////////////////////////////////////////
    //Mifare_One卡片命令字
    /////////////////////////////////////////////////////////////////////
    #define PICC_REQIDL           0x26               //寻天线区内未进入休眠状态
    #define PICC_REQALL           0x52               //寻天线区内全部卡
    #define PICC_ANTICOLL1        0x93               //防冲撞
    #define PICC_ANTICOLL2        0x95               //防冲撞
    #define PICC_AUTHENT1A        0x60               //验证A密钥
    #define PICC_AUTHENT1B        0x61               //验证B密钥
    #define PICC_READ             0x30               //读块
    #define PICC_WRITE            0xA0               //写块
    #define PICC_DECREMENT        0xC0               //扣款
    #define PICC_INCREMENT        0xC1               //充值
    #define PICC_RESTORE          0xC2               //调块数据到缓冲区
    #define PICC_TRANSFER         0xB0               //保存缓冲区中数据
    #define PICC_HALT             0x50               //休眠
    
    /////////////////////////////////////////////////////////////////////
    //MF522 FIFO长度定义
    /////////////////////////////////////////////////////////////////////
    #define DEF_FIFO_LENGTH       64                 //FIFO size=64byte
    
    /////////////////////////////////////////////////////////////////////
    //MF522寄存器定义
    /////////////////////////////////////////////////////////////////////
    // PAGE 0
    #define     RFU00                 0x00    
    #define     CommandReg            0x01    
    #define     ComIEnReg             0x02    
    #define     DivlEnReg             0x03    
    #define     ComIrqReg             0x04    
    #define     DivIrqReg             0x05
    #define     ErrorReg              0x06    
    #define     Status1Reg            0x07    
    #define     Status2Reg            0x08    
    #define     FIFODataReg           0x09
    #define     FIFOLevelReg          0x0A
    #define     WaterLevelReg         0x0B
    #define     ControlReg            0x0C
    #define     BitFramingReg         0x0D
    #define     CollReg               0x0E
    #define     RFU0F                 0x0F
    // PAGE 1     
    #define     RFU10                 0x10
    #define     ModeReg               0x11
    #define     TxModeReg             0x12
    #define     RxModeReg             0x13
    #define     TxControlReg          0x14
    #define     TxAutoReg             0x15
    #define     TxSelReg              0x16
    #define     RxSelReg              0x17
    #define     RxThresholdReg        0x18
    #define     DemodReg              0x19
    #define     RFU1A                 0x1A
    #define     RFU1B                 0x1B
    #define     MifareReg             0x1C
    #define     RFU1D                 0x1D
    #define     RFU1E                 0x1E
    #define     SerialSpeedReg        0x1F
    // PAGE 2    
    #define     RFU20                 0x20  
    #define     CRCResultRegM         0x21
    #define     CRCResultRegL         0x22
    #define     RFU23                 0x23
    #define     ModWidthReg           0x24
    #define     RFU25                 0x25
    #define     RFCfgReg              0x26
    #define     GsNReg                0x27
    #define     CWGsCfgReg            0x28
    #define     ModGsCfgReg           0x29
    #define     TModeReg              0x2A
    #define     TPrescalerReg         0x2B
    #define     TReloadRegH           0x2C
    #define     TReloadRegL           0x2D
    #define     TCounterValueRegH     0x2E
    #define     TCounterValueRegL     0x2F
    // PAGE 3      
    #define     RFU30                 0x30
    #define     TestSel1Reg           0x31
    #define     TestSel2Reg           0x32
    #define     TestPinEnReg          0x33
    #define     TestPinValueReg       0x34
    #define     TestBusReg            0x35
    #define     AutoTestReg           0x36
    #define     VersionReg            0x37
    #define     AnalogTestReg         0x38
    #define     TestDAC1Reg           0x39  
    #define     TestDAC2Reg           0x3A   
    #define     TestADCReg            0x3B   
    #define     RFU3C                 0x3C   
    #define     RFU3D                 0x3D   
    #define     RFU3E                 0x3E   
    #define     RFU3F		  0x3F
    
    /////////////////////////////////////////////////////////////////////
    //和MF522通讯时返回的错误代码
    /////////////////////////////////////////////////////////////////////
    #define MI_OK                          0
    #define MI_NOTAGERR                    (-1)
    #define MI_ERR                         (-2)
    
    
    
    当向单片机发送控制的数据的时候要注意的规定为:
    
    发送时格式为:数据长度+控制位(RevBuffer[0])+数据(RevBuffer[]。。。。。。。。。。。)
    发送时格式为:数据长度(RevBuffer[0])+状态(RevBuffer[1])+ 数据(RevBuffer[2]。。。)
    
    
    
    (1)0x01时中止卡
    控制位为 0x01时中止卡 格式:01 01  数据长度(0x01)+RevBuffer[0](0x01)
    返回的数据格式为:
    
    
    
    (2)寻卡
    //功    能:寻卡
    //参数说明: req_code[IN]:寻卡方式
    //                0x52 = 寻感应区内所有符合14443A标准的卡
    //                0x26 = 寻未进入休眠状态的卡
    //          pTagType[OUT]:卡片类型代码
    //                0x4400 = Mifare_UltraLight
    //                0x0400 = Mifare_One(S50)
    //                0x0200 = Mifare_One(S70)
    //                0x0800 = Mifare_Pro(X)
    //                0x4403 = Mifare_DESFire
    //返    回: 成功返回MI_OK
    
    控制位为 0x02时寻卡	  格式:02 02 52||26 
    
    寻卡失败返回:数据长度 + 状态 eg: 01 FE
    寻卡成功返回数据的格式为:数据长度 + 状态 + 卡片类型代码   eg: 03 00 04 00
    
    
    (3)防冲突 读卡的系列号 MLastSelectedSnr
    /////////////////////////////////////////////////////////////////////
    //功    能:防冲撞
    //参数说明: pSnr[OUT]:卡片序列号,4字节
    //返    回: 成功返回MI_OK
    ///////////////////////////////////////////////////////////////////// 
    char PcdAnticoll(unsigned char *pSnr)
    status = PcdAnticoll(&RevBuffer[2]);
    
    控制位为 0x03 时防冲撞	格式:01 03
    失败返回: 01 FE
    成功返回:数据长度 + 状态 + 卡片序列号
    
    (4)
     /////////////////////////////////////////////////////////////////////
    //功    能:选定卡片
    //参数说明: pSnr[IN]:卡片序列号,4字节
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////
    char PcdSelect(unsigned char *pSnr)
    status=PcdSelect(MLastSelectedSnr);
    
    发送:01 04 数据长度 + 控制位
    失败返回:01 FE
    成功返回:01 00 +读卡的系列号2个字节  eg:03 00 62 63
    
    
    (5)
    /////////////////////////////////////////////////////////////////////
    //功    能:验证卡片密码
    //参数说明: auth_mode[IN]: 密码验证模式
    //                 0x60 = 验证A密钥
    //                 0x61 = 验证B密钥 
    //          addr[IN]:块地址 0x00到0x40
    //          pKey[IN]:密码
    //          pSnr[IN]:卡片序列号,4字节
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////               
    char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
    
    status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校验卡密码
    
    发送格式:04 05 61 00 01	 数据长度 + 密码验证模式 + 空 + 块地址
    失败返回:01 FE
    成功返回:01 00 
    
    
    (8)读取M1卡一块数据
    
    /////////////////////////////////////////////////////////////////////
    //功    能:读取M1卡一块数据
    //参数说明: addr[IN]:块地址
    //          pData[OUT]:读出的数据,16字节
    //返    回: 成功返回MI_OK
    ///////////////////////////////////////////////////////////////////// 
    char PcdRead(unsigned char addr,unsigned char *pData)
    status=PcdRead(RevBuffer[1],&RevBuffer[2]);
    发送格式:02 08 01 数据长度 + 控制位 + 块地址
    失败返回格式:01 FE 数据长度 + 状态
    成功返回格式:数据长度 + 状态 + 16字节数据 eg:11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    
    (9)0x09
    /////////////////////////////////////////////////////////////////////
    //功    能:写数据到M1卡一块
    //参数说明: addr[IN]:块地址
    //          pData[IN]:写入的数据,16字节
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////                  
    char PcdWrite(unsigned char addr,unsigned char *pData)
    status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
    
    
    发送格式:12 09  01 01 02 03 04 05 06 07 08 09  0A 0B 0C 0D 0E 0F 10数据长度1字节 + 控制位1字节 + 块地址1字节+16字节数据
    失败返回格式:01 FE 数据长度 + 状态
    成功返回格式:01 00 数据长度 + 状态
    
     (10)0X0A
    /////////////////////////////////////////////////////////////////////
    //功    能:扣款和充值
    //参数说明: dd_mode[IN]:命令字
    //               0xC0 = 扣款
    //               0xC1 = 充值
    //          addr[IN]:钱包地址
    //          pValue[IN]:4字节增(减)值,低位在前
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////                 
    char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue)
    PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
    
    发送格式:07 0A  C0  01 00 00 00 01   数据长度1字节 + 控制位1字节 + 扣充值命令字1字节 + 钱包地址1字节 + 增减值4字节
    失败返回格式:01 FE 数据长度 + 失败状态
    成功返回格式:01 00 数据长度 + 成功状态
    
    (11)测试风鸣器ox0b
    发送格式:01 OB
    失败返回格式:01 FE 数据长度 + 失败状态
    成功返回格式:01 00 数据长度 + 成功状态
    (12)备份钱包0x0c
    /////////////////////////////////////////////////////////////////////
    //功    能:备份钱包
    //参数说明: sourceaddr[IN]:源地址
    //          goaladdr[IN]:目标地址
    //返    回: 成功返回MI_OK
    /////////////////////////////////////////////////////////////////////
    char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr)
    PcdBakValue(RevBuffer[1], RevBuffer[2]);
    
    发送格式:03 0C  01  02    数据长度3字节 + 控制位1字节 + 源地址1字节 + 目标地址1字节
    失败返回格式:01 FE 数据长度 + 失败状态
    成功返回格式:01 00 数据长度 + 成功状态
    
    (13)//设置通讯波特率0x0d
    
    发送格式:02 0d  01 数据长度3字节 + 控制位1字节 + 波特率控制位1字节
    失败返回格式:01 FE 数据长度 + 失败状态
    成功返回格式:01 00 数据长度 + 成功状态
    
    汇总:
    控制位为 0x01时中止卡 格式:01 01  数据长度(0x01)+RevBuffer[0](0x01)
    控制位为 0x02时寻卡	  格式:02 02 52||26 
    控制位为 0x03 时防冲撞	格式:01 03
    选定卡发送:01 04 数据长度 + 控制位
    密码验证发送格式:04 05 61 00 01	 数据长度 + 密码验证模式 + 空 + 块地址
    读发送格式:02 08 01 数据长度 + 控制位 + 块地址
    写发送格式:12 09  01 01 02 03 04 05 06 07 08 09  0A 0B 0C 0D 0E 0F 10数据长度1字节 + 控制位1字节 + 块地址1字节+16字节数据
    当要为钱包时要写成如下格式
    12 09  04 12 34 56 78 ED CB A9 87 12  34 56 78 04 FB 04 FB
    扣充值发送格式:07 0A  C0  01 00 00 00 01   数据长度1字节 + 控制位1字节 + 扣充值命令字1字节 + 钱包地址1字节 + 增减值4字节
    
    备份钱包发送格式:03 0c  01  02    数据长度3字节 + 控制位1字节 + 源地址1字节 + 目标地址1字节
    
    展开全文
  • 智能仓库管理系统    随着经济的发展,对企业的生产经营要求提高,企业必须综合利用各种先进技术,在网络与信息技术的支持下,改进现在的生产经营模式和组织结构,增加利润。随着企业规模的扩大。高效方便的仓库...

    智能仓库管理系统

     

        随着经济的发展,对企业的生产经营要求提高,企业必须综合利用各种先进技术,在网络与信息技术的支持下,改进现在的生产经营模式和组织结构,增加利润。随着企业规模的扩大。高效方便的仓库管理系统,可以为企业的生产和经营提供坚强的后盾和有力的支持,而现有仓库管理系统还不够完善。比如货品入库过程,货品数量多,人工操作麻烦,严重不便费时费力,且效率比较低,出错的概率较大,同时对仓库的温湿度环境及仓库的货物信息掌握不够及时准确,给货物的存放和监管带来很大不便。随着物联网的出现,这些问题逐步得到解决。物联网可运用于很多领域,它是在互联网基础上的延伸和扩展的网络;其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。可利用相关技术来改进货品入库管理方式。为了提高企业的仓库管理效率,节约成本,实现对仓库的环境信息的有效监控。我们设计和实现了一套物联网仓储管理系统。

     

    ACAAS:ARM(Cortex-A8处理器,ARMv7架构) ——Ubuntu12.04

    环境采集器:STM32(Cortex-M3)—— FreeRTOS

    主要模块:

    (1)、A8服务器软件,多线程,通信协议解析;

    (2)、STM32数据采集,读取RFID信息,NRF24L01数据通讯;

    (3)、摄像头模块、GPRS模块、无线网卡等驱动移植;

    (4)、BOA服务器移植、CGI进程通信、HTML网页设计;

    (5)、数据库模块、蜂鸣器驱动;

     

    人工处理过程:

    货物进库出库的时候,刷货物卡(贴在货物上的标签),对货物进行记录,信息存入数据库。

    用户在pc端通过浏览器登录仓库管理系统,在网页上可以进行如下操作:

    1修改接受报警短信的电话号码和报警短信内容

    2 设置温湿度临界值

    3 关闭STM32的报警蜂鸣器

    4 查询货物出入记录

    5 手动抓拍,并显示。

    6 查看历史图片

    7查看历史环境记录

     

    接口设计:

    ARM_M3

    1温湿度传感器相关接口:

    2 蜂鸣器相关接口

    3 RF接口

    4 RFID

    5 按键模拟红外

    6 液晶显示

    7 报警模块

     

    ARM_A8

    1 摄像头

    2 RF接受发送模块

    3 GSM

     

    ACAAS 模块与环境采集器之间通过RF模块进行数据通信。首先ACAAS模块与环境采集器之间先通过RF建立连接,之后环境采集器将采集到到的环境数据传送给ACAAS模块,ACAAS模块将采集到的环境数据进行分析处理写入数据库,再有用户界面(浏览器)程序通过CGI获取数据库数据,显示在用户界面。用户可通过操作界面来查看环境信息和发送控制命令。

     




     

    展开全文
  • 掘金物流仓储自动化千亿市场物流仓储自动化是指物流作业过程的设备和设施自动化,包括运输、装卸、包装、分拣、识别等作业过程,比如,自动化立体仓储系统、自动输送系统(包括移动机器人系统AGVS)、自动识别系统和...
    
      
        

    掘金物流仓储自动化千亿市场

    物流仓储自动化是指物流作业过程的设备和设施自动化,包括运输、装卸、包装、分拣、识别等作业过程,比如,自动化立体仓储系统、自动输送系统(包括移动机器人系统AGVS)、自动识别系统和自动分拣系统,以及机器人作业系统的其他辅助系统等

    仓储自动化

    时间!空间!

    物流自动化仓储系统优势明显。自动化立体仓库可以有效地利用仓库面积和空间,扩大仓库的有效利用率并且便于形成先进的物流系统,提高企业生产管理水平;自动分拣系统能提高分拣货物的效率(自动分拣系统的分拣能力是连续运行100 个小时以上,每小时可分拣7000 件包装商品,如用人工则每小时只能分拣150 件左右,同时分拣人员也不能在这种劳动强度下连续工作8 小时),并且减小分拣误差率,利用智能识别、机器人作业等系统提高了劳动效率,节约了劳动成本;

    指标对比:

    空间利用、存储形态、作业效率与人工、成本、环境要求、追溯性

    自动化仓储系统和传统仓储系统对比

    1

    仓储自动化系统

    仓储自动化系统是由高层立体货架、堆垛机、各种类型的叉车、出入库系统、无人搬运车、控制系统及周边设备组成的自动化系统。利用自动化仓储系统可持续地检查过期或找库存的产品,防止不良库存,提高管理水平。自动化仓储系统能充分利用存储空间,通过计算机可实现设备的联机控制,以先入先出的原则,迅速准确地处理物品,合理的进行库存管理及数据处理。物流仓储自动化系统主要包括四类:自动化立体仓储系统、自动搬运与输送系统(包括移动机器人系统AGVS)、自动识别系统和自动分拣系统;

    物流仓储自动化系统构成

    2017中国物流设备市场规模和占比

    2

    自动化立体仓储系统

    一般是指采用几层、十几层乃至几十层高的货架储存单元货物,用相应的物料搬运设备进行货物入库和出库作业的仓库系统,利用立体仓库设备可实现仓库高层合理化,存取自动化,操作简便化;

    自动化立体仓库系统

    自动化立体仓库的主体由货架,巷道式堆垛起重机、入(出)库工作台和自动运进(出)及操作控制系统组成。货架是钢结构或钢筋混凝土结构的建筑物或结构体,货架内是标准尺寸的货位空间,巷道堆垛起重机穿行于货架之间的巷道中,完成存、取货的工作。管理上采用计算机及条形码技术;

    自动化立体仓库系统构成

    自动化立体仓储系统分类建筑物形式

    整体式自动化立体仓储系统:

    货架除了存储货物以外,还作为建筑物的支撑结构,构成建筑物的一部分,即库房货架一体化结构,一般整体式高度在12 米以上,这种仓库结构重量轻,整体性好,抗震好!

    分离式自动化立体仓储系统

    存货物的货架在建筑物内部独立存在,分离式高度在12 米以下,但也有15 米至20 米的,适用于利用原有建筑物作库房,或在厂房和仓库内单建一个高货架的场所

    PK

    货物储存形式

    单元货架式:

    单元货架式是常见的仓库形式,货物先放在托盘或集装箱内,再装入单元货架的货位上

    移动货架式:

    移动货架式由电动货架组成,货架可以在轨道上行走,由控制装置控制货架合拢和分离。作业时货架分开,在巷道中可进行作业;不作业时可将货架合拢,只留一条作业巷道,从而提高空间的利用率

    拣选货架式

    拣选货架式中分拣机构是其核心部分,分为巷道内分拣和巷道外分拣两种方式。“人到货前拣选”是拣选人员乘拣选式堆垛机到货格前,“货到人处拣选”是将存有所需货物的托盘或货箱由堆垛机至拣选区

    货物构造

    单元货格式仓库 :

    类似单元货架式,巷道占去了三分之一左右的面积

    贯通式

    取消位于各排货架之间的巷道,将个体货架合并在一起,使每一层、同一列的货物互相贯通,形成能一次存放多货物单元的通道,而在另一端由出库起重机取货,成为贯通式仓库,提高仓库利用率

    水平旋转式仓库的货架

    本身可以在水平面内沿环形路线来回运行,每组货架由若干独立的货柜组成,用一台链式传送机将这些货柜串连起来,每个货柜下方有支撑滚轮,上部有导向滚轮。这种货架对于小件物品的拣选作业十分合适,简便实用,充分利用空间,适用于作业频率要求不太高的场合

    垂直旋转货架式仓库

    与水平旋转货架式仓库相似,只是把水平面内的旋转改为垂直面内的旋转。这种货架特别适用于存放长卷状货物,如地毯、地板革、胶片卷、电缆卷等

    自动搬运输送系统

    巷道堆垛机:

    由起升机构、运行机构、货台司机室和机架等组成,专用于高架仓库,起重机在巷道内运行,主要用于搬运装在托盘上或货箱内的单元货物,也可开到相应的货格前,由机上人员按出库要求拣选货物出库。

    自动搬运机器人:

    是可以进行自动化搬运作业的工业机器人,涉及到了力学,机械学,电器液压气压技术,自动控制技术,传感器技术,单片机技术和计算机技术等学科领域。在实际应用中,可安装不同的末端执行器以完成各种不同形状和状态的工件搬运工作,大大减轻人类体力劳动强度。广泛应用于机床上下料、冲压机自动化生产线、自动装配流水线、码垛搬运、集装箱等的自动搬运;

    自动识别系统

    自动识别系统(RFID)即射频识别技术,俗称电子标签。自动识别系统射频识别是一种非接触式的自动识别技术,通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境。自动识别系统技术可识别高速运动物体并可同时识别多个标签,操作快捷方便,方便查找,查询基于RFID 的远距离读取、自动识别、可将所有物品无线连接上网的功能,在仓储管理系统中占有重要的地位,能帮助企业加快仓库信息的传输、读取速度,为企业提供效率,将会是未来智能物流中非常重要的一环;

    自动分拣系统

    自动分拣系统是自动化仓储的核心,一般由控制装置、分类装置、输送装置及分拣道口组成.。该系统的作业过程可以描述如下:物流中心每天接收成百上千家供应商或货主通过各种运输工具送来的成千上万种商品,在最短的时间内将这些商品卸下并按商品品种、货主、储位或发送地点进行快速准确地分类,将这些商品运送到指定地点(如指定的货架、加工区域、出货站台等),同时,当供应商或货主通知物流中心按配送指示发货时,自动分拣系统在最短的时间内从庞大的高层货存架存储系统中准确找到要出库的商品所在位置,并按所需数量出库,将从不同储位上取出的不同数量的商品按配送地点的不同运送到不同的理货区域或配送站台集中,以便装车配送;

    主要的自动分拣设备有:滑块式分拣机、交叉带式分拣机、斜导轮式分拣机、翻盘式分拣机、挡板式分拣机、锟筒浮出式分拣机等。交叉带式分拣机应该较为广泛,适宜于分拣各类小件商品,如食品、化妆品、衣物等,分拣出口多,可左右两侧分拣,分拣能力一般达20000-50000 件/小时;

    自动分拣设备分拣能力对比

    自动化分拣系统相对于人来说具有很大的优势,能连续大批量的分拣货物,自动分拣系统的分拣能力是连续运行100 个小时以上,每小时可分拣7000 件包装商品,如用人工则每小时只能分拣150 件左右,并且分拣人员也不能高强度连续作业;分拣误差率极低,基本不会出现差错,而人工键盘输入误差率在3%以上

    三驾马车护航物流仓储自动化黄金年代

    根据中国产业信息网显示,我国物流自动化市场规模从2001 年不足20 亿元,迅速增长至2014 年的425 亿元。未来几年,随着自动化设备制造技术的发展以及下游企业对自动化系统需求的增加,物流自动化系统将持续保持高速增长,预计2020 年国内的物流自动化系统市场规模将超过1000 亿元。

    物流自动化仓储系统已经在各个领域得到了广泛应用,根据中国物流技术协会信息中心 2014 年调查统计,中国已经建成的物流自动化系统主要分布在烟草(16%)、 医药(13%)、连锁零售(10%)、机械制造(9%)、汽车(8%)、食品饮料(7%)、 军队系统(6%)、 电子商务(5%)、 印刷品(3%)、机场(3%)、其他(20%),其中烟草、医药和汽车的物流自动化普及率较高,分别达到46%、41%和39%,远高于全国平均自动化率20%;

    ■■■■■

    电商行业爆发,物流仓储自动化需求旺盛

    据CNNIC 数据显示,我国网络购物用户规模急剧增大,从2009年的1.25 亿人到2015 年的4.1 亿人,网络购物的交易额也以每年40%以上的速度进行增长,2015 年达到3.8 万亿元,未来仍将继续高速发展,预计2018 年我国网购交易规模将达到7.5 万亿元。

    ■■■■■

    随着互联网的大发展,以淘宝、京东和苏宁为代表的电商逐渐渗透到日常的生活中,特别是像“双十一”、春节这种关键时节点,物流仓储系统经常出现崩溃,严重影响用户体验。据统计,2015 年淘宝天猫“双十一”销售额达912.17 亿元,传统的“人工+机械”的物流仓储方式远不能达到高速增长的电商零售行业需求;

    国外如亚马逊等企业不断升级仓储物流的自动化系统,降低响应时间和成本,提高生产效率,例如目前货物的分拣时间约占整个快递集散中心作业时间的40%~60%,而自动化分拣系统的平均工作效率为1 万件/时,是人工分拣的30 倍。通过提升自动化率,亚马逊已经将仓储物流费用降低到9%左右。国内企业也纷纷效仿,例如京东建立了“亚洲一号”,一号店建立了洪梅物流中心,其他电商物流等公司也在纷纷制定改建或者新建自动化物流仓储系统计划。

    目前市场份额最大的五家电商现有49 个物流中心,200 个区域配送中心,城市分拨中心也超过1000 个。以京东的“亚洲一号”为例,自动化设备投资约2.5 亿元,年处理订单为4~5 千万件,京东2014年订单处理量为3.3 亿件,目前京东的市场占有率约为20%,则京东进行自动化改造需要7 个“亚洲一号”,全市场需要35 个“亚洲一号”,市场空间约87 亿元;电商行业正在高速发展中,如果按照50%的行业增速继续发展,到2020 年,国内电商的自动化仓储系统市场空间近660 亿元。

    同京东相比,国外的大型电商比如亚马逊在中国的仓库规模偏小,全国共有13 个仓库,总面积约为85 万平方米,但是京东市场份额占到23.3%,而亚马逊中国仅为2.1%,在市场份额相差10 倍的情况下,而仓库面积相差不到一倍;

    京东商城和亚马逊对比

    京东的“亚洲一号”是国内最大、最先进的电商物流中心之一,硬件方面拥有自动化立体仓库、自动分拣机等先进设备;软件方面仓库管理、控制、分拣和配送信息系总集成,目前90%以上操作已实现自动化。

    亚马逊公司使用KIVA 机器人,采用货架到人的运行模式,其顶部有一个升降圆盘,可抬起重达720 磅(340 公斤)的物品,KIVA 机器人会扫描地上的条形码前进,能根据无限指令的订单将货物所在的货架从仓库搬置员工处理区,取消拣选人员,直接把货架搬到复核包装人员的边上,由复核打包人员完成拣选,二次分拣,打包复核三项工作,把人员压到最低。这样工作人员每小时可挑拣、扫描300 件商品,效率是之前的3 倍,并且KIVA 机器人准确率达到了99.99%;

    ■■■■■

    KIVA 机器人相对于传统的物流作业流程来说优势明显,据有更强的可拓展性和柔性,更高的灵活性和准确性,应用可以拓展到多层,能降低土地使用面积,并且KIVA 系统采用员工8 小时,小车24 小时工作制,大大提高工作效率。

    亚马逊公司2015 年给13 个物流中心配置3 万部Kiva 机器人,利用KIVA 机器人,作业效率比传统物流提升2-4 倍,提高近50%的库存处理能力,每笔订单能省下将近1 小时时间,亚马逊没发送一件商品就能节省21.3 美分,也就是节省了48%的成本;

    ■■■■■

    快递业发展 ,物流仓储自动化蓝海

    国内的快递包裹数量自2010 年电商兴起以来,每年以50%以上的速度进行增资,据中国快递协会年会发布数据,2015 年,快递业完成业务量206 亿件,同比增长48%,最高日处理量超过1.6 亿件;快递业务收入完成2760 亿元,同比增长35%;

    快递公司集体上市,资本引进加快自动化步伐

    申通圆通顺丰相继借壳上市,快递企业集团上市推动物流自动化行业发展。2015 年12 月3 日,申通借壳艾迪西上市成为民营快递企业第一股,2016 年1 月和5 月,圆通、顺丰相继借壳大杨创世和鼎泰新材上市,韵达上市工作也在进行当中

    快递公司上市募集的资金主要为了提高服务质量与效率,为了在全程时效和运营质量上获得显著的改善,以在价格之外形成最为关键的差异化竞争要素,各上市企业的资金投放会集中在四个缺口上;

    快递车辆,包括城市内集输揽投车辆,以及城市间干线上的主力运输车辆的更新和增添。

     航空运力的进一步增强(包括飞机维修能力的加强,新的运力的采购等,主要是顺丰)。

     转运/分拣处理中心的增加、扩建和设施升级上,包括对大规模自动化分拣设备的投放。

     端到端的信息系统的升级。包括揽投人员的手持设备,以及从揽投点到城市集散中心、枢纽转运节点全链条的数据采集以及后台运算设备和系统。

    快递行业运营成本增加,倒逼快递公司加快自动化

    近年来仓储物流行业人员的工资成本也呈现上涨趋势,2015 年平均单价为13.5 元较2007 年下滑了一半,快递行业的利润率已经下降到3.8%,在快递物流行业成本构成中占比很大的人工成本,占比超过25%。不断上升的人工费用和下降的快递单价,将倒逼电商、物流等企业加快自动化仓储物流的建设‘

    ■■■■■

    快递成本中占比最大的是运输成本和人力成本,而且随着时间的推移,人力成本逐年上升,到2015 年达到占比25.7%。在快递公司的转运中心,分拣的物流成本最高,占到了总成本的40%,其次才是配送成本

    ■■■■■

    随着物流成本的持续升高,国内外快递公司不断升级仓储物流自动化系统,降低相应响应时间和成本,提高生产效率,快递企业对自动化物流系统的需求越来越大。比如顺风在南通、广州、北京等地设立约200 个中转分拨中心,中通、圆通等也开始在全国范围内建立分拣中心

    跑马圈地,国内企业逐步起航,

    物流仓储自动化的产生源于50 年代的美国,1963 年美国率先在高架仓库中采用计算机控制技术,建立了第一座计算机控制的高架仓库。此后,自动化高架仓库在美国和欧洲得到迅速发展,并形成了专门的学科。物流仓储自动化的发展分为五个阶段:人工仓储阶段、机械化仓储阶段、自动化仓储阶段、集成化仓储阶段、智能化仓储阶段

    世界上第一座自动化立体仓库于1959 年诞生于美国,1963 年实现计算机自动控制管理。自动化仓储系统自此在欧美发达国家和日本迅速发展起来。目前日本自动化仓库每年建造约250 座,产值达500~600 亿美元,成为世界上拥有自动仓储系统最多的国家之一。现在,美国、日本依然牢牢掌握自动仓储系统最先进的技术,引领自动仓储系统的发展。

    我国于1973 年开始研制第一座由计算机控制的自动化立体仓库,该系统1980 年投入运行,近年来,国内的物流自动化系统已逐步进入快速发展阶段,截至2014 年底,全国累计建成的自动化立体库已超过2500 座。我国的物流自动化系统的研究与应用主要经历了四个阶段:起步阶段,初步发展阶段,高速发展阶段和成熟应用阶段

    千亿市场,物流仓储自动化进口替代空间巨大

    自动化物流仓储市场规模较大,2020 年将超1000 亿:以自动化物流系统来看,其市场规模从2001 年的不足20 亿元,迅速增长至2015年的490 亿元,未来几年行业增速有望保持15%以上,预计至2018年,国内的自动化物流系统市场规模将超过800 亿元,至2020 年,市场规模将超1000 亿。

    据估计,电商行业在2020 年会有一级仓 49 个,二级仓 200 个,三级仓 1000 个,物流自动化系统总投资需求达到348 亿,快递行业2020 年预测四通一达、德邦和百世汇通共 840 个分拨中心、中转场,需求将达到378 亿




    AGV智能机器人 |智能仓储、智能制造 | 产品分析


      随着人口红利逐渐消失,人工成本不断上升,工业自动化、智能化已经成为了制造业发展趋势。此外,在汽车、家电、烟草等领域对AGV机器人需求稳定增长的时候,电商、新能源、医疗等新兴行业市场需求也开始释放,这些因素都促进了AGV机器人销量的快速增长。

    本文将从应用领域、核心技术以及国产品牌对AGV智能物流机器人进行解读。

     

    应用领域

    仓储业

         仓储业是AGV最早应用的场所。1954年世界上首台AGV在美国的South Carolina州的Mercury Motor Freight公司的仓库内投入运营,用于实现出入库货物的自动搬运。目前世界上约有2万台各种各样AGV运行在2100座大大小小仓库中。海尔集团于2000年投产运行的开发区立体仓库中,9台AGV组成了一个柔性的库内自动搬运系统,成功地完成了每天23400出入库货物和零部件的搬运任务。

    制造业 

        AGV在制造业的生产线中大显身手,高效、准确、灵活地完成物料的搬运任务。并且可由多台AGV组成柔性的物流搬运系统,搬运路线可以随着生产工艺流程的调整而及时调整,使一条生产线上能够制造出十几种产品,大大提高了生产的柔性和企业的竞争力。瑞典的Volvo Kalmar轿车装配厂为了提高运输系统的灵活性,采用基于AGVS为载运工具的自动轿车装配线,该装配线由多台可装载轿车车体的AGVS组成,采用该装配线后,装配时间减少了20%,装配障减小39%,投资回收时间减小57%,劳动力减小了5%。目前,AGV在世界的主要汽车厂,如通用、丰田、克莱斯勒、大众等汽车厂的制造和装配线上得到了普遍应用。近年来,作为CIMS的基础搬运工具,AGV的应用深入到机械加工、家电生产、微电子制造、卷烟等多个行业,生产加工领域成为AGV应用最广泛的领域。 

    邮局、图书馆、港口码头和机场 

        在邮局、图书馆、码头和机场等场合,物品的运送存在着作业量变化大,动态性强,作业流程经常调整,以及搬运作业过程单一等特点,AGV的并行作业、自动化、智能化和柔性化的特性能够很好的满足上式场合的搬运要求。瑞典在大斯得哥尔摩邮局、日本在东京多摩邮局、中国在上海邮政枢纽开始使用AGV,完成邮品的搬运工作。在荷兰鹿特丹港口,50辆称为“yard tractors”的AGV完成集装箱从船边运送到几百码以外的仓库这一重复性工作。

    烟草、医药、食品、化工

        对于搬运作业有清洁、安全、无排放污染等特殊要求的烟草、医药、食品、化工等行业中,AGV的应用也受到重视。在国内的许多卷烟企业,如青岛颐中集团、玉溪红塔集团、红河卷烟厂、淮阴卷烟厂,应用激光引导式AGV完成托盘货物的搬运工作。

    危险场所和特种行业

        在军事上,以AGV的自动驾驶为基础集成其他探测和拆卸设备,可用于战场排雷和阵地侦察,英国军方正在研制的MINDER Recce是一辆侦察车,具有地雷探测、销毁及航路验证能力的自动型侦察车。在钢铁厂,AGV用于炉料运送,减轻了工人的劳动强度。在核电站和利用核辐射进行保鲜储存的场所,AGV用于物品的运送,避免了危险的辐射。在胶卷和胶片仓库,AGV可以在黑暗的环境中,准确可靠的运送物料和半成品。

    核心技术

    (1)体控制技术

    在实际应用中,由于用户所需要运载的货物不同,经常需要更改传感器、驱动器的类型及数量。为了提高机器人研发设计的工作效率,增强产品的核心竞争力。AGV拥有多款专用车控制器车体控制器软件,软硬件均采用模块式设计,仅需简单调整配置参数,即可快速地适配多种不同类型AGV车型的改变。

    移动机器人控制系统包括车体控制器、安全设备、人机接口、无线电台、运动控制器、传感器、导航系统等器件组成。主控制器用于发布及接收指令,该控制器是专为移动机器人控制和应用而设计的处理器,适合在工业环境下使用,是移动机器人系统的主控制单元。安全设备直接与控制器中的安全线路连接,确保机器人对环境的安全。通过人机接口及无线通信,可以实时下达指令并观测运行状态。移动机器人主控制器通过接收导航系统及传感器数据,控制伺服驱动器及运动控制器进行执行操作。

    (2)调度控制技术

    为了便于线路的改变,AGV的运动路线控制由控制台及控制台软件实现。控制台硬件采用工业计算机及外设组成,由电台基站与移动机器人无线通信,移动机器人可以在多个电台之间自动转换。

    AGV在控制台软件调度控制方面,控制台操作简单,变更方便。同时控制台可随时观测移动机器人运行状态,若机器人出现故障,控制台可实现自动检测及报警措施。控制台可实现多车的控制及调度。

    (3)安全监测与故障诊断技术

    AGV车体控制器、伺服控制器、运动控制器、激光防碰传感器等器件均具有安全保护功能。当设备出现掉电、复位、看门狗超时等危险状况时,安全信号的输出将切断,保护系统安全。AGV在电气设计上应遵照产品安全标准设计,使用器件及接插件均考虑电气安全和电磁兼容性。

    (4)导航方式

        市场上比较常见的导航方式有电磁导航、磁导航、二维码导航、激光导航四种。

        电磁导航是最传统的导航方式,导引原理简单,便于控制通讯,对声光无干扰,但成本高,改造和维护困难。磁导航可实现精确的AGV定位,路径的铺设、变更或扩充相对电磁导航较容易,磁带成本较低。但磁带容易破损,需要定期维护,路径变更需要重新铺设磁带。激光导航定位精确,行驶路径灵活多变,能够适合多种现场环境。但制造成本高,对环境要求相对较高。二维码导航定位精确,导航灵活性较好,便于控制通讯,对声光无干扰。其缺点是路径需要定期维护,如果场地复杂,则需要频繁更换二维码,对陀螺仪的精度及使用寿命要求严格,另对场地平整度有一定要求,价格较高。

    国产品牌

    沈阳新松机器人自动化股份有限公司

      新松机器人成立2000年,主营工业机器人自动化装配、物流与仓储自动化成套设备等。

        2014年,新松作为主要起草单位,参与制定的GB/T30029—2013自动导引车(AGV)设计通则”以及“GB/T30030—2013自动导引车(AGV术语)”中华人民共和国国家标准正式发布,这两项国家标准于2014年3月1日正式实施。

      公司AGV产品主要用于汽车及军工两大领域,其中,汽车领域的AGV市场份额位居行业第一。

    浙江国自机器人技术有限公司

        2008年,国自开始组建机器人团队,2011年公司正式成立。国自机器人专注于移动机器人的开发和推广,主要产品为智能巡检机器人和安防机器人。资料显示,公司智能巡检机器人已应用覆盖国家电网21个省份400余个变电站。


    深圳市佳顺智能机器人股份有限公司

      佳顺智能成立于2007 年,主要从事AGV及自动化解决方案的研发、设计、生产和销售。据了解,2016年公司AGV小车的营销额已超过1亿元。

      数据显示,佳顺智能的AGV占据了国内汽车座椅制造近90%的市场份额。其AGV产品已具有多种导航技术储备,包括磁条导航、惯性导航、激光导航、二维码惯性导航、轮廓导航等。


    苏州艾吉威机器人有限公司

      艾吉威成立于2004年,公司集AGV机器人和AGV系统设计开发、生产制造、销售于一体,并提供AGVS、WMS、RFID系统整厂解决方案。

      公司AGV产品拥有5大系列、7种款型,产品广泛应用于汽车、电子、服装、卫浴、家电等领域。值得一提的是,公司拥有业内首次实现无标志导航的无反射板激光自主导航发明专利。

    华晓精密工业(苏州)有限公司

      华晓精密成立于2003年,公司主营物流容器、物流自动化设备及相关非标设备产品,其中物流自动化设备主要是AGV产品,该产品广泛应用于汽车领域。2016年1月,科大智能出资6000万收购华晓精密100%股权。


    |信息来源:雷锋网、凤凰科技、OFWEEK等

    人工智能赛博物理操作系统

    AI-CPS OS

    人工智能赛博物理操作系统新一代技术+商业操作系统“AI-CPS OS:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。


    AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。


    领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:

    1. 重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?

    2. 重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?

    3. 重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?

    AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:

    1. 精细种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。

    2. 智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。

    3. 高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。

    4. 不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。

    5. 边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。

    AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:

    1. 创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;

    2. 对现有劳动力和实物资产进行有利的补充和提升,提高资本效率

    3. 人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间


    给决策制定者和商业领袖的建议:

    1. 超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;

    2. 迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新

      评估未来的知识和技能类型;

    3. 制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开

      发过程中确定更加明晰的标准和最佳实践;

    4. 重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临

      较高失业风险的人群;

    5. 开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。


    子曰:“君子和而不同,小人同而不和。”  《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。


    如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!


    新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。



    产业智能官  AI-CPS


    用“人工智能赛博物理操作系统新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链


    长按上方二维码关注微信公众号: AI-CPS,更多信息回复:


    新技术“云计算”、“大数据”、“物联网”、“区块链”、“人工智能新产业:智能制造”、智能金融”、“智能零售”、“智能驾驶”、智能城市新模式:“财富空间“工业互联网”、“数据科学家”、“赛博物理系统CPS”、“供应链金融”


    官方网站:AI-CPS.NET


    本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!



    版权声明产业智能官(公众号ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com




    展开全文
  • 摘 要随着社会进步,经济的快速发展,仓储管理系统的建立现今已成为了企业发展的优势条件。通过对金武彩印机械设备有限公司进行调研,利用文献研究法、调查法和查阅记录等方法对公司进行分析,阐述金武彩印机械设备...
    摘  要
    随着社会进步,经济的快速发展,仓储管理系统的建立现今已成为了企业发展的优势条件。通过对金武彩印机械设备有限公司进行调研,利用文献研究法、调查法和查阅记录等方法对公司进行分析,阐述金武彩印机械设备有限公司现有的仓储管理模式以及存在的问题,为其建立仓储管理系统,改善公司目前人工盘点造成大量的人力资源浪费以及人为因素造成错误率的增加和工作效率下降的现状,提高工作人员的工作效率,快速录入货物信息;保证货物信息的准确性 ,避免货物的丢失;降低人工录入时造成的错误率,减少损失。启示同行业企业科技管理仓储的必要性。


    关键词: 仓库管理;信息系统;NET


    Abstract
    With the rapid development of society and the rapid development of economy, the establishment of warehouse management system has become the advantage condition of enterprise development. By Jinwu color printing machinery equipment co., LTD., research, using methods such as literature research, questionnaire and check back analysis of the company, this paper Jinwu color printing machinery equipment co., LTD., the existing warehouse management mode and the existing problems, and to establish its warehouse management system, improve the company currently manual inventory caused a lot of waste of human resources and human factors result in an increase in error rate and the current situation of lower productivity, improve the working efficiency of the staff, quick entry goods information; Ensure the accuracy of cargo information and avoid loss of goods; Reduce the error rate caused by manual entry and reduce the loss. It is necessary to enlighten the industry enterprises to manage the warehousing.


    Keywords:Warehouse management; information system; NET


















    目 录
    摘要 I
    Abstract II
    1 绪  论 1
    1.1 研究背景 1
    1.2 研究目的和意义 1
    1.2.1 研究目的 1
    1.2.2 研究意义 1
    1.3 国内外研究现状 2
    1.3.1 国外研究现状 2
    1.3.2 国内研究现状 3
    1.4 本文的主要研究内容 4
    2 相关理论基础 5
    2.1 仓储管理系统理论概述 5
    2.1.1仓储管理系统概念 5
    2.1.2仓储管理系统特点 5
    2.1.3仓储管理系统功能介绍 9
    2.2  SQL Server数据库技术 9
    2.3  C#技术介绍 10
    2.4 基于B/S(Browser/Server)技术的仓储管理 10
    3 金武彩印机械设备有限公司仓储管理问题与需求分析 12
    3.1 金武彩印机械设备有限公司简介 12
    3.2 金武彩印机械设备有限公司仓储管理现状及问题分析 12
    3.3 金武彩印机械设备有限公司仓储管理需求分析 12
    3.4.1系统管理 12
    3.4.2基础数据管理 13
    3.4.3收货管理 13
    3.4.4发货管理 13
    3.3.5库存管理 13
    4 金武彩印机械设备有限公司仓储管理系统设计 14
    4.1 仓储管理系统功能设计 14
    4.1.1系统管理模块 14
    4.1.2基本数据维护模块 15
    4.1.3收货管理模块 16
    4.1.4发货管理模块 16
    4.1.5库存管理模块 17
    4.2 仓储管理系统流程设计 17
    4.2.1系统管理流程 18
    4.2.2入库管理流程 18
    4.2.3出库管理流程 19
    4.2.4 库存管理流程 20
    4.3 数据库设计 21
    4.3.1 数据库E-R模型设计 21
    4.3.2 数据库信息表设计 21
    5  金武彩印机械设备有限公司仓储管理部分系统实现 25
    5.1 登录功能实现 25
    5.2 管理功能实现 25
    5.2.1 基本数据功能实现 25
    5.2.2 收货管理功能实现 26
    5.2.3 发货管理功能实现 27
    5.2.4库存管理功能实现 28
    结论 29
    参考文献 30


    1 绪  论
    1.1研究背景
    近年来我国物流行业快速发展,更多的企业采用线上交易的方式来进行业务拓展,随之带来的是货物流通大量的增加,这期间许多仓储问题逐渐暴露。虽然许多大型企业选用先进的仓储管理系统来进行库存管理,但仓储管理系统作为仓储管理信息化的具体形式,它在我国的应用还处于起步阶段。现今为止大多数中小型企业的仓储数据仍旧使用纸质记录后期手动录入电脑的方式来进行管理,期间形成大量的人力浪费以及人为因素所造成的损失比比皆是[1]。金武彩印机械设备有限公司作为一家采用线上交易方式的企业,近几年的发展迅速,对公司的上下游的管理要求也越来越高。但由于该公司的仓库管理还是以人工记录的方式,对整个上下游设备的管理还很混乱,导致公司深受此等问题困扰。在如今社会的激烈角逐中,金武彩印机械设备有限公司需要拥有更大的优势去在社会上站稳脚步。因此,公司需要一个更加高效的仓库管理系统来面对日益复杂的经营关系。因此,在金武彩印机械设备有限公司的业务量一直增加的情形下,了解企业要求为其建立一个适合的仓储管理系统,这就是研究的关键。
    1.2 论文研究的目的和意义
    1.2.1 研究目的
    论文以金武彩印机械设备有限公司的仓储作为研究对象,主要是为该公司建立一个适合的仓储管理系统,从而来解决金武彩印机械设备有限公司现有的仓储管理所存在的问题并且推动公司未来的业务发展。研究的目的就在于以该公司现有的仓储管理模式为研究的突破口,通过实地考察了解金武彩印机械设备有限公司现在所具备的内部管理体系、业务模式、上下游公司以及仓储现状以及公司在此所存在的问题因素,然后再通过对金武彩印机械设备有限公司的仓储管理的需求进行详细的分析,为公司建立一个以系统管理、出库管理、入库管理、库存管理为主要管理的仓储管理系统,力求解决金武彩印机械设备有限公司现在因为使用传统的纸质记录数据后人工录入电脑的仓储管理模式对公司的仓储进行简单的管理所导致的公司内部仓储管理混乱等问题[2]。同时利用仓储管理系统对公司进行科学的管理还可以提高企业工作人员的工作效率,避免了货物的丢失,为公司减少了不必要的损失,完善了金武彩印机械设备有限公司的仓储管理。
    1.2.2 研究意义
    伴随着计算机的广泛普及以及应用,目前为止大多数企业的仓储管理数据也已经开始采用计算机系统来进行管理,但是仓储数据的录入方式仍旧是先使用纸张记录然后再进行人工手动输入电脑的形式,这期间不仅仅会浪费大量的人力资源还会由于人为因素造成错误率的增加和工作效率的下降。随着企业的快速发展,规模的扩大,更多的业务形式,仓储要求更高的情况下,这个问题将扩大化,成为制约企业发展的巨大障碍[3]。企业通过利用仓储管理系统可以更科学的管理仓库,能够按照一定的运作规则和运作法则,对仓库中货物的存货率、出收货等信息更准确的掌握。完善的仓储管理系统能够展现一个企业的管理模式,体现企业做事态度。一个完善的仓储管理系统未来将成为企业间的一大竞争力。 
    1.3 国内外研究现状
    1.3.1 国外研究现状
    Oliver(2012)在《Research on the application of RFID in warehouse management system》的研究中导入层次为包装容器层次(Case Level),扩展智能货架及将RFID 技术应用至配送中心,约有150,000个货箱被贴上RFID标签,可避免货架上的设备短缺,存货不足时,自动下单补货或通知人员采购,且具有防盗功能[4]。
    Bowen and Shoemaket(2013)在《JIT application of TOYOTA》研究将RFID技术应用在仓库管理上,可以提供仓库所需要的各种信息,且能够应用在售后的维修服务[5]。
    Singh and Sirdeshmukh(2015)在《Research on warehouse management system》研究使用 RFID 技术取代条码扫描,极大的提高了设备入库和出库的效率[6]。
    Harris(2015)在《Optimal inventory model》年对商业企业的订购批量进行了研究,以最小化采办费用和最低库存投资为目标,以最优订购量为决策变量,探讨了具有稳定需求率设备的采购问题,得到了著名的经济订购批量公式(EOQ公式),这在当时并未引起重视。直到Wilson再次推出EOQ公式,所以EOQ公式也被称为Wilson公式。对于需求具有不确定情况下的经济订购批量问题就是报童(newsboy)模型所研究的企业采购问题[7]。EOQ模型和报童模型都是在严格假定条件下研究最优订购量和最佳订货周期的采购问题,而后在众多研究者的努力下,不断放松假设限制,研究更接近现实生活的企业采购问题。Hariga等(2017)、Gullu等(2017)在《Economic order batch model》分别将经济订购批量问题扩展到供应商的供应能力随机的情况[8];Lau(2017)以及Chang(2017)将报童模型进一步扩展为多产品的采购[9];Andrew Wirth(2017)、James(2017)分别给出了通货膨胀条件下经济订购批量问题的综述。这些研究使基于库存理论的企业采购理论得到了进一步的丰富和发展,这一时期企业采购策略基本上都假定采购价格为外生变量,决策变量只涉及最优采购量和采购周期问题[10]。K.Sridhar Moorthy(2015) 《Warehouse management system with "zero inventory"》文章对研究仓库管理怎样实现“零库存”的方法,并得出一个可行的方案,即从仓储环节的信息化着手找出一种能实现“零库存”的方法。虽然从目前企业物流现状来看,在整个社会再生产的全过程中,“零库存”还是一种理想模式,不可能成为现实,但是通过不断降低库存,企业可以节省更多成本。而在这个过程中,仓储环节的信息化至关重要[11]。
    1.3.2 国内研究现状
    香港科技大学的李涛(2015)年在《对订单仓库管理模型》中对多元化分布式生产系统进行了研究,提出了基于Agent的多订单服务型算法[12]。北京交通大学邓科(2014)在《RFID在仓库管理系统中的应用研究》将RFID技术与SOA和移动网络结合,设计了可用于移动客户端的RFID平台来进行分布式仓库管理[13]。华中科技大学孙光付(2014)在《智能仓库管理系统研究》中着重研究了RFID技术在仓库管理过程中的入库、出库、配送和运输等各个环节的应用[14]。李江(2015)仓库管理系统是随着现代计算机技术的发展而产生的,它充分利用计算机程序制定生产系统优化运行方案,可及时调整企业生产过程内外的各种关系。仓库管理系统是为企业的采购、制造计划、制造执行、客户服务系统与仓库或配送中心提供的管理手段,满足企业对低成本和快速处理的要求,帮助不同行业的企业解决复杂的配送问题并且降低订单履行成本,它已越来越广泛的应用到各大仓库,并随着不断的完善发挥着越来越重要的作用[16]。任云晖(2016)《企业仓库管理系统的设计与实现》写到人员管理已不能及时准确反映各类物资库存状况,易造成物资的积压和断货,也不能及时将物资消耗数据共享各部门,为降本增效工作提供有效支撑[17]。仓库管理系统解决这些问题,初步实现了仓库管理的信息化,达到了仓储统计数据的实时、准确,提高了物资管理工作的效率。王慧荣、史海生(2015)《仓库管理信息系统》文章简述了运用Visual Basic、Access实现仓库信息化管理。基于MSP430单片机无线温度控制系统的软、硬件设计,采用分布式控制方式,提高了控制精度,降低了控制成本,并且可以实时地远程操作[18]。使用本软件还可以查询任意日期范围内的出人库等历史记录,快速高效地进行仓库清查盘点。这样一方面有效地降低了库存不足对生产的负面影响,另一方面又提高了资金的利用率,盘活了企业的闲置资金,为企业带来间接经济效益。同时将仓库管理员从繁琐的数据计算和信息检索中解脱出来。文光林(2016)《仓库管理小条码解决大问题》引入条码系统,对原材料、半成品、成品等全面实行条码自动化管理,管理入库、出库、调拨、移库、盘点等业务,提高管理水平;采购条码扫描枪以及条码打印设备,打印箱标以及各种业务单据,提高出入库等作业效率和作精度;改造现有局域网,搭建WLAN,通过LAN、WLAN将条形码管理系统的服务器以及电脑、条码扫描枪、打印终端等连接起来,再通过接口程序导入到ERP系统中,使其可以实时处理各种任务[19]。简单地说,条码系统的优点体现在“快”、“准”和“省”三个字。条码管理实质是过程管理,过程精细可控,结果自然正确有效。


    1.4 研究的主要内容
    本文以金武彩印机械设备有限公司的仓储作为研究对象,在实际考察公司仓库管理现状的情况下,了解公司现有的仓储管理模式,分析此公司对于仓储管理的具体需求,并设计了一套适合金武彩印机械设备有限公司的仓库管理系统。主要研究了仓库管理系统的各种业务流程,仓库管理系统的体系架构,功能架构以及各个模块的功能设计与界面实现。


    2 相关理论基础
    2.1  仓储管理系统理论概述
    2.1.1仓储管理系统概念
    “仓”可以称为仓库,是存放物品的建筑物和场地,可以是房屋建筑、大型容器、洞穴或者特定的场地等,具有存放和保护物品的功能。“储”表示收存以备使用,具有收存、保管、交付使用的意思,适当用有形物品的行为。它的性质可以归结为仓储是物质货物的生产持续过程,物质的仓储也创造着货物的价值;仓储既有物品静态的储存,也有物品动态的存取、保管、控制监督的过程;仓储活动发生在仓库等特定的场所;仓储的对象即可以是生产资料,也可以是生活资料,但必需是实物动产[20]。
    仓储管理是现代物流管理的重要内容之一,是向物品提供存放场所、物品的存取和对存放物品的保管保养、控制监督与核算等过程的统称。现代仓储与传统仓储比较有着较大的区别。传统仓储管理主要体现是对物品的管理,体现出静态的特性,而现代仓储管理更注重满足客户需求、高动态响应和低成本等的管理。
    仓储管理系统(WMS)是一个实时的计算机软件系统,它能够按照运作的业务规则和运算法则,对信息、资源、行为、存货和分销运作进行更完美地管理,使其最大化满足有效产出和精确性的要求[21]。
    2.1.2仓储管理系统特点
    现今社会管理对象表现为整合上游、企业本身、下游一体化供应链的信息和资源,而仓库,尤其是制造业中的仓库,作为链上的节点,在物流供应链的管理中,不再把其作为维持生产和销售的措施,而将其作为一种供应链的平衡机制,其作用主要是协调整个供应链。但现代企业同时又面临着许多不确定因素,无论他们来自分供方还是来自生产或客户,对企业来说处理好库存管理与不确定性关系的唯一办法是加强企业之间信息的交流和共享,增加库存决策信息的透明性、可靠性和实时性。而这,正是WMS所要帮助企业解决的问题[22]。
    WMS软件除了管理仓库作业的结果记录、核对和管理外最大的功能是对仓库作业过程的指导和规范:即不但对结果进行处理,更是通过对作业动作的指导和规范保证作业的准确性、速度和相关记录数据的自动登记(入计算机系统),增加仓库的效率、管理透明度真实度降低成本比如通过无线终端指导操作员给某定单发货:当操作员提出发货请求时,终端提示操作员应到哪个具体的仓库货位取出指定数量的那几种设备,扫描货架和设备条码核对是否正确,然后送到接货区,录入运输单位信息,完成出货任务,重要的是包括出货时间、操作员、货物种类、数量、产品序列号、承运单位等信息在货物装车的同时已经通过无线方式传输到了计算机信息中心数据库。
    2.1.3仓储管理系统功能介绍
    仓储管理系统不仅仅是仓库管理功能还包括系统功能的设定、基本资料的维护和查询功能等多种功能。
    仓库管理功能包括产品入库:采购入库或者其他入库,自动生成入库单号,货品及可选择方便快捷,可以区分正常入库、退货入库等不同的入库方式;产品出库:销售出库或者其他出库,可以自动生成出库单号,可以区分正常出库、赠品出库等不同的出库方式;库存管理:不需要手工管理,当入库和出库时,系统自动生成每类产品的库存数量,查询方便;特殊品库:当客户需要区分产品时,可以建立虚拟的仓库管理需要区分的产品,各功能和正常品库一致;调拨管理:针对不同的库之间需要调拨,可以自动生成调拨单号,支持货品在不同的仓库中任意调拨;盘点管理:用户随时可以盘点仓库,自动生成盘点单据,使盘点工作方便快捷;库存上限报警:当库存数量不满足一个量的时候,系统报警[23]。
    系统功能的设定是自定义整个系统的管理规则,包括定义管理员及其操作口令的功能。
    基本资料的维护是对每批产品生成唯一的基本条码序列号标签,用户可以根据自己的需要定义序列号,每种型号的产品都有固定的编码规则,在数据库中可以对产品进行添加、删除和编辑等操作。
       查询功能包括采购单查询,销售单查询,单个产品查询,库存查询等(用户定义)。   查询都是按照某个条件:条形码序列号、出库日期、出库客户等来查询。

    2.4 基于B/S(Browser/Server)技术的仓储管理
    传统的WMS采用C/S(Client/Server)结构模式搭建,需要在不同的客户机上安装不同的客户应用程序,其维护和更新也很是麻烦,需要为每一个现有的客户端应用程序进行升级,同时使用者如果不经过专门的培训的话很难使用,而基于B/S多层架构实现的WMS的客户端是一个简单易用的浏览器软件,用户无需培训就可以直接使用,并且维护和更新都是体现在服务器端的,当系统需要升级时,也只需对Web服务器上的服务处理程序进行升级即可,无需再为每个客户端升级[27]。
    SUN公司首先提出的B/S三层结构概念,将结构划分为表达层、应用(逻辑)层和数据层。表达层(Presentation Layer)以Web服务器为基础,负责信息发布;应用层(Application Layer)负责处理核心业务逻辑;数据层(Data Layer)的基础是数据库管理系统,负责数据的组织,并向应用层提供接口。
    目前,在大多数的B/S结构的Web应用中,浏览器直接通过HTML或者JSP的形式与用户实现交互,响应用户的请求,虽然很直观,但是大多数管理信息系统操作的数据量都是十分惊人的,随着代码的增多会使JSP页面臃肿不堪,Web服务器负荷过重。另外,在系统的安全性上,也有很多漏洞[28]。


    3 金武彩印机械设备有限公司仓储管理问题与需求分析
    3.1  金武彩印机械设备有限公司简介
    深圳市金武彩印机械设备限公司是一家贸易型私营有限公司,坐落于中国广东省深圳市龙岗区深圳龙岗区南联碧新路满京华盈丰中心12栋19楼,占地为200平方米,专业生产小型UV平板打印机设备。公司创立于2014年,是一家专业从事小型UV打印机设备研发、生产、销售、服务为一体的专业现代化高新技术企业,是一批富有活力、勇于创新、多年专业的技术人员组成,汇聚了机械设计、控制系统开发、制造加工、产品销售等资深工程师,具有强大的研发能力和创新能力,拥有自己的核心技术和专利产品,为客户提供高效、稳定、先进的自动化设备。公司技术团队拥有打印机研发和改造近十年经验,能够解决爱普生系列、精工系列各种打印机型号的改装和其它改装公司的售后问题。技术力量覆盖A4至A0机型,目前的生产以A4和A3的机型为主.为全球内各种中小型企业和个体户以及小型创业的服务,尽可能的降低UV打印机的各种高成本,实现UV打印机的小而美,为UV打印事业开拓新的蓝图。金武彩印公司专注于各种UV打印机的研究和开发,以“让市场上的小型UV打印机设备改革换代”为目标,目前已研发出新型高效的自动升级版A4UV平板打印机和A3UV打印机[29]。 深圳市金武彩印机械设备有限公司的经营模式为生产厂家,主要经营产品有打印机、UV打印机、平板打印机、A4UV打印机、喷绘机、小型uv平板打印机、自动UV平板打印机、小型打印机、平板喷绘机打印机、个性定制打印机、浮雕uv打印机、手机壳打印机、手机壳彩绘机、3d打印机、UV平板打印机、万能UV平板打印机、uv打印机厂家、A3uv平板打印机。公司的主要客户群为企业、创业者、代理、外贸;主要市场在香港、台湾、上海、广东省、广西省、福建省、河南省,云南省,黑龙江省,北京等地,还包括越南、泰国等国外地区。公司发展迅速,近年来采用线上交易的方式拓展了更多业务,在阿里巴巴,慧聪网,虎易网等店网络交易平台都建立了自己的网络店铺[30]。
    3.2  金武彩印机械设备有限公司仓储管理现状
    金武彩印机械设备有限公司生产各个设备收到了客户普遍的认可和信赖,尤其是A4的机型,不仅是落地祖国的大江南北,更有着广泛的海外客户,香港、台湾、新加坡、越南、泰国、马来西亚等。由于客户的分布状况不同、各自的营销策略、销售任务各不相同,由于经销商之间距离较远,之间沟通交流非常有限。在产生脱销、滞销设备之后,甚至事隔几个月,才产生沟通需求、调拨需求。为了避免这种情况的发生,对各个业务流程进行分析、梳理,研究出具有金武彩印机械设备有限公司特点的滞销设备计算方法与调拨原则,明确滞销设备调拨管理各项工作流程,关键控制点及各个工作模块间的关系,形成一套完整的、适合金武彩印机械设备有限公司的仓库管理业务流程体系。
    3.3  金武彩印机械设备有限公司仓储管理问题分析
    1.设备库存积压严重
    金武彩印机械设备有限公司最大也最主要的客户是各个印刷厂,随着金武彩印机械设备有限公司效益的快速增长,金武彩印机械设备有限公司也随之做大做强。然而由于彩印机具有时间的特殊性,一般产量和销量都很稳定,但是随便这几年电子消费品的增加,彩印机的需求不确实性增加,导致成品仓存货日积月累,已经超出仓库所承载的合理范围。公司成品仓所存放的货都是以“箱”为单位存储,不同的箱头有不同的代码,其大小、尺寸、重量也不同,不同的箱头放在不同的仓库中,例如C01放在F仓,A02放在Z仓。由于每台彩印机的梯型都不尽相同,所以不同梯有不同数量、不同种类的箱头构成。这也直接导致了其存储、运输的不便。金武彩印机械设备有限公司成品仓有11个大仓和部分小仓,仓库外围设有叉位,用于暂时存放待发货箱头。每个仓库的建筑结构都相同,仓库分为左右两边,以一条通道隔开,库内分设35垮,第9垮和第22垮为通道。
    2.过度依赖人工操作
    由于箱头都是按照严格的包装标准制作而成,且大部分箱头都体积庞大,非人手可以搬动,也不是一般的货架设备可以承受。库内操作都依靠龙门起重机、桥式起重机、叉车等装卸搬运设备。鉴于彩印机产业的这种特殊性,自动化立体仓库并不适用于此类货物的存储。因此仓库都依靠人工手动操作设备,进行货物的装卸搬运工作。仓库作业流程中,收货、拣货、发货、盘点等环节无不需要大量人力去操作。收货时,本可以将明天要发的箱头调出,而仓管员却直接入库,在拣货环节再调出,多余操作既浪费时间又耗损机械设备。人员散漫,效率低下,每天有三分之二的时间花在拣货过程,再加上部分箱头并不在系统库位中,因而需要耗费大量时间去寻找这些箱头。发货前,仓管员需对待发箱头进行点数,总会出现不齐的情况,仓管员便到处奔走寻找遗漏的箱头,费时费力。发货时,依靠仓管员在发货表里勾选已装车箱头,来确定装货情况,有时一个仓管员要同时发三到四台车,于是便经常出现发错货、发漏货的情况;盘点时,由于货物本身尺寸大、堆放太高,所以高层的货物条码无法用条码枪扫描,需要靠人工手输条码。而盘点人员一味求速度,手输信息错误,直接导致复盘工作量增加,这些都是不必要的多余工作量。而作业过程中,每一项操作都离不开大量的打印纸、厚厚的单据,纸上作业的依赖度过大,极大地浪费了公司资源,且无法保证工作的效率与准确率。这些问题都严重影响了仓库流程的进度,标准化作业也无法实现,不但对公司形象会造成影响,也会动摇公司与客户间的长期战略合作关系。
    3.库位更新不及时
    对于为何部分箱头并不在系统所示库位中导致拣货难的问题,通过观察和分析,得出了以下几点原因:(1)货物入仓时仓管员未及时扫描入库,或出现扫错库位情况。(2)吊机在库内作业时,调动箱头调整库位,改变了一些货物的库位但未及时在系统中更新库位,或出现遗漏、条码手输错误等情况。(3)拣货时,叉车手没有把货物叉入指定叉位,而是叉到其他地方去了,导致第二天点数时找不到箱头。总之,主要是因为货物在移动时库位没有即时更新,影响到仓库作业的流畅。而有时因为各种原因而取消了发货计划时,已经拣出仓的箱头便暴露在仓库外或叉位上,并没有及时重新入库,于是出现破损、丢失、发往其他地方的情况,而以后再次发货时却无法找到相应箱头,直接给公司造成经济损失。而库内部分货物的储存堆码也不合理。货垛堆放不整齐,垛距不标准,常出现垛压线的情况,货物堆码的朝向也不是完全同方向,这些问题的存在都给扫描箱头条形码、更新库位带来不便,影响了拣货和盘点作业。


    3.4  金武彩印机械设备有限公司仓储管理需求分析  


    为使此章与企业结合,将管理员、负责人等名称换位具体岗位,例如将金武彩印机械设备有限公司各职位总经理、部门经理、仓库经理、采购员、保管员、技术员、网上客服等具体岗位名称带入




    通过研究金武彩印机械设备有限公司主要经营设备以及对其历史销售数据的统计分析,划分出热销设备和滞销设备,目前本公司销售的设备有小型平板打印机、UV打印机、万能打印机、食品打印机。研究和设计热销设备和滞销设备仓储系统的相关业务(如出入库管理、移库管理、移位管理、货品管理等),提高设备物流管理环节中的仓储问题的业务能力。同时设计在售设备管理和统计功能,以便于满足金武彩印机械设备有限公司的个性化需要,对设备实行差异化高效的管理。
    公司总经理角色职责,主要负责系统管理、系统模块管理、系统设置功能,其中系统管理包括:权限增加、删除查询功能,角色创建、查询及删除功能,用户添加、修改及启用停止功能;系统管理员能够管理整个系统使用用户,包含仓库、财务人员,负责为他们分配角色权限。系统管理主要包含:菜单、功能设置,及用户角色设置,角色具有功能分配;系统设置包含参数设置、系统字典维护、预测系数设定、脱销和滞销阈值设定、第三方接口地址维护等。
    仓库经理主要负责仓库的管理工作,包含仓库的盘点清算、调拨工作,因此具体职责有:出入库管理、盘点管理、在途设备查询管理。出入库管理有:设备库存管理、货位管理、货架管理、设备上下架管理、退货管理。设备库存管理指,库存查询,设备扫描入库,货品货架排放,货架设备数量盘点。库存盘点:出入库盘点,根据每人出库如情况,进行日盘点;设备类别盘点,按照库房管理制度,每周进行一次设备类别盘点,记录下每周销售最多个的设备类别,最少设备类别,及缺货设备类别,这个最为重要,及时反馈设备管理员及时采购补货、或者调拨处理;退货、残品盘点,及时记录设备退货情况,退货原因,为系统分析销售情况、质量情况提供有力数据基础。残品入库后根据情况,要对残品进行盘点清算,及时处理,以免占有库房空间。仓库管理员还有掌握在途设备动态,设备在途运输位置等信息。
    保管员,即管理设备者,能够管理设备属性、设备属性分为静态、动态属性,所谓静态属性是设备固有性质,如:编号、品质、重量、大小等。动态属性指能够影响设备定价,对设备价格有影响属性,如:系列产品,不同存储大小、不同颜色,设备价格不一样,存储容量、颜色及为动态属性。设备管理员对设备图片、品类进行管理设置。设备品类管理分为:添加、修改、删除处理。设备同样具有添加、修改及删除操作。具有对设备进行监控功能权限,能够实时查看某款设备在某个销售情况,是否已经滞销、脱销进行掌握。
    财务经理主要应收账款、应付账款、成本和利润管理,即设备销售以后货款管理,采购付款处理等功能,能够根据系统设备销售分析结算,经营设备销售盈亏分析。
    通过对金武彩印机械设备有限公司各个部门角色职能分析,针对滞销设备仓储活动、销售活动的分析,建立科学的数据预测方法/模型,预测各销售能力,再根据预测结果优化生产和销售设备途径。系统涉及到的用例主要有:
    (1)仓库经理:退货管理,上下架,货架管理,货位管理,设备库存,设备类别盘点,出库盘点,入库盘点以及残品盘点。
    (2)公司总经理:权限管理,角色管理,用户管理,菜单管理,模块管理,参数管理,字典管理以及预测系数管理。
    (3)保管员:添加品类信息,修改品类信息,查询品类信息,添加设备信息,修改设备信息,查询设备信息,设置SKU信息,设备属性管理,设备销售统计,设备库存分析,滞销设备统计以及热销,滞销设备对比分析。


    3.4.1系统管理
    根据金武彩印机械设备有限公司的实际情况,金武彩印机械设备有限公司的组织结构为总经理、部门经理、仓库经理、普通员工、采购员、保管员等角色。系统管理功能主要是针对用户的操作安全提出的,本系统提供二级用户许可权,管理员和普通员工。管理员可以对普通员工进行管理,包括添增新员工,修改员工权限,查询员工状态,删除员工等功能。
    3.4.2基础数据管理
    根据金武彩印机械设备有限公司的实际情况,基本信息管理功能实现了彩印机的原料供应商、彩印机的销售客户等基本信息统一管理。管理员用户,通过用户名、密码登录系统,首先点击上面一级菜单设备管理,进入设备模块。本模块包含:设备查询、设备添加、修改功能;及设备属性管理,设备属性分为静态、动态属性,在这里把设备基本,如:大小、规格、重量等成为静态属性。把能够影响SKU的属性成为动态属性,如:颜色、功能等。本模块还有设备分类、品牌等管理。设备划分三级,编码格式如:A01B01C01。其中A代表一级,B代码第二级,C代表最后一级。品牌管理比较简单,包含添加、修改、删除及查询功能。


    3.4.3收货管理
    根据金武彩印机械设备有限公司的实际情况,金武彩印机械设备有限公司的收货业务主要是收取彩印机相关的材料信息,如烘箱、主电机、金属、塑料、木材、瓷器、玻璃、亚克力、石材、喷头、打印头等。采购员在收货后安排相关性的储位安排。收货管理主要记录订货信息、仓库、联系人、账款、包括订货的货物的价格、数量等信息;其子功能包括采购订单、采购收货、采购退货与采购订单等。
    3.4.4发货管理
    根据金武彩印机械设备有限公司的实际情况,金武彩印机械设备有限公司的发货业务主要是根据客户的需要进行打包,并粘贴RFID标签,然后扫描标签入库。发货人员将物放置超高频RFID读取器前,系统会新增此项发货数据,最后填写无误即可存档完成发货作业。
    3.4.5库存管理
    根据金武彩印机械设备有限公司的实际情况,金武彩印机械设备有限公司的按照事务的不同类型全程跟踪仓库内部的货物转移过程,同时,库存管理能对仓库提供分类分组管理模式,提供库存日常业务处理和库存盘点等处理功能,对企业物料的业务操作进行全面控制和管理。系统管理员通过监控设备库存,实时掌握库存变化动态,实时根据销售情况,然后按照各个经销商实际情况实时调拨处理滞销设备库存;根据系统设置可以在不同时期更改监控设备库存阈值;同时还要具有系统检测到设备库存滞销、脱销后,实时短信、邮件通知联系人功能,且这些联系人具有可变更性。




    4 金武彩印机械设备有限公司仓储管理系统设计







    图4.6 用户管理流程图
    系统管理业务流程为:管理员打开具体的用户申请界面,在登记自己的用户信息,用户名称,用户的电话,用户的地址,用户的部门,最后领导审批通过后,发布作者信息表。
    4.2.2入库管理流程




    图4.7 系统入库登记管理
    入库主要是对于各种类的物品进入仓库的情况进行电子管理的板块。当某物品有调拨要求的时候,系统会自动生成入库单,而管理人员则可以对入库单进行查询等操作。当物品经过物流到达仓库,管理人员则按照对于信息进行入库操作。同时,对于即将入库的货品进行质量、外观以及保质期等进行人工检验,并将其信息登记入入库单中是管理的一个很重要的部分,一点要做到操作人员仔细认真登记,而审核人员反复小心的进行检验。
    4.2.3出库管理流程






    图4.8 系统出库登记管理
    系统用户根据出库单进行货品的出库操作,因此出库单管理是出库管理的第一步。系统出库是由仓储管理系统生成并提交,审核通过之后通过接口提交给本库存管理系统,然后系统自动创建出库单。每一个出库单都有固定的编号,该编号要与仓储管理系统的出生申请信息一致。由于出库单不是由本库存管理系统手工录入,因此出库单只允许查询,不允许用户对其修改和删除操作。


    4.2.4 库存管理流程






    图4.9系统库存预警管理
    每天库房管理人员都需要对库房进行盘存和清理,如果系统中存在货物的库存小于安全库存,就需要查看货物的类别,如果货物为紧急采购件,仓库管理员马上发送订货单给采购部,如果货物为紧急生产件,需要立马发送生产订单给生产部门。如果货物的库存小于最小库存,库管理员马上根据货物类别发送订货单或者生产订单给相应部门。


    4.3 数据库设计
    由于本文设计的仓库管理系统涉及到货物成本内容,所以,本设计中对数据库的安全性有非常高的要求,同时,设计中数据量非常大,对数据库的大小要求也很高,综合设计中的实际要求,本设计选用了企业级的大型数据库,并将SQL Server2012作为数据库的平台。
    4.3.1 数据库E-R模型设计
    本系统的设计的E-R图如下:


    图4.10系统E-R图




















    5 系统实现
    5.1登录功能实现
    系统的登录界面如图5.1所示。如上图所示,用户通过用户名以及密码登录系统。如果用户不是系统的用户,可以通过注册功能进入系统,首先会看到的就是用户注册名称,密码、确认密码、角色,每个栏目都有说明其填写内容及用途,如有空白或填写错误,网站会给予提示,注册者必须填写正确数据,否则无法完成注册。




    图5.1系统登录主页面


    5.2管理功能实现 
    5.2.1 基本数据功能实现
    基本数据功能中的客户信息管理主要包括添加客户信息、修改客户信息、删除客户信息、刷新客户信息记录、主体排序等功能,用户登录系统后点击客户信息管理可进入客户信息管理界面,在客户信息管理界面,填写客户信息后点击保存按钮后,将用户填写的数据送入数据库中保存,具体如图5.2所示。在客户管理界面,完成对客户信息的登记和维护。客户信息包含来往单位、支付方式、交易币种、联系电话、客户地址、卡号银行、手机,如图,每个栏目都会做验证,如果为空白或者数据格式错误时,网站会出现错误信息提示,当所有数据都输入完毕,网站会给予修改完成信息。


    图5.2客户管理界面


    5.2.2 收货管理功能实现
    收货数据维护人机界面:可提供使用者的新增、修改、删除与查询收货数据功能。首先,将供应商提供的收货数据汇入系统,并将所读取到的标签信息与系统中的数据进行核对,若系统中的货物标签数据与读取到的标签数据相符,则系统会自动将此货物勾选,画面中会显示汇入数据笔数与读取数据笔数,若两者相符,则可进行数据存档,若不相符,则可拒绝收货。收货管理实现了本系统的收货管理,发货管理,库存预警和采购等。模块涉及到的设备信息,库存管理模块涉及到设备信息的增加,修改,查询和删除。收货管理包含了采购设备管理、收货通知、质量检测、收货管理、上架、发货管理,具体如图5.4所示。


    图5.4系统收货主界面


    5.2.3 发货管理功能实现
    发货数据维护人机界面:可提供使用者的新增、修改、删除与查询发货数据功能。在核对柜台旁有一闸门,当消费者将购物车推过闸门后,系统会自动读取购物车上的所有货物标签,并将读取到的数据显示在画面上,并即时计算购物金额。仓库管理员登录系统后点击库存管理可进发货管理界面,在发货管理界面,依次填写发货货物、发货时间、出发货数量、出发货人等信息后点击保存按钮后,将用户填写的数据送入数据库中保存。发货库管理包含了发运设备、批次计划模块、补货模块、收货模块。仓库管理员登录系统后点击库存管理可进入收货管理界面,在收货管理界面,依次填写收货货物、收货时间、收货数量等信息后,点击保存按钮后将用户填写的数据送入数据库中保存,具体如图5.6所示。


    图5.6系统发货主界面


    5.2.4库存管理功能实现
    库存管理实现了本系统的库存查询,货物报溢,货物报损和查询等,具体如图5.8所示。库存管理可提供使用者的新增、修改、删除与查询库存数据处理功能。此功能主要是处理遗失或报废的货物,系统使用者有两种读取方式选用,单品读取是使用短距离的超高频RFID读取器,可读取小量或单件货物;大量读取是使用长距离的超高频RFID读取器可一次读取大量货物。


    图5.8库存管理界面






    结论



















    参考文献
    [1]苏诚,许朋刚,代志良. 智能仓储系统设计与开发应用[J]. 机械,2017,(10):65-71. 
    [2]王赜坤. 无线智能仓储管理系统的设计与实现[J]. 信息技术,2017,(08):21-24+28. 
    [3]杨伟超,马增军,耿卫. 基于Hubble.net的仓储系统设计与实现[J]. 计算机技术与发展,2017,(10):181-184+188. 
    [4]Oliver.Research on the application of RFID in warehouse management system[J]. social sciences print,2015,10:67-68.
    [5]Bowen and Shoemaket.JIT application of TOYOTA[J] . iBusiness , 2015,02:29-30
    [6]Singh and Sirdeshmukh.Research on warehouse management system[J] . Supply Chain Management: An International Journal. 2016 ,1:57-58
    [7]]Harris.Optimal inventory model[J] . Procedia-Social and Behavioral Sciences . 2016,1:34-36
    [8]Hariga,Gullu.Economic order batch model[J] . Real-Time Systems ,2014,1:26-28 
    [9]]Lau,Chang. Logistics development in China[J]. social sciences print, 2016,12:14-15 .
    [10]Andrew Wirth,James. The impact of e-commerce on international trade and employment[J] . Procedia-Social and Behavioral Sciences . 2016,1:34-36
    [11]K.Sridhar Moorthy. Warehouse management system with "zero inventory"[J] . ACM SIGSOFT Software Engineering Notes , 2012,4:32-33
    [12]李涛.对订单仓库管理模型[J].中国物流与采购, 2014,18:6-8. 
    [13]邓科.RFID在仓库管理系统中的应用研究[J]. 物流技术, 2015,10:12-14. 
    [14].孙光付.智能仓库管理系统研究[J]. 计算机与现代化, 2015,08:45-46 
    [15]李江. 跨境电子商务第三方物流模式研究[J]. 电子商务,2013,03:4-5
    [16]任云晖.企业仓库管理系统的设计与实现[J]. 商场现代化, 2013,4:340-36 . 
    [17]王慧荣、史海生.仓库管理信息系统[J].经营管理者,2014,24:74-75.  
    [18]文光林.仓库管理小条码解决大问题[J].中国市场,2015,32:35-37. 
    [19]赵增辉,冯旭. 基于NHibernate的仓储管理系统设计与实现[J]. 物流工程与管理,2017,39(02):61-62. 
    [20]付海丽,邓伦强,王希锋. SQL数据库的构建与管理维护[J]. 网络安全技术与应用,2015,(04):21+25. 
    [21]肖念. 浅析SQL数据库的设计[J]. 计算机光盘软件与应用,2017,16(06):201-202. 
    [22]甘洁静. SQL数据库的建立与管理[J]. 计算机光盘软件与应用,2015,(04):109-110.
    [23]沈海峰. 关于如何优化SQL数据库的性能的几点分析[J]. 电脑知识与技术,2016,8(03):517-518.
    [24]喻洋,叶玉堂,邢同举. SQL数据库操作中的常用C~#语句[J]. 软件导刊,2015,10(11):84-87. 
    [25]陆丽芳,郑蓉. 中小型企业仓储管理系统的设计与实现[J]. 计算机时代,2016,(09):64-65+68. 
    [26]周鲜成. 基于物联网的智能物流仓储管理系统研究[A]. Intelligent Information Technology Application Association.Proceedings of 2011 International Conference on Ecological Protection of Lakes‐Wetlands‐Watershed and Application of 3S Technology(EPLWW3S 2011 V2)[C].Intelligent Information Technology Application Association:,2016:3.
    [27]周鲜成. 基于物联网的智能物流仓储管理系统研究[A]. Asia Pacific Environmental Science Research Center, Hong Kong、Huazhong Normal University, China、Institute of Geodesy and Geophysics,Chinese Academy of Sciences、Wuhan Institute of Technology, China.Proceedings of 2010 International Conference on Remote Sensing (ICRS 2010) Volume 3[C].Asia Pacific Environmental Science Research Center, Hong Kong、Huazhong Normal University, China、Institute of Geodesy and Geophysics,Chinese Academy of Sciences、Wuhan Institute of Technology, China:,2016:3.
    [28]王惠珊. 如何选择适合的仓储管理系统[N]. 现代物流报,2016-02-27(B02).
    [29]王家海,沈炜,周莹君. 基于RFID的中小企业仓储管理系统设计与实现[J]. 机电一体化,2016,(01):64-66. 
    [30]高昊江. 板料加工车间物流智能控制及仓储管理系统研究[D].华中科技大学,2017.



    展开全文
  • 考试科目一:综合知识在嵌入式系统的存储部件中,存取速度最快的是(1)。 (1)A.内存 B.寄存器组 C.Flash D.Cache 【答案】B 【解析】本题考查嵌入式系统存储结构的基础知识 嵌入式系统的存储结构采用分级的...

    考试科目一:综合知识

    在嵌入式系统的存储部件中,存取速度最快的是(1)。
    (1)A.内存             B.寄存器组          C.Flash         D.Cache

    【答案】B
    【解析】本题考查嵌入式系统存储结构的基础知识
    嵌入式系统的存储结构采用分级的方法来设计,从而使得整个存储系统分为四级,即寄存器组、高速缓冲(Cache)、内存(包括flash)和外存,它们在存取速度上依次递减,而在存储容量上逐级递增。

    实时操作系统(RTOS)内核与应用程序之间的接口称为(2)。
    (2)A.I/O接口          B
    C.API               D.GUI

    【答案】C
    【解析】 API(Application Programming
    Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
    所有操作系统(不仅仅只是嵌入式操作系统)给应用程序提供的接口,称之为API。
    选项中的GUI,是用户与操作系统之间的接口: 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

    嵌入式处理器是嵌入式系统的核心部件,一般可分为嵌入式微处理器(MPU)、微控制器(MCU)、数字信号处理器(DSP)和片上系统(SOC)。以下叙述中,错误的是(3)。
    (3)A.MPU在安全性和可靠性等方面进行增强,适用于运算量较大的智能系统
    B.MCU典型代表是单片机,体积小从而使功耗和成本下降
    C.DSP处理器对系统结构和指令进行了特殊设计,适合数字信号处理
    D.SOC是一个有专用目标的集成电路,其中包括完整系统并有嵌入式软件的全部内容

    【答案】A
    【解析】MPU采用增强型通用微处理器。由于嵌入式系统通常应用于环境比较恶劣的环境中,因而MPU在工作温度、电磁兼容性以及可靠性方面的要求较通用的标准微处理器高。但是,MPU
    在功能方面与标准的微处理器基本上是一样的。A是错的。 MCU又称单片微型计算机(Single Chip
    Microcomputer)或者单片机,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。B是对的。DSP是一种独特的微处理器,是以数字信号来处理大量信息的器件。其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,它的强大数据处理能力和高运行速度,是最值得称道的两大特色。C也是对的。SOC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。D也是对的。

    这里写图片描述

    【答案】C
    【解析】 在题目给出的环境下,100条指令的执行时间为:
    (Δt+3Δt+Δt+2Δt+Δt)+(100-1)*3Δt=305Δt 吞吐率=指令条数/执行时间=100/305Δt 。

    某计算机系统输入/输出采用双缓冲工作方式,其工作过程如下图所示,假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间T为10μs,缓冲区送用户区的时间M为6μs,系统对每个磁盘块数据的处理时间C2μs。若用户需要将大小为10个磁盘块的Docl文件逐块从磁盘读入缓冲区,并送用户区进行处理,那么采用双缓冲需要花费的时间为(5)μs,比使用单缓冲节约了(6)μs时间。
    
    (5)A.100            B.108           C.162           D.180
    (6)A.0          B.8             C.54                D.62

    这里写图片描述

    【答案】B C
    【解析】 单缓冲区执行时间:(10+6+2)+(10-1)*(10+6)=162μs
    双缓冲区执行时间:(10+6+2)+(10-1)*10=108μs 双缓冲比单缓冲节省162-108=54μs。

    某文件系统文件存储采用文件索引节点法。假设文件索引节点中有8个地址项iaddr[0]iaddr[7],每个地址项大小为4字节,其中地址项iaddr[0]iaddr[5]为直接地址索引,iaddr[6]是一级间接地址索引,iaddr[7]是二级间接地址索引,磁盘索引块和磁盘数据块大小均为4KB。该文件系统可表示的单个文件最大长度是(7)KB。若要访问iclsClient.dll文件的逻辑块号分别为6、520和1030,则系统应分别采用(8)。
    (7)A.1030           B.65796     C.1049606       D.4198424
    (8)A.直接地址索引、一级间接地址索引和二级间接地址索引
    B.直接地址索引、二级间接地址索引和二级间接地址索引
    C.一级间接地址索引、一级间接地址索引和二级间接地址索引
    D.一级间接地址索引、二级间接地址索引和二级间接地址索引

    【答案】D C
    【解析】 直接索引范围:6*4KB=24KB ,对应逻辑块号:0-5;
    一级间接索引范围:(4KB/4B)*4KB=4096KB ,对应逻辑块号:6-1029;
    二级间接索引范围:(4KB/4B)*(4KB/4B)*4KB=4194304KB ,对应逻辑块号:1030以及上。 24KB +
    4096KB + 4194304KB = 4198424KB。

    给定关系模式R(A,B,CDE)、S(DE,F,G)和π1,2,4,6(R ?S),经过自然连接和投影运算后的属性列数分别为(9)。
    (9)A.94        B.74       C.97       D.77

    【答案】B
    【解析】 R与S进行自然连接后,结果属性集为:A,B,C,D,E,F,G。 投影操作后,结果为:A,B,D,F。

    给定关系R(A1,A2,A3,A4)上的函数依赖集F={A1→A2A5,A2→A3A4,A3→A2},R的候选关键字为(10)。函数依赖(11)∈F+。
    (10)A.A1            B.A1A2          C.A1A3          D.A1A2A3
    (11)A.A5→A1A2   B.A4→A1A2       C.A3→A2A4       D.A2→A1A5

    【答案】A C 【解析】 (10)通过绘制函数依赖图可以了解到,从A1出发,可以遍历全图,所以候选关键字为A1。
    (11)F+是代表,F函数依赖集的闭包,通俗一点,就是从F函数依赖集能推导出来的依赖关系。
    A3→A2A4是正确的。首先F中有直接的依赖关系:A3→A2,此外,又由A3→A2与A2→A4得出A3→A4。A3→A2与A3→A4合并为A3→A2A4。

    假设某证券公司的股票交易系统中有正在运行的事务,此时,若要转储该交易系统数据库中的全部数据,则应采用(12)方式。
    (12)A.静态全局转储    B.动态全局转储    C.静态增量转储    D.动态增量转储

    【答案】B 【解析】 从题目中“系统中有正在运行的事务”可知应采用动态方式,从题目中“全部数据”可知应是全局转储,所以应采用:动态全局转储。

    IETF定义的区分服务(DiffServ)模型要求每个IP分组都要根据IPv4协议头中的(13)字段加上一个DS码点,然后内部路由器根据DS码点的值对分组进行调度和转发。
    (13)A.数据报生存期        B.服务类型      C.段偏置值      D.源地址

    【答案】B 【解析】 区分服务是为解决服务质量问题在网络上将用户发送的数据流按照它对服务质量的要求划分等级的一种协议。
    区分服务将具有相同特性的若干业务流汇聚起来,为整个汇聚流提供服务,而不是面向单个业务流来提供服务。每个IP分组都要根据其QoS需求打上一个标记,这种标记称为DS码点,可以利用IPv4协议头中的服务类型字段,或者IPv6协议头中的通信类别字段来实现,这样就维持了现有的IP分组格式不变。

    在IPv6无状态自动配置过程中,主机将其(14)附加在地址前缀1111 1110 10之后,产生一个链路本地地址。
    (14)A.IPv4地址        B.MAC地址     C.主机名       D.随机产生的字符串

    【答案】B 【解析】
    IPv6地址的格式前缀(FP)用于表示地址类型或子网地址,用类似于IPv4的CIDR表示方法表示。链路本地地址:前缀为1111 1110
    10,用于同一链路的相邻节点间的通信。相当于IPv4的自动专用IP地址。为实现IP地址的自动配置,IPv6主机将MAC地址附加在地址前缀1111
    1110 10之后,产生一个链路本地地址。

    如果管理距离为15,则(15)。
    (15)A.这是一条静态路由          B.这是一台直连设备  
    C.该路由信息比较可靠         D.该路由代价较小

    【答案】C 【解析】 管理距离是指一种路由协议的路由可信度。每一种路由协议按可靠性从高到低,依次分配一个信任等级,这个信任等级就叫管理距离。
    为什么要出现管理距离这个技术呢?
    在自治系统内部,如RIP协议是根据路径传递的跳数来决定路径长短也就是传输距离,而像EIGRP协议是根据路径传输中的带宽和延迟来决定路径开销从而体现传输距离的。这是两种不同单位的度量值,我们没法进行比较。为了方便比较,我们定义了管理距离。这样我们就可以统一单位从而衡量不同协议的路径开销从而选出最优路径。正常情况下,管理距离越小,它的优先级就越高,也就是可信度越高。
    对于两种不同的路由协议到一个目的地的路由信息,路由器首先根据管理距离决定相信哪一个协议。
    AD值越低,则它的优先级越高。 一个管理距离是一个从0-255的整数值,0是最可信赖的,而255则意味着不会有业务量通过这个路由。
    由此可见,管理距离是与信任相关的,只有选项C是相符的。

    把应用程序中应用最频繁的那部分核心程序作为评价计算机性能的标准程序,称为(16)程序。(17)不是对Web服务器进行性能评估的主要指标。
    (16)A.仿真测试      B.核心测试          C.基准测试      D.标准测试
    (17)A.丢包率       B.最大并发连接数   C.响应延迟      D.吞吐量

    【答案】C A
    【解析】 (16)本题考查基本概念,应用最频繁的那部分核心程序作为评价计算机性能的标准程序,称为基准测试程序。
    (17)丢包率不应作为Web服务器性能评估的主要指标,而应作为网络的相关指标。

    电子政务是对现有的政府形态的一种改造,利用信息技术和其他相关技术,将其管理和服务职能进行集成,在网络上实现政府组织结构和工作流程优化重组。与电子政务相关的行为主体有三个,即政府、(18)及居民。国家和地方人口信息的采集、处理和利用,属于(19)的电子政务活动。
    (18)A.部门            B.企(事)业单位       C.管理机构      D.行政机关
    (19)A.政府对政府 B.政府对居民         C.居民对居民 D.居民对政府

    【答案】B B 【解析】

    ERP(Enterprise Resource Planning)是建立在信息技术的基础上,利用现代企业的先进管理思想,对企业的物流、资金流和(20)流进行全面集成管理的管理信息系统,为企业提供决策、计划、控制与经营业绩评估的全方位和系统化的管理平台。在ERP系统中,(21)管理模块主要是对企业物料的进、出、存进行管理。
    (20)A.产品            B.人力资源          C.信息            D.加工
    (21)A.库存            B.物料                C.采购            D.销售

    【答案】C A
    【解析】 (20)本题考查到的,是信息化的“三流”:信息流,资金流,物流。 (21)
    采购与库存管理是ERP的基本模块,其中采购管理模块是对采购工作——从采购订单产生至货物收到的全过程进行组织、实施与控制,库存管理(Inventory
    Management,IM)模块则是对企业物料的进、出、存进行管理。

    项目的成本管理中,(22)将总的成本估算分配到各项活动和工作包上,来建立一个成本的基线。
    (22)A.成本估算      B.成本预算          C.成本跟踪      D.成本控制

    【答案】B
    【解析】本题考查成本预算的定义。

    23)是关于项目开发管理正确的说法。
    (23)A.需求文档、设计文档属于项目管理和机构支撑过程域产生的文档
    B.配置管理是指一个产品在其生命周期各个阶段所产生的各种形式和各种版本的文档、计算机程序、部件及数据的集合
        C.项目时间管理中的过程包括活动定义、活动排序、活动的资源估算、活动历时估算、制定进度计划以及进度控制
    D.操作员指南属于系统文档

    【答案】C
    【解析】 配置管理是PMBOK、IS09000和CMMI中的重要组成元素,它在产品开发的生命周期中,提供了结构化的、有序化的、产品化的管理方法,是项目管理的基础工作。配置管理是通过技术和行政手段对产品及其开发过程和生命周期进行控制、规范的一系列措施和过程。信息系统开发过程中的变更以及相应的返工会对产品的质量有很大的影响。
    产品配置是指一个产品在其生命周期各个阶段所产生的各种形式(机器可读或人工可读)和各种版本的文档、计算机程序、部件及数据的集合。该集合中的每一个元素称为该产品配置中的一个配置项(Configuration
    Item,CI),配置项主要有两大类: 属于产品组成部分的工作成果,如需求文档、设计文档、源代码、测试用例等。
    属于项目管理和机构支撑过程域产生的文档,如工作计划、项目质量报告、项目跟踪报告等。这些文档虽然不是产品的组成部分,但是值得保存。
    软件系统的文档可以分为用户文档和系统文档两类。用户文档主要描述系统功能和使用方法,并不关心这些功能是怎样实现的;系统文档描述系统设计、实现和测试等各方面的内容。
    用户文档:用户文档是用户了解系统的第一步,它可以让用户获得对系统的准确的初步印象。用户文档至少应该包括下述5方面的内容:
    (1)功能描述:说明系统能做什么; (2)安装文档:说明怎样安装这个系统以及怎样使系统适应特定的硬件配置;
    (3)使用手册:简要说明如何着手使用这个系统(通过丰富的例子说明怎样使用常用的系统功能,并说明用户操作错误时怎样恢复和重新启动);
    (4)参考手册:详尽描述用户可以使用的所有系统设施以及它们的使用方法,并解释系统可能产生的各种出错信息的含义(对参考手册最主要的要求是完整,因此通常使用形式化的描述技术);
    (5)操作员指南(如果需要有系统操作员的话):说明操作员应如何处理使用中出现的各种情况。
    系统文档:所谓系统文档指从问题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档。描述系统设计、实现和测试的文档对于理解程序和维护程序来说是非常重要的。

    24)在软件开发机构中被广泛用来指导软件过程改进。
    (24)A.能力成熟度模型(Capacity Maturity Model)
        B.关键过程领域(Key Process Areas)
        C.需求跟踪能力链(Traceability Link)
        D.工作分解结构(Work Breakdown Structure)

    【答案】A
    【解析】 CMM即软件开发能力成熟度模型,是用来指导软件过程改进的。

    25)是关于需求管理正确的说法。
    (25)A.为达到过程能力成熟度模型第二级,组织机构必须具有3个关键过程域
        B.需求的稳定性不属于需求属性
        C.需求变更的管理过程遵循变更分析和成本计算、问题分析和变更描述、变更实现的顺序
        D.变更控制委员会对项目中任何基线工作产品的变更都可以做出决定

    【答案】D
    【解析】 过程能力成熟度模型(CMM)在软件开发机构中被广泛用来指导软件过程改进。该模型描述了软件处理能力的
    5个成熟级别。为了达到过程能力成熟度模型的第二级,组织机构必须具有 6 个关键过程域 KPA(Key Process
    Areas)。故A选项错误。
    除了文本,每一个功能需求应该有一些相关的信息与它联系,我们把这些信息称为需求属性。对于一个大型的复杂项目来说,丰富的属性类别显得尤为重要。例如,在文档中考虑和明确如下属性:创建需求的时间、需求的版本号、创建需求的作者、负责认可该软件需求的人员、需求状态、需求的原因和根据、需求涉及的子系统、需求涉及的产品版本号、使用的验证方法或者接受的测试标准、产品的优先级或者重要程度、需求的稳定性。故B选项错误。
    需求的变更遵循以下流程:
    (1)问题分析和变更描述。这是识别和分析需求问题或者一份明确的变更提议,以检查它的有效性,从而产生一个更明确的需求变更提议。
    (2)变更分析和成本计算。使用可追溯性信息和系统需求的一般知识,对需求变更提议进行影响分析和评估。变更成本计算应该包括对需求文档的修改、系统修改的设计和实现的成本。一旦分析完成并且被确认,应该进行是否执行这一变更的决策。
    (3)变更实现。这要求需求文档和系统设计以及实现都要同时修改。如果先对系统的程序做变更,然后再修改需求文档,这几乎不可避免地会出现需求文档和程序的不一致。
    故C选项错误。

    螺旋模型在(26)的基础上扩展而成。
    (26)A.瀑布模型      B.原型模型      C.快速模型      D.面向对象模型

    【答案】B
    【解析】

    27)适用于程序开发人员在地域上分布很广的开发团队。(28)中,编程开发人员分成首席程序员和“类”程序员。
    (27)A.水晶系列(Crystal)开发方法     B.开放式源码(Open source)开发方法
    C.SCRUM开发方法                     D.功用驱动开发方法(FDD)
    (28)A.自适应软件开发(ASD)              B.极限编程(XP)开发方法
        C.开放统—过程开发方法(OpenUP)    D.功用驱动开发方法(FDD)

    【答案】A D
    【解析】 (1) XP (Extreme Programming,极限编程)在所有的敏捷型方法中,XP是最引人瞩目的。它源于Smalltalk圈子,特别是Kent Beck和Ward
    Cunningham在20世纪80年代末的密切合作。XP在一些对费用控制严格的公司中的使用,已经被证明是非常有效的。 (2)
    Cockburn的水晶系列方法,水晶系列方法是由Alistair
    Cockburn提出的。它与XP方法一样,都有以人为中心的理念,但在实践上有所不同。Alistair考虑到人们一般很难严格遵循一个纪律约束很强的过程,因此,与XP的高度纪律性不同,Alistair探索了用最少纪律约束而仍能成功的方法,从而在产出效率与易于运作上达到一种平衡。也就是说,虽然水晶系列不如XP那样的产出效率,但会有更多的人能够接受并遵循它。
    (3)
    开放式源码,这里提到的开放式源码指的是开放源码界所用的一种运作方式。开放式源码项目有一个特别之处,就是程序开发人员在地域上分布很广,这使得它和其他敏捷方法不同,因为一般的敏捷方法都强调项目组成员在同一地点工作。开放源码的一个突出特点就是查错排障(debug)的高度并行性,任何人发现了错误都可将改正源码的“补丁”文件发给维护者。然后由维护者将这些“补丁”或是新增的代码并入源码库。
    (4)
    SCRUM。SCRUM己经出现很久了,像前面所论及的方法一样,该方法强调这样一个事实,即明确定义了的可重复的方法过程只限于在明确定义了的可重复的环境中,为明确定义了的可重复的人员所用,去解决明确定义了的可重复的问题。
    (5) Coad的功用驱动开发方法(FDD-Feature Driven Development),FDD是由Jeff De
    Luca和大师Peter Coad提出来的。像其他方法一样,它致力于短时的迭代阶段和可见可用的功能。在FDD中,一个迭代周期一般是两周。
    在FDD中,编程开发人员分成两类:首席程序员和“类”程序员(class
    owner)。首席程序员是最富有经验的开发人员,他们是项目的协调者、设计者和指导者,而“类”程序员则主要做源码编写。 (6)
    ASD方法,ASD (Adaptive Software Development)方法由Jim
    Highsmith提出,其核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。

    在软件系统工具中,版本控制工具属于(29),软件评价工具属于(30)。
    (29)A.软件开发工具                    B.软件维护工具    
        C.编码与排错工具               D.软件管理和软件支持工具
    (30)A.逆向工程工具                    B.开发信息库工具
        C.编码与排错工具               D.软件管理和软件支持工具

    【答案】B D
    【解析】 软件系统工具的种类繁多,很难有统一的分类方法。通常可以按软件过程活动将软件工具分为软件开发工具、软件维护工具
    、软件管理和软件支持工具。 软件开发工具:需求分析工具、设计工具、编码与排错工具。
    软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。
    软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。

    面向对象的分析模型主要由(31)、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的(32)、完整精确的类图、针对复杂对象的状态图和描述流程化处理过程的(33)等。
    (31)A.业务活动图 B.顶层架构图 C.数据流模型 D.实体联系图
    (32)A.功能分解图 B.时序关系图 C.用例实现图 D.软件部署图
    (33)A.序列图       B.协作图       C.流程图       D.活动图

    【答案】B C D
    【解析】本题考查的是教程“4.4.2 面向对象的分析设计”的内容。
    面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成。
    设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。

    软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。软件元素包括(34)、测试用例和领域知识等。
     (34)A.项目范围定义、需求分析文档、设计文档
         B.需求分析文档、设计文档、程序代码
         C.设计文档、程序代码、界面原型
         D.程序代码、界面原型、数据表结构

    【答案】B
    【解析】本题考查的是教程“4.5软件的重用”的内容。
    软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。软件元素包括需求分析文档、设计过程、设计文档、程序代码、测试用例、领域知识等。对于新的软件开发项目而言,它们或者是构成整个目标软件系统的部件,或者在软件开发过程中发挥某种作用。通常将这些软件元素称为软部件。

    面向构件的编程(Component Oriented Programming,COP)关注于如何支持建立面向构件的解决方案。面向构件的编程所需要的基本支持包括(35)。
    (35)A.继承性、构件管理和绑定、构件标识、访问控制
        B.封装性、信息隐藏、独立部署、模块安全性
        C.多态性、模块封装性、后期绑定和装载、安全性
        D.构件抽象、可替代性、类型安全性、事务管理

    【答案】C
    【解析】 面向构件的编程(COP)关注于如何支持建立面向构件的解决方案。一个基于一般 OOP 风格的 COP
    定义如下(Szyperski,1995): “面向构件的编程需要下列基本的支持: ——多态性(可替代性);
    ——模块封装性(高层次信息的隐藏); ——后期的绑定和装载(部署独立性); ——安全性(类型和模块安全性)。”

    CORBA构件模型中,(36)的作用是在底层传输平台与接收调用并返回结果的对象实现之间进行协调,(37)是最终完成客户请求的服务对象实现。
    (36)A.伺服对象激活器               B.适配器激活器    
    C.伺服对象定位器               D.可移植对象适配器POA
    (37)A.CORBA对象                       B.分布式对象标识
    C.伺服对象Servant               D.活动对象映射表

    【答案】D C
    【解析】 POA是对象实现与ORB其它组件之间的中介,它将客户请求传送到伺服对象,按需创建子POA,提供管理伺服对象的策略。
    CORBA对象可看作是一个具有对象标识、对象接口及对象实现的抽象实体。之所以称为抽象的,是因为并没有硬性规定CORBA对象的实现机制。由于独立于程序设计语言和特定ORB产品,一个CORBA
    对象的引用又称可互操作的对象引用(Interoperable Object
    Reference)。从客户程序的角度看,IOR中包含了对象的标识、接口类型及其他信息以查找对象实现。
    伺服对象(servant)是指具体程序设计语言的对象或实体,通常存在于一个服务程序进程之中。
    客户程序通过对象引用发出的请求经过ORB担当中介角色,转换为对特定的伺服对象的调用。在一个CORBA对象的生命期中,它可能与多个伺服对象相关联,因而对该对象的请求可能被发送到不同的伺服对象。
    对象标识(Object ID)是一个用于在POA中标识一个CORBA对象的字符串。
    它既可由程序员指派,也可由对象适配器自动分配,这两种方式都要求对象标识在创建它的对象适配器中必须具有唯一性。

    关于构件的描述,正确的是(38)。
    (38)A.构件包含了一组需要同时部署的原子构件
    B.构件可以单独部署,原子构件不能被单独部署
    C.一个原子构件可以同时在多个构件家族中共享
        D.一个模块可以看作带有单独资源的原子构件

    【答案】A
    【解析】构件是一组通常需要同时部署的原子构件。构件和原子构件之间的区别在于,大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。相反,大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族。
    一个原子构件是一个模块和一组资源。
    原子构件是部署、版本控制和替换的基本单位。原子构件通常成组地部署,但是它也能够被单独部署。一个模块是不带单独资源的原子构件(在这个严格定义下,Java
    包不是模块——在 Java 中部署的原子单元是类文件。一个单独的包被编译成多个单独的类文件——每个公共类都有一个)。
    模块是一组类和可能的非面向对象的结构体,比如过程或者函数。

    面向服务系统构建过程中,(39)用于实现Web服务的远程调用,(40)用来将分散的、功能单一的Web服务组织成一个复杂的有机应用。
    (39)A.UDDI(Universal Description,Discovery and Integration)
    B.WSDL(Web Service Description Language)
    C.SOAP(Simple Object Access Protocol)
    D.BPEL(Business Process Execution Language)
    (40)A.UDDI(Universal Description,Discovery and Integration)
        B.WSDL(Web Service Description Language)
        C.SOAP(Simple Object Access Protocol)
        D.BPEL(Business Process Execution Language)

    【答案】C D
    【解析】 UDDI(Universal
    Description,Discovery&Integration),UDDI用于Web服务注册和服务查找;
    WSDL(Web Service Description Language),WSDL用于描述Web服务的接口和操作功能;
    SOAP(Simple Object Access Protocol),SOAP为建立Web服务和服务请求之间的通信提供支持。 BPEL(Business Process Execution Language For Web
    Services)翻译成中文的意思是面向Web 服务的业务流程执行语言,也有的文献简写成BPEL4WS,它是一种使用 Web
    服务定义和执行业务流程的语言。使用BPEL,用户可以通过组合、编排和协调 Web 服务自上而下地实现面向服务的体系结构(SOA)。BPEL
    提供了一种相对简单易懂的方法,可将多个 Web 服务组合到一个新的复合服务(称作业务流程)中。

    基于JavaEE平台的基础功能服务构建应用系统时,(41)可用来集成遗产系统。
    (41)A.JDBC、JCA和 Java IDL            B.JDBC、 JCA和 JMS
        C.JDBC、JMS和 Java IDL            D.JCA、 JMS和 Java IDL

    【答案】D
    【解析】 JDBC(Java Data Base
    Connectivity,java数据库连接)是一种用于执行SQL语句的Java
    API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
    JCA 标准化连接子是由 J2EE 1.3 首先提出的,它位于 J2EE
    应用服务器和企业信息系统(EIS)之间,比如数据库管理、企业资源规划(ERP)、企业资产管理(EAM)和客户关系管理(CRM)系统。不是用
    Java 开发的企业 应用或者在J2EE框架内的应用都可以通过JCA 连接。JCA 是在javax.resource
    包和它的子包(cci,spi 和 spi.security)中定义的。(JCA 的缩写形式也用于 Java cryptography API
    的缩写。) JMS 是 Java 对消息系统的访问机制,但它本身并不实现消息。JMS
    支持点对点分发的消息队列,也支持多个目标订阅的消息主题。当消息发布给一个主题的适合,消息就会发送给所有那个主题的订阅者。 JMS
    支持各种消息类型(二进制、流、名-值表、序列化的对象和文本)。通过声明与 SQL 的WHERE 相近的句段,可以建立消息的过滤器。 Java
    IDL即idltojava编译器就是一个ORB,可用来在Java语言中定义、实现和访问CORBA对象。Java
    IDL支持的是一个瞬间的CORBA对象,即在对象服务器处理过程中有效。实际上,Java
    IDL的ORB是一个类库而已,并不是一个完整的平台软件,但它对Java
    IDL应用系统和其他CORBA应用系统之间提供了很好的底层通信支持,实现了OMG定义的ORB基本功能。

    软件集成测试将已通过单元测试的模块集成在一起,主要测试模块之间的协作性。从组装策略而言,可以分为(42)。集成测试计划通常是在(43)阶段完成,集成测试一般采用黑盒测试方法。
    (42)A.批量式组装和增量式组装       B.自顶向下和自底向上组装
    C.一次性组装和增量式组装       D.整体性组装和混合式组装
    (43)A.软件方案建议    B.软件概要设计    C.软件详细设计    D.软件模块集成

    【答案】C B
    【解析】 (42)集成测试可以分为一次性组装和增量式组装,增量式组装测试效果更好。
    (43)集成测试计划一般在概要设计阶段完成。

    44)架构风格可以概括为通过连接件绑定在一起按照一组规则运作的并行构件。
    (44)A.C2            B.黑板系统          C.规则系统          D.虚拟机

    【答案】A
    【解析】 C2体系结构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:
    (1)系统中的构件和连接件都有一个顶部和一个底部;
    (2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
    (3)一个连接件可以和任意数目的其它构件和连接件连接; (4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
    这里写图片描述

    DSSA是在一个特定应用领域中为一组应用提供组织结构参考的软件体系结构,参与DSSA的人员可以划分为4种角色,包括领域专家、领域设计人员、领域实现人员和(45),其基本活动包括领域分析、领域设计和(46)。
    (45)A.领域测试人员    B.领域顾问          C.领域分析师     D.领域经理
    (46)A.领域建模      B.架构设计          C.领域实现          D.领域评估

    【答案】C C
    【解析】 (45)参与DSSA的人员可以划分为四种角色:领城专家、领城分析师、领域设计人员和领域实现人员。
    1、领域专家
    领域专家可能包括该领域中系统的有经验的用户、从事该领域中系统的需求分析、设计、实现以及项目管理的有经验的软件工程师等。领域专家的主要任务包括提供关于领域中系统的需求规约和实现的知识,帮助组织规范的、一致的领域字典,帮助选择样本系统作为领域工程的依据,复审领域模型、DSSA等领域工程产品等。
    领域专家应该熟悉该领域中系统的软件设计和实现、硬件限制、未来的用户需求及技术走向等。
    2、领域分析人员
    领域分析人员应由具有知识工程背景的有经验的系统分析员来担任。领域分析人员的主要任务包括控制整个领域分析过程,进行知识获取,将获取的知识组织到领域模型中,根据现有系统、标准规范等验证领域模型的准确性和一致性,维护领域模型。
    领域分析人员应熟悉软件重用和领域分析方法;熟悉进行知识获取和知识表示所需的技术、语言和工具;应具有一定的该领域的经验,以便于分析领域中的问题及与领域专家进行交互;应具有较高的进行抽象、关联和类比的能力;应具有较高的与他人交互和合作的能力。
    3、领域设计人员
    领域设计人员应由有经验的软件设计人员来担任。领域设计人员的主要任务包括控制核个软件设计过程,根据领域模型和现有的系统开发出DSSA,对DSSA的准确性和一致性进行验证,建立领域模型和DSSA之间的联系。
    领域设计人员应熟悉软件重用和领域设计方法;熟悉软件设计方法;应有一定的该领域的经验,以便于分析领域中的问题及与领域专家进行交互。
    4、领域实现人员
    领域实现人员应由有经验的程序设计人员来担任。领域实现人员的主要任务包括根据领域模型和DSSA,或者从头开发可重用构件,或者利用再工程的技术从现有系统中提取可重用构件,对可重用构件进行验证,建立DSSA与可重用构件间的联系。
    领域实现人员应熟悉软件重用、领域实现及软件再工程技术;熟悉程序设计;具有一定的该领域的经验。 (46)
    DSSA的基本活动包括:领域分析、领域设计、领域实现。 1、领域分析
    这个阶段的主要目标是获得领城模型。领域模型描述领域中系统之间的共同的需求,即领域模型所描述的需求为领域需求。在这个阶段中首先要进行一些准备性的活动,包括定义领域的边界。从而明确分析的对象;识别信息源,整个领域工程过程中信息的来源,可能的信息源包括现存系统、技术文献、问题域和系统开发的专家、用户调查和市场分析、领域演化的历史记录等,在此基础上就可以分析领域中系统的需求,确定哪些需求是领域中的系统广泛共享的,从而建立领域模型。当领域中存在大量系统时,需要选择它们的一个子集作为样本系统。对样本系统需求的考察将显示领城需求的一个变化范围。一些需求对所有被考察的系统是共同的,一些需求是单个系统所独有的。很多需求位于这两个极端之间,即被部分系统共享。
    2、领域设计
    这个阶段的目标是获得DSSA。DSSA描述在领域模型中表示的需求的解决方案,它不是单个系统的表示,而是能够适应领域中多个系统的需求的一个高层次的设计。建立了领域模型之后,就可以派生出满足这些被建模的领域需求的DSSA,由于领域模型中的领域需求具有一定的变化性,DSSA也要相应地具有变化性。它可以通过表示多选一的(alternative)、可选的(optional)解决方案等来做到这一点。模型和DSSA来组织的,因此在这个阶段通过获得DSSA,也就同时形成了重用基础设施的规约。
    3、领域实现
    这个阶段的主要目标是依据领域模型和DSSA开发和组织可重用信息。这些可重用信息可能是从现有系统中提取得到,也可能需要通过新的开发得到。它们依据领域模型和DSSA进行组织,也就是领域模型和DSSA定义了这些可重用信息的重用时机,从而支持了系统化的软件重用。这个阶段也可以看作重用基础设施的实现阶段。
    值得注意的是,以上过程是一个反复的、逐渐求精的过程。在实施领域工程的每个阶段中,都可能返回到以前的步骤,对以前的步骤得到的结果进行修改和完善,再回到当前步骤,在新的基础上进行本阶段的活动。

    47)不属于可修改性考虑的内容。
    (47)A.可维护性      B.可扩展性          C.结构重构          D.可变性

    【答案】D
    【解析】 可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。可修改性包含四个方面。
    (1)可维护性(maintainability)。这主要体现在问题的修复上:在错误发生后“修复”软件系统。为可维护性做好准备的软件体系结构往往能做局部性的修改并能使对其他构件的负面影响最小化。
    (2)可扩展性(extendibility)。这一点关注的是使用新特性来扩展软件系统,以及使用改进版本来替换构件并删除不需要或不必要的特性和构件。为了实现可扩展性,软件系统需要松散耦合的构件。其目标是实现一种体系结构,它能使开发人员在不影响构件客户的情况下替换构件。支持把新构件集成到现有的体系结构中也是必要的。
    (3)结构重组(reassemble)。这一点处理的是重新组织软件系统的构件及构件间的关系,例如通过将构件移动到一个不同的子系统而改变它的位置。为了支持结构重组,软件系统需要精心设计构件之间的关系。理想情况下,它们允许开发人员在不影响实现的主体部分的情况下灵活地配置构件。
    (4)可移植性(portability)。可移植性使软件系统适用于多种硬件平台、用户界面、操作系统、编程语言或编译器。为了实现可移植,需要按照硬件无关的方式组织软件系统,其他软件系统和环境被提取出。可移植性是系统能够在不同计算环境下运行的能力。这些环境可能是硬件、软件,也可能是两者的结合。在关于某个特定计算环境的所有假设都集中在一个构件中时,系统是可移植的。如果移植到新的系统需要做些更改,则可移植性就是一种特殊的可修改性。

    某公司拟为某种新型可编程机器人开发相应的编译器。该编译过程包括词法分析、语法分析、语义分析和代码生成四个阶段,每个阶段产生的结果作为下一个阶段的输入,且需独立存储。针对上述描述,该集成开发环境应采用(48)架构风格最为合适。
    (48)A.管道-过滤器    B.数据仓储          C.主程序-子程序       D.解释器

    【答案】A
    【解析】 “每个阶段产生的结果作为下一个阶段的输入”是典型的数据流架构风格的特点,选项中仅有管道-过滤器属于这种风格。

    软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。一个体系结构定义了一个词汇表和一组(49)。架构风格反映领域中众多系统所共有的结构和(50)。
    (49)A.约束            B.连接件           C.拓扑结构          D.规则
    (50)A.语义特征      B.功能需求          C.质量属性          D.业务规则

    【答案】A A
    【解析】软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
    体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件体系结构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。例如,如果某人把系统描述为“客户/服务器”模式,则不必给出设计细节,立刻就会明白系统是如何组织和工作的。

    某公司拟开发一个扫地机器人。机器人的控制者首先定义清洁流程和流程中任务之间的关系,机器人接受任务后,需要响应外界环境中触发的一些突发事件,根据自身状态进行动态调整,最终自动完成任务。针对上述需求,该机器人应该采用(51)架构风格最为合适。
    (51)A.面向对象      B.主程序-子程序       C.规则系统          D.管道-过滤器

    【答案】C
    【解析】在本题所述的应用环境中,强调了自定义流程,然后按自定义流程来执行,这属于虚拟机风格的特征,备选答案中,仅有C选项属于虚拟机风格。

    某企业内部现有的主要业务功能已封装成为Web服务。为了拓展业务范围,需要将现有的业务功能进行多种组合,形成新的业务功能。针对业务灵活组合这一要求,采用(52)架构风格最为合适。
    (52)A.规则系统      B.面向对象          C.黑板            D.解释器

    【答案】D
    【解析】 依据题目要求,需要灵活组合业务,形成新的业务功能,这样虚拟机风格较为合适。但备选答案中A与D均属于虚拟机风格。

    某公司拟开发一个语音搜索系统,其语音搜索系统的主要工作过程包括分割原始语音信号、识别音素、产生候选词、判定语法片断、提供搜索关键词等,每个过程都需要进行基于先验知识的条件判断并进行相应的识别动作。针对该系统的特点,采用(53)架构风格最为合适。
    (53)A.分层系统      B.面向对象          C.黑板            D.隐式调用

    【答案】C
    【解析】 语音识别是黑板风格的经典应用。

    设计模式基于面向对象技术,是人们在长期的开发实践中良好经验的结晶,提供了一个简单、统一的描述方法,使得人们可以复用这些软件设计办法、过程管理经验。按照设计模式的目的进行划分,现有的设计模式可以分为创建型、(54)和行为型三种类型。其中(55)属于创建型模式,(56)属于行为型模式。(57)模式可以将一个复杂的组件分成功能性抽象和内部实现两个独立的但又相关的继承层次结构,从而可以实现接口与实现分离。
    (54)A.合成型           B.组合型           C.结构型           D.聚合型
    (55)A.Adaptor           B.Facade            C.Command           D.Singleton
    (56)A.Decorator         B.Composite         C.Memento           D.Builder
    (57)A.Prototype         B.Flyweight         C.Adapter           D.Bridge

    【答案】C D C D
    【解析】 (54)设计模式包括:创建型、结构型、行为型三大类别。 (55)
    Singleton是单例模式,属于创建型设计模式。 (56) Memento是备忘录模式,属于行为型设计模式。 (57)
    Bridge是桥接模式,它的特点是实现接口与实现分离。

    某公司欲开发一个智能机器人系统,在架构设计阶段,公司的架构师识别出3个核心质量属性场景。其中“机器人系统主电源断电后,能够在10秒内自动启动备用电源并进行切换,恢复正常运行”主要与(58)质量属性相关,通常可采用(59)架构策略实现该属性;“机器人在正常运动过程中如果发现前方2米内有人或者障碍物,应在1秒内停止并在2秒内选择一条新的运行路径”主要与(60)质量属性相关,通常可采用(61)架构策略实现该属性;“对机器人的远程控制命令应该进行加密,从而能够抵挡恶意的入侵破坏行为,并对攻击进行报警和记录”主要与(62)质量属性相关,通常可采用(63)架构策略实现该属性。
    (58)A.可用性           B.性能                C.易用性       D.可修改性
    (59)A.抽象接口          B.信息隐藏          C.主动冗余      D.记录/回放
    (60)A.可测试性          B.易用性           C.互操作性      D.性能
    (61)A.资源调度          B.操作串行化     C.心跳            D.内置监控器
    (62)A.可用性           B.安全性           C.可测试性      D.可修改性
    (63)A.内置监控器     B.追踪审计          C.记录/回放     D.维护现有接口

    【答案】A C D A B B
    【解析】(58、59、60、61)“机器人系统主电源断电后,能够在10秒内自动启动备用电源并进行切换,恢复正常运行”属于可用性,因为场景描述的是故障恢复问题。主动冗余是可用性的常见策略。
    (62、63)“对机器人的远程控制命令应该进行加密,从而能够抵挡恶意的入侵破坏行为,并对攻击进行报警和记录”属于安全性,常见的策略是追踪审计。

    DES加密算法的密钥长度为56位,三重DES的密钥长度为(64)位。
    (64)A.168               B.128               C.112           D.56

    【答案】C
    【解析】 DES加密算法的密钥长度为56位,三重DES要用到2个DES的密钥,所以长度为112位。

    下列攻击方式中,流量分析属于(65)方式。
     (65)A.被动攻击         B.主动攻击          C.物理攻击      D.分发攻击

    【答案】A
    【解析】 在被动攻击(passive
    attack)中,攻击者的目的只是获取信息,这就意味着攻击者不会篡改信息或危害系统。系统可以不中断其正常运行。常见的被动攻击包括:窃听和流量分析。
    主动攻击(active
    attack)可能改变信息或危害系统。威胁信息完整性和有效性的攻击就是主动攻击。主动攻击通常易于探测但却难于防范,因为攻击者可以通过多种方法发起攻击。常见的主动攻击包括:篡改、伪装、重放、拒绝服务攻击。

    软件著作权保护的对象不包括(66)。
    (66)A.源程序           B.目标程序          C.用户手册          D.处理过程

    【答案】D
    【解析】 软件著作权中规定:开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。

    M公司购买了N画家创作的一幅美术作品原件。M公司未经N画家的许可,擅自将这幅美术作品作为商标注册,并大量复制用于该公司的产品上。M公司的行为侵犯了N画家的(67)。
    (67)A.著作权           B.发表权           C.商标权           D.展览权

    【答案】A
    【解析】著作权法规定:美术作品的著作权不随原作品所有权的转变而发生变化。所以M公司购买N画家的美术作品,著作权不归M公司,而归N画家。M公司将美术作品注册为商标,是侵犯了N画家著作权的。

    M软件公司的软件产品注册商标为N,为确保公司在市场竞争中占据优势,对员工进行了保密约束。此情形下,(68)的说法是错误的。
    (68)A.公司享有商业秘密权             B.公司享有软件著作权
    C.公司享有专利权                   D.公司享有商标权

    【答案】C
    【解析】 在题目的描述中,未体现出有申请专利的行为,所以不享有专利权

    某公司有4百万元资金用于甲、乙、丙三厂追加投资。各厂获得不同投资款后的效益见下表。适当分配投资(以百万元为单位)可以获得的最大的总效益为(69)百万元。
    这里写图片描述
    (69)A.15.1 B.15.6 C.16.4 D.16.9

    【答案】C
    【解析】
    这里写图片描述

    以下关于数学建模的叙述中,不正确的是(70)。
    (70)A.数学模型是对现实世界的一种简化的抽象描述
    B.数学建模时需要在简单性和准确性之间求得平衡
    C.数学模型应该用统一的、普适的标准对其进行评价
    D.数学建模需要从失败和用户的反馈中学习和改进

    【答案】D
    【解析】数学建模是利用数学方法解决实际问题的一种实践。即通过抽象、简化、假设、引进变量等处理过程后,将实际问题用数学方式表达,建立起数学模型,然后运用先进的数学方法及计算机技术进行求解。
    这是A和B的原因,数学模型是对于现实世界的一个特定对象,一个特定目的,根据特有的内在规律,做出一些必要的假设,运用适当的数学工具,得到一个数学结构。数学建模应该有一个统一的评价机制。至于D,数学建模并没有反馈机制。

    The objective of71is to determine what parts of the application software will be assigned to what hardware. The major software components of the system being developed have to be identified and then allocated to the various hardware components on which the system will operate. All software systems can be divided into four basic functions. The first is72).Most information systems require data to be stored and retrieved, whether a small file,such as a memo produced by a word processor, or a large database, such as one that stores an organization’s accounting records.The second function is the73),the processing required to access data, which often means database queries in Structured Query Language. The third function is the74),which is the logic documented in the DFDs, use cases,and functional requirements.The fourth function is the presentation logic,the display of information to the user and the acceptance of the user’s commands.The three primary hardware components of a system are (75).
    (71)A.architecture design           B.modular design
    C.physical design               D.distribution design
    (72)A.data access components        B.database management system
    C.data storage                  D.data entities
    (73)A.data persistence              B.data access objects
        C.database connection           D.data access logic
    (74)A.system requirements           B.system architecture
    C.application logic             D.application program
    (75)A.computers,cables and network  B.clients,servers,and network
    C.CPUs,memories and I/O devices D.CPUs,hard disks and I/O devices

    【答案】A C D C B
    【解析】架构设计的目标是确定应用软件的哪些部分将分配到何种硬件。识别出正在开发系统的主要软件构件并分配到系统将要运行的硬件构件。所有软件系统可分为四项基本功能。第一项是数据存储。大多数信息系统需要数据进行存储并检索,不论是一个小文件,比如一个字处理器产生的一个备忘录,还是一个大型数据库,比如存储一个企业会计记录的数据库。第二项功能是数据访问逻辑,处理过程需要访问数据,这通常是指用SQL进行数据库查询。第三项功能是应用程序逻辑,这些逻辑通过数据流图,用例和功能需求来记录。第四项功能是表示逻辑,给用户显示信息并接收用户命令。一个系统的三类主要硬件构件是客户机、服务器和网络。

    考试科目二:案例分析

    试题一

    阅读以下关于软件架构设计的叙述,在答题纸上回答问题1至问题3 。
    【说明】
    某软件公司为某品牌手机厂商开发一套手机应用程序集成开发环境,以提高开发手机应用程序的质量和效率。在项目之初,公司的系统分析师对该集成开发环境的需求进行了调研和分析,具体描述如下:
    a.需要同时支持该厂商自行定义的应用编程语言的编辑、界面可视化设计、编译、调试等模块,这些模块产生的模型或数据格式差异较大,集成环境应提供数据集成能力。集成开发环境还要支持以适配方式集成公司现有的应用模拟器工具。
    b.经过调研,手机应用开发人员更倾向于使用Windows系统,因此集成开发环境的界面需要与Windows平台上的主流开发工具的界面风格保持一致。
    c.支持相关开发数据在云端存储,需要保证在云端存储数据的机密性和完整性。
    d.支持用户通过配置界面依据自己的喜好修改界面风格,包括颜色、布局、代码高亮方式等,配置完成后无需重启环境。
    e.支持不同模型的自动转换。在初始需求中定义的机器性能条件下,对于一个包含50个对象的设计模型,将其转换为相应代码框架时所消耗时间不超过5秒。
    f.能够连续运行的时间不小于240小时,意外退出后能够在10秒之内自动重启。
    g.集成开发环境具有模块化结构,支持以模块为单位进行调试、测试与发布。
    h.支持应用开发过程中的代码调试功能:开发人员可以设置断点,启动调试,编辑器可以自动卷屏并命中断点,能通过变量监视器查看当前变量取值。
    在对需求进行分析后,公司的架构师小张查阅了相关的资料,认为该集成开发环境应该采用管道一过滤器(Pipe-Filter)的架构风格,公司的资深架构师王工在仔细分析后,认为应该采用数据仓储(Data Repository)的架构风格。公司经过评审,最终采用了王工的方案。

    【问题1】(10分) 识别软件架构质量属性是进行架构设计的重要步骤。请分析题干中的需求描述,填写表1-1中(1)~(5)处的空白。
    这里写图片描述
    (1)f (2)性能 (3)g (4)h (5)b 【问题2】(7分)
    请在阅读题干需求描述的基础上,从交互方式、数据结构、控制结构和扩展方法4个方面对两种架构风格进行比较,填写表1-2中(1)~(4)处的空白。
    这里写图片描述
    (1)星型 (2)数据流 (3)数据流驱动 (4)模型适配 【问题3】(8分)
    在确定采用数据仓库架构风格后,王工给出了集成开发环境的架构图。请填写图1-1中(1)~(4)处的空白,完成该集成开发环境的架构图。
    这里写图片描述
    (1)语法结构树 (2)编辑器 (3)适配器 (4)应用模拟器工具

    试题二

    阅读以下关于软件系统建模的叙述,在答题纸上回答问题1至问题3。
    【说明】
    某软件公司计划开发一套教学管理系统,用于为高校提供教学管理服务。该教学管理系统基本的需求包括:
    (1)系统用户必须成功登录到系统后才能使用系统的各项功能服务;
    (2)管理员(Registrar)使用该系统管理学校(University)、系(Department)、教师(Lecturer)、学生(Student)和课程(Course)等教学基础信息;
    (3)学生使用系统选择并注册课程,必须通过所选课程的考试才能获得学分;如果考试不及格,必须参加补考,通过后才能获得课程学分;
    (4)教师使用该系统选择所要教的课程,并从系统获得选择该课程的学生名单;
    (5)管理员使用系统生成课程课表,维护系统所需的有关课程、学生和教师的信息;
    (6)每个月到了月底系统会通过打印机打印学生的考勤信息。
    项目组经过分析和讨论,决定采用面向对象开发技术对系统各项需求建模。

    【问题1】(7分) 用例建模用来描述待开发系统的功能需求,主要元素是用例和参与者。请根据题目所述需求,说明教学服务系统中有哪些参与者。
    【参考答案】 学生、教师、管理员、时间、打印机。

    【试题解析】
    参与者是指系统以外的,需要使用系统或与系统交互的事物,包括:人或组织、设备、外部系统等。在本题中,较为容易识别的参与者包括:学生、教师、管理员,比较隐晦的参与者包括:时间、打印机。
    【问题2】(7分)
    用例是对系统行为的动态描述,用例获取是需求分析阶段的主要任务之一。请指出在面向对象系统建模中,用例之间的关系有哪几种类型?对题目所述教学服务系统的需求建模时,
    “登录系统”用例与“注册课程”用例之间、“参加考试”用例与“参加补考”用例之间的关系分别属于哪种类型?
    用例之间的关系包括:包含、扩展、泛化。 “登录系统”用例与“注册课程”用例之间的关系为:包含关系。
    “参加考试”用例与“参加补考”用例之间的关系为:扩展关系。 【问题3】(11分)
    类图主要用来描述系统的静态结构,是组件图和配置图的基础。请指出在面向对象系统建模中,类之间的关系有哪几种类型?对题目所述教学服务系统的需求建模时,类University与类Student之间、类University和类Department之间、类Student和类Course之间的关系分别属于哪种类型?
    【参考答案】 类之间的关系包括:关联、聚合、组合、依赖、泛化、实现(可写可不写,因为实现是接口与类之间的关系,而接口是一种特殊的类)。
    类University与类Student之间的关系是:聚合关系。 类University与类Department之间的关系是:组合关系。
    类Student与类Course之间的关系是:关联关系。

    【试题解析】 依赖关系:一个事物发生变化影响另一个事物。 泛化关系:特殊/一般关系。 关联关系:描述了一组链,链是对象之间的连接。
    聚合关系:整体与部分生命周期不同。 组合关系:整体与部分生命周期相同。 实现关系:接口与类之间的关系。

    试题三

    阅读以下关于嵌入式实时系统设计的描述,回答问题1至问题3。
    【说明】
    嵌入式系统是当前航空、航天、船舶及工业、医疗等领域的核心技术,嵌入式系统可包括实时系统与非实时系统两种。某宇航公司长期从事航空航天飞行器电子设备的研制工作,随着业务的扩大,需要大量大学毕业生补充到科研生产部门。按照公司规定,大学毕业生必须进行相关基础知识培训,为此,公司经理安排王工对他们进行了长达一个月的培训。

    【问题1】(7分)
    王工在培训中指出:嵌入式系统主要负责对设备的各种传感器进行管理与控制。而航空航天飞行器的电子设备由于对时间具有很强的敏感性,通常由嵌入式实时系统进行管控,请用300字以内文字说明什么是实时系统,实时系统有哪些主要特性。
    【参考答案】 实时系统是指向系统发出一指令后,在一个极短的时间内,系统回复结果。 实时系统的特性: (1)时间约束性(及时性)
    (2)可预测性 (3)高可靠性 (4)与外部环境的交互作用性 (5)多任务类型 (6)约束的复杂性 (7)具有短暂超载的特点

    【试题解析】 实时系统的特性包括: 一、时间约束性
    实时系统的任务具有一定的时间约束(截止时间)。根据截止时间,实时系统的实时性分为“硬实时”和“软实时”。硬实时是指应用的时间需求能够得到完全满足,否则就造成重大安全事故,甚至造成重大的生命财产损失和生态破坏,如在航空航天、军事、核工业等一些关键领域中的应用。软实时是指某些应用虽然提出时间需求,但实时任务偶尔违反这种需求对系统运行及环境不会造成严重影响,如监控系统等和信息采集系统等。
    二、可预测性
    可预测性是指系统能够对实时任务的执行时间进行判断,确定是否能够满足任务的时限要求。由于实时系统对时间约束要求的严格性,使可预测性称为实时系统的一项重要性能要求。除了要求硬件延迟的可预测性以外,还要求软件系统的可预测性,包括
    应用程序的
    响应时间是可预测的,即在有限的时间内完成必须的工作;以及操作系统的可预测性,即实时原语、调度函数等运行开销应是有界的,以保证应用程序执行时间的有界性。
    三、可靠性 大多数实时系统要求有较高的
    可靠性。在一些重要的实时应用中,任何不可靠因素和计算机的一个微小故障,或某些特定强实时任务(又叫关键任务)超过时限,都可能引起难以预测的严重后果。为此,系统需要采用
    静态分析和保留资源的方法及冗余配置,使系统在最坏情况下都能正常工作或避免损失。可靠性已成为衡量实时系统性能不可缺少的重要指标。
    四、与外部环境的交互作用性 实时系统通常运行在一定的环境下,外部环境是实时系统不可缺少的一个组成部分。计算机子系统一般是
    控制系统,它必须在规定的时间内对外部请求做出反应。外部物理环境往往是被控子系统,两者互相作用构成完整的实时系统。大多数控制子系统必须连续运转以保证子系统的正常工作或准备对任何异常行为采取行动。
    五、多任务类型 在实时系统中,不但包括 周期任务、偶发任务、非周期任务,还包括非实时任务。实时任务要求要满足时限,而非实时任务要求要使其
    响应时间尽可能的短。多种类型任务的混合,使系统的可调度性分析更加困难。 六、约束的复杂性 任务的约束包括时间约束、资源约束、执行顺序约束和
    性能约束。时间约束是任何实时系统都固有的约束。资源约束是指多个实时任务共享有限的资源时,必须按照一定的资源访问控制协议进行同步,以避免死锁和高优先级任务被低优先级任务堵塞的时间(即优先级倒置时间)不可预测。执行顺序约束是指各任务的启动和执行必须满足一定的时间和顺序约束。例如,在分布式端到端(end-to-end)实时系统很重,同一任务的各子任务之间存在前驱/后驱约束关系,需要执行同步协议来管理子任务的启动和控制子任务的执行,使它们满足时间约束和系统可调度要求。性能约束是指必须满足如
    可靠性、可用性、可预测性、服务质量(Quality of Service,QoS)等性能指标。 七、具有短暂超载的特点
    在实时系统中,即使一个功能设计合理、资源充足的系统也可能由于以下原因超载:
    1)系统元件出现老化,外围设备错误或系统发生故障。随着系统运行时间的增长,系统元件出现老化,系统部件可能发生故障,导致系统可用资源降低,不能满足实时任务的时间约束要求。
    2)环境的动态变化。由于不能对未来的环境、系统状态进行正确有效地预测,因此不能从整体角度上对任务进行调度,可能导致系统超载。
    3)应用规模的扩大。原先满足实时任务时限要求的系统,随着应用规模的增大,可能出现不能满足任务时限要求的情况,而重新设计、重建系统在时间和经济上又不允许。
    【问题2】(8分)
    实时系统根据应用场景、时间特征以及工作方式的不同,存在多种实时特性,大致有三种分类方法,即时间类别、时间需求和工作方式结构。根据自己所掌握的“实时性”知识,将图3-1给出的实时特性按三种分类方式,填写图3-1中(1)~(8)处空白。
    备选答案:时限的危害程度;时间角色;弱;时间响应;固定;时限/反应时间;时间明确;输入/输出激励;时间触发;强;周期/零星/非周期;事件触发。
    这里写图片描述
    (1)强 (2)(3)时间响应、时间明确 (4)(5)(6)时限/反应时间、输入/输出激励、周期/零星/非周期
    (7)(8)时间触发、事件触发
    【问题3】(10分)
    可靠性是实时系统的关键特性之一,区分软件的错误(Error)、缺陷(Defect)、故障(Fault)和失效(Failure)概念是软件可靠性设计工作的基础。请简要说明错误、缺陷、故障和失效的定义;并在图3-2中标出错误、缺陷和失效出现阶段,说明缺陷、故障和失效的表现形式,填写图3-2中(1)~(6)处的空白。

    这里写图片描述
    【参考答案】 软件错误:软件错误是指在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。
    软件缺陷:软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。
    软件故障:软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态。 软件失效:软件失效是指软件运行时产生
    的一种不希望或不可接受的外部行为结果。 (1)一个错误导致一个或多个缺陷 (2)缺陷激活时产生故障 (3)故障未处理好
    (4)软件生存期各个阶段 (5)软件生存期各个阶段 (6)在运行时

    【试题解析】
    软件失效的机理可描述为:软件错误→软件缺陷→软件故障→软件失效。
    1、软件错误:在可以预见的时期内,软件仍将由人来开发。在整个软件生存期的各个阶段,都贯穿者人的直接或间接的干预。然而,人难免犯错误,这必然给软件留下不良的痕迹。软件错误是指在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。可见,软件错误是一种人为过程,相对于软件本身,是一种外部行为。
    2、软件缺陷:软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差,如少一个逗号、多一语句等。其结果是软件运行于某一特定条件时出现软件故障,这时称软件缺陷被激活。
    3、软件故障:软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态。譬如,软件处于执行一个多余循环过程时,我们说软件出现故障。此时若无时当的措施(容错)加以及时处理,便产生软件失效。显然,软件故障是一种动态行为。
    4、软件失效:软件失效是指软件运行时产生 的一种不希望或不可接受的外部行为结果。

    试题四

    阅读以下关于应用服务器的叙述,在答题纸上回答问题1至问题3。
    【说明】
    某电子产品制造公司,几年前开发建设了企业网站系统,实现了企业宣传、产品介绍、客服以及售后服务等基本功能。该网站技术上采用了Web服务器、动态脚本语言PHP。随着市场销售渠道变化以及企业业务的急剧拓展,该公司急需建立完善的电子商务平台。
    公司张工建议对原有网站系统进行扩展,增加新的功能(包括订单系统、支付系统、库存管理等),这样有利于降低成本、快速上线;而王工则认为原有网站系统在技术上存在先天不足,不能满足企业业务的快速发展,尤其是企业业务将服务全球,需要提供24小时不间断服务,系统在大负荷和长时间运行下的稳定性至关重要。建议采用应用服务器的Web开发方法,例如J2EE,为该企业重新开发新的电子商务平台。

    【问题1】(7分)
    王工认为原有网站在技术上存在先天不足,不能满足企业业务的快速发展,根据你的理解,请用300字以内的文字说明原系统存在哪几个方面的不足。
    1、PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。
    2、PHP是面向过程的语言,Java是面向对象的,面向过程语言开发的程序只要业务流程发生变化,修改工作量很大,所以可修改性差,同时可复用性也差。
    3、PHP语言在可靠性方面比J2EE平台差,J2EE平台有大量增强可靠性的成熟解决方案,而PHP只是一种简单的脚本语言,在可靠性方面缺乏成熟解决方案。
    4、PHP对于不同的数据库采用不同的数据库访问接口,而Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库,访问数据库的接口比较统一。所以原架构在数据库连接方面修改起来工作量也是很大的。
    5、PHP适合于小型项目,所以本项目中以前采用PHP是合适的,但目前大量功能需要增加,PHP在稳定性方面也达不到要求。
    6、PHP比Java的可维护性差。 7、PHP比Java的扩展性差。 8、PHP比Java的安全性差。 【问题2】(8分)
    请简要说明应用服务器的概念,并重点说明应用服务器如何来保障系统在大负荷和长时间运行下的稳定性以及可扩展性。 【参考答案】
    应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。 1、若系统负荷很大,可以布署多台应用服务,多台应用服务器分担任务,以达到性能要求。
    2、应用服务器可以通过灵活的增加服务器完成扩展,所以可扩展性很好。
    3、应用服务器可长时间稳定运行。因为当一台应用服务器出现故障时,可以将当前运行的事务转移至正常应用服务器上完成执行,不影响业务正常执行,从而保障高可靠性与稳定性。

    【试题解析】
    应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。
    简单的说能实现动态网页技术的服务器叫做web应用服务器。
    【问题3】(10分)
    J2EE平台采用了多层分布式应用程序模型,实现不同逻辑功能的应用程序被封装到不同的构件中,处于不同层次的构件可被分别部署到不同的机器中。请填写图4-1中(1)~(5)处的空白,完成J2EE的N层体系结构。
    这里写图片描述
    (1)Applet ; (2)Servlet ;(3)EJB容器 ;(4)SessionBean ; (5)EntityBean
    这里写图片描述

    试题五

    阅读以下关于Scrum敏捷开发过程的叙述,在答题纸上回答问题1至问题3。
    【说明】
    Scrum是一个增量的、迭代的敏捷软件开发过程。某软件公司计划开发一个基于Web的Scrum项目管理系统,用于支持项目团队采用Scrum敏捷开发方法进行软件开发,辅助主管智能决策。此项目管理系统提供的主要服务包括项目团队的管理、敏捷开发过程管理和工件的管理。
    Scrum敏捷开发中,项目团队由Scrum主管、产品负责人和开发团队人员三种不同的角色组成,其开发过程由若干个Sprint(短的迭代周期,通常为24周)活动组成。
    Product Backlog是在Scrum过程初期产生的一个按照商业价值排序的需求列表,该列表条目的体现形式通常为用户故事。在每一个Sprint活动中,项目团队从Product Backlog中挑选最高优先级的用户故事进行开发。被挑选的用户故事在Sprint计划会议上经过细化分解为任务,同时初步估算每一个任务的预计完成时间,编写Sprint Backlog。
    在Sprint活动期间,项目团队每天早晨需举行每日站立会议,重新估算剩余任务的预计完成时间,更新Sprint Backlog、Sprint燃尽图和Release燃尽图。在每个Sprint活动结束时,项目团队召开评审会议和回顾会议,交付产品增量,总结Sprint期间的工作情况和问题。此时,如果Product Backlog中还有未完成的用户故事,则项目团队将开始筹备下一个Sprint活动迭代。
    为完成Scrum项目管理系统,考虑到系统的智能决策需求,公司决定使用MVC架构模式开发该项目管理系统。具体来说,系统采用轻量级J2EE架构和SSH框架进行开发,使用MySQL数据库作为底层存储。

    【问题1】(10分)
    Scrum项目管理软件需真实模拟Scrum敏捷开发流程,请根据你的理解完成图5-1给出的Scrum敏捷开发状态图,填写其中(1)~(5)的内容。
    这里写图片描述
    (1)Product Backlog (2)Sprint计划会议 (3)每日站立会议 (4)还有未完成的用户故事 (5)交付产品增量
    【问题2】(6分)
    根据题干描述,本系统采用MVC架构模式,请从各选答案a~n中分别选出属于MVC架构模型中的模型(Model)、视图(View)和控制器(Controler)的相关内容描述填入表5-1的空(1)~(3)处。
    这里写图片描述
    (1)c、e、n (2)a、f、j (3)g

    【问题3】(9分) 根据项目组给出的系统设计方案,将备选答案a~l的内容填写在图5-2中的空(1)~(9),完成系统架构图。
    这里写图片描述

    (1) (2)d f (3)h (4)g (5)a (6)k (7)h (8)b (9)c

    考试科目三:论文

    试题一 论软件系统架构评估

    对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,在系统被构建之前分析现有系统架构对于系统质量的影响,提出系统架构的改进方案。架构评估是软件开发过程中的重要环节。
    
    请围绕“论软件系统架构评估”论题,依次从以下三个方面进行论述。
    1.概要叙述你所参与架构评估的软件系统,以及在评估过程中所担任的主要工作。
    2.分析软件系统架构评估中所普遍关注的质量属性有哪些?详细阐述每种质量属性的具体含义。
    3.详细说明你所参与的软件系统架构评估中,采用了哪种评估方法,具体实施过程和效果如何。

    一、首先用400-600字的篇幅简要叙述作者参与开发的软件系统的概要和所担任的工作。
    二、架构所关注的质量属性主要包括:性能、可用性、可修改性、安全性。 1、性能
    性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。
    2、可用性
    可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
    3、安全性
    安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可划分为机密性、完整性、不可否认性及可控性等特性。
    4、可修改性
    可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。
    三、架构评估方法主要从SAAM与ATAM中选择。 1、SAAM评估方法
    SAAM的分析和评估目的、评估参与者、评估活动或过程以及评估结果说明如下。 (1)评估目的 SAAM (Scenario-based
    Architecture Analysis Method)目的是验证基本的体系结构假设和原则,评估体系结构固有的风险。SAAM
    指导对体系结构的检查,使其主要关注潜在的问题点,如需求冲突。SAAM不仅能够评估体系结构对于特定系统需求的使用能力,也能被用来比较不同的体系结构。
    (2)评估参与者 风险承担者、记录人员、软件体系结构设计师 (3)评估活动或过程
    SAAM分析评估体系结构的过程包括六个步骤,即形成场景、描述体系结构、场景的分类和优先级确定、间接场景的单个评估、场景相互作用的评估、总体评估。
    (4)评估结果 SAAM评估的主要有形输出包括:
    1)把代表了未来可能做的更改的场景与构架对应起来,显现出构架中未来可能会表现出较高复杂性的地方,并对每个这样的更改的预期工作量做出评估。
    2)理解系统的功能,对多个构架所支持的功能和数量进行比较。
    如果所评估的是一个框架,SAAM评估将指明框架中未能满足其修改性需求的地方,有时还会指出一种效果更好的设计。SAAM评估也能对两个或者三个备选构架进行比较,明确其中那一个能够较好地满足质量属性需求,而且做的更改较少、不会在未来导致太多的复杂的问题。
    2、ATAM评估方法 ATAM的分析和评估目的、评估参与者、评估活动或过程以及评估结果说明如下。 (1)评估目的
    ATAM(Architecture Tradeoff Analysis Method
    ),即构架权衡分析方法的评估目的是依据系统质量属性和商业需求评估设计决策的结果。ATAM希望揭示出构架满足特定质量目标的情况,使我们更清楚地认识到质量目标之间的联系,即如何权衡多个质量目标。
    (2)评估参与者
    1)评估小组。该小组是所评估构架项目外部的小组,通常由3~5人组成。该小组的每个成员都要扮演大量的特定角色。他们可能是开发组织内部的,也可能是外部的。
    2)项目决策者,对开发项目具有发言权,并有权要求进行某些改变,他们包括项目管理人员,重要的客户代表,构架设计师等。
    3)构架涉众(stakeholders)。包括关键模块开发人员、测试人员、用户等。 (3)评估活动或过程
    整个ATAM评估过程包括九个步骤,按其编号顺序分别是描述ATAM方法、描述商业动机、描述体系结构、确定体系结构方法、生成质量属性效用树、分析体系结构方法、讨论和分级场景、描述评估结果。

    试题二 论软件设计模式及其应用。

    软件设计模式(Software Design Pattern)是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式是为了重用代码以提高编码效率、增加代码的可理解性、保证代码的可靠性。软件设计模式是软件开发中的最佳实践之一,它经常被软件开发人员在面向对象软件开发过程中所采用。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在实际应用中都有相应的原型与之相对,每种模式都描述了一个在软件开发中不断重复发生的问题,以及对应该原型问题的核心解决方案。
    
    请围绕“论软件设计模式及其应用”论题,依次从以下三个方面进行论述。
    1.概要叙述你参与分析和开发的软件系统,以及你在项目中所担任的主要工作。
    2.说明常用的软件设计模式有哪几类?阐述每种类型特点及其所包含的设计模式。
    3.详细说明你所参与的软件系统开发项目中,采用了哪些软件设计模式,具体实施效果如何。

    一、首先用400-600字的篇幅简要叙述作者参与开发的软件系统的概要和所担任的工作。 二、设计模式的基本分类: ·
    创建型模式。创建型模式抽象了实例化过程,它们帮助一个系统独立于创建、组合和表示它的那些对象。创建型模式包括工厂方法、抽象工厂、生成器、原型、单例模式等。
    · 结构型模式。结构型模式涉及到如何组合类和对象以获得更大的结构。结构型模式包括适配器、桥接、组成、装饰、外观、享元、代理等。 ·
    行为模式。行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述了它们之间的通信模式。常用的行为模式有观察者、策略等。
    三、你在项目中运用了何种设计模式以及如何用此模式进行分析与设计。要紧密结合主题项目,选择1-2种设计模式进行讨论就可以了。

    试题三 论数据访问层设计技术及其应用。

    在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模型是将信息系统分为表现层、业务逻辑层和数据访问层。信息系统一般以数据为中心,数据访问层的设计是系统设计中的重要内容。数据访问层需要针对需求,提供对数据源读写的访问接口;在保障性能的前提下,数据访问层应具有良好的封装性、可移植性,以及数据库无关性。
    
    请围绕“论数据访问层设计技术及其应用”论题,依次从以下三个方面进行论述。
    1.概要叙述你参与管理和开发的与数据访问层设计有关的软件项目,以及你在其中所担任的主要工作。
    2.详细论述常见的数据访问层设计技术及其所包含的主要内容。
    3.结合你参与管理和开发的实际项目,具体说明采用了哪种数据访问层设计技术,并叙述具体实施过程以及应用效果。

    一、首先用400-600字的篇幅简要叙述作者参与开发的软件系统的概要和所担任的工作。
    二、数据访问层的技术主要在于数据映射的问题如写Hibernate或iBATIS的应用。
    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton
    Begin在2002年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和·NET的持久层框架。
    三、详细论述你在项目中运用相关技术进行开发的,此时无非就是如何用好这些技术。 Hibernate的调优方案:
    制定合理的缓存策略;
    尽量使用延迟加载特性;
    采用合理的Session管理机制;
    使用批量抓取,设定合理的批处理参数(batch_size);
    进行合理的O/R映射设计。 Mybatis调优方案:
    MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。
    MyBatis可以进行详细的SQL优化设计。

    试题四 论微服务架构及其应用。

    近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件的要求。在这一背景下,微服务架构模式(Microservice Architecture Pattern)逐渐流行,它强调将单一业务功能开发成微服务的形式,每个微服务运行在一个进程中;采用HTTP等通用协议和轻量级API实现微服务之间的协作与通信。这些微服务可以使用不同的开发语言以及不同数据存储技术,能够通过自动化部署工具独立发布,并保持最低限制的集中式管理。
    
    请围绕“论微服务架构及其应用”论题,依次从以下三个方面进行论述。
    1.概要叙述你参与管理和开发的、采用微服务架构的软件开发项目及在其中所担任的主要工作。
    2.与单块架构相比较,微服务架构有哪些特点?请列举至少4个特点并进行说明。
    3.结合你参与管理和开发的软件开发项目,描述该软件的架构,说明该架构是如何采用微服务架构模式的,并说明在采用微服务架构后,在软件开发过程中遇到的实际问题和解决方案。

    一、首先用400-600字的篇幅简要叙述作者参与开发的软件系统的概要和所担任的工作。 二、微服务的特点包括:
    微服务的基本思想在于考虑围绕着业务领域组件来创建应用,这些就应用可独立地进行开发、管理和加速。在分散的组件中使用微服务云架构和平台使部署、管理和服务功能交付变得更加简单。
    微服务是利用组织的服务投资组合,然后基于业务领域功能分解它们,在看到服务投资组合之前,它还是一个业务领域。
    微服务这一概念出现于2012年,是因软件作者Martin Fowler而流行,他承认这并没有精确地定义出这一架构形式,虽然围绕业务能力、自动化部署、终端智能以及语言和数据的分散控制有一些常见的特性。
    开源工作流平台 “Imixs-Workflow“发布了一款新的微服务架构,作为工作流来管理解决方案。Imixs的微服务( Imixs-Microservice)提供了一个工作流封装成微服务架构。这一服务可以独立于其背后的技术,绑定到任何业务应用中去。这允许业务应用改变业务逻辑的时,不用更改任何代码。这业务目标可以通过工作流模型控制。
    Imixs的微服务是基于Imixs的工作流引擎( Imixs-Workflow Engine)的复杂功能构建的,它可以以多种不同的方法来控制业务数据。Imixs的微服务可以发送电子邮件推送消息、日志业务交换,还可以确保所有类型业务数据的安全。
    Imixs的工作流模型可以给业务处理模型(Imixs-Workflow Modeller)中的每种状态单独的设计一个ACL。这许可了高度复杂的业务应用程序,并在每个流程实例周围驻起了安全层。
    三、详细论述在项目中如何应用微服务架构进行开发的。

    展开全文
  • 仓储物联网概要设计 周末小组4人作品 目录 前言 3 1. 系统概述 3 1.1. 全局定义 3 2. 主程序 7 2.1. 数据库操作 9 2.1.1数据库操作线程 9 2.2. 消息队列请求线程 10 2.3. M0接收线程 11 2.4. 共享内存...
  • 单片机与嵌入式系统应用》主编何立民教授将从10个方面盘点2017年,并粗线条地展望2018年。2016年,AlphaGo挑动了人们的神经,一时间,街头巷尾人人议论起了人工智能。有兴奋者、有担忧者,更多的是媒体不停的炒作...
  • agvs系统简介

    2018-05-31 16:48:06
    一:agvs介绍 Agvs广泛用于智能仓储,柔性制造和物料运输,有近百年历史,其发展轨迹由两大分支构成:一个是叉车技术一个是机器人技术,但两者目标一致,即实现货物自动搬运。agvs系统大致包含单车agv监控调度系统 ...
  • 移动互联加的时代,智能便捷以及快销化方式越来越被推崇,很明显共享快递柜、医院智能储物柜、共享寄存柜解决方案打破传统的储物租用模式,让传统在创新中得到发展,方便快捷,解决了只有大型超市才常见的储物柜,且...
  • 系统主要由单片机、气体浓度检测模块、模数转换模块、显示模块、按键、蜂鸣器和无线通信模块等组成。本文首先介绍了工业废气检测系统的研究背景意义,同时结合国内外气体检测技术的发展现状,提出了基于ZigBee的...
  • 来源:高科技与产业化作者:罗仁权IEEE 工业信息期刊总主编、台湾大学智慧机器人及自动化研究中心主任罗仁权在“2019 世界机器人大会”上,阐述了人工智能与物联网结合所带来的新机遇与新市...
  • 自动导向小车(Automated Guided Vehicle)-AGV被作为搬运机器人广泛使用,应用于自动化仓储系统、柔性搬运系统和柔性装配系统等物流系统。小车是以蓄电池作为电源,用某种导航方式控制其运行路线的自动化智能搬运...
  • 1.1 基于单片机智能小车、智能机器人制作 1.2 基于Arduino的3D打印机制作 2、嵌入式Linux相关 2.1 智能扫地机器人 2.2 智能可穿戴类设备:智能安全头盔 2.3 智能可穿戴类设备:面向空巢老人/病人的智能手环 ...
  • 然而,有大量的嵌入式系统应用是以单片机的形式,应用在传统的电子技术领域中。因此,以计算机领域人员为主体的,远离对象系统的嵌入式系统的计算机工程应用模式,和以电子技术领域人员为主体,与对象系统紧耦合的...
  • 然而,有大量的嵌入式系统应用是以单片机的形式,应用在传统的电子技术领域中。因此,以计算机领域人员为主体的,远离对象系统的嵌入式系统的计算机工程应用模式,和以电子技术领域人员为主体,与对象
  • 忙忙碌碌两三年,软件行业的诸多朋友一直都搞不明白我在搞什么,硬件行业的朋友则是好奇我凭啥在智能硬件这块市场上凭空杀出来!这一切都得从2008年说起!那一年春天我刚换工作到上海,老杨(Rocky,现在的Boss,我...
  • 0 引言 目前我国工农业生产对温湿度、露点、压力等多参数实时监测与控制需求越来越大,尤其是电力、半导体和微电子、冶金、石化、化纤等工艺过程及食品、仓储等领域。 国外温湿度和压力测控系统发展迅速,在智能化、...
1 2 3 4 5
收藏数 88
精华内容 35