数据采集器

原创 2007年09月24日 19:02:00

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "C:/Compiler/INCLUDE/8000lib.h"
#include "C:/Compiler/INCLUDE/8xTcpip.h"
#include "C:/Compiler/INCLUDE/UCOS.H"


//*** 時間參數 ***-
#define DT_LongMonthTime 1
#define DT_LongDate      2

//*** 音效和背光設定 ***//
#define SND_None   0 // 不播放音效
#define SND_Error  1 // 錯誤
#define SND_Succ   2 // 作業成功
#define BlackLight 1 //背光
// ????
#define SND_Scan   4 // 掃描條碼
#define SND_Save   3 // 儲存
#define SND_Warn   5 // 警告

//*** 本專案所需變數 ***//
int g_checkFd;
int g_inFd;       // 儲位資料表
int g_inventFd;   // 盤點資料表
int g_pickFd;     // 撿貨資料表
int g_outFd;      // 出貨資料表
int g_carryInFd;  // 設備攜入
int g_carryOutFd; // 設備攜出

#define WorkID_Max   20 // 單次下載資料內可用的單號最大數量
#define WorkID_Len   16 // 工單
#define BoxNO_Len    16 // 箱號
#define PosNO_Len    12 // 儲位編號
#define VenNO_Len     1 // 廠商編號(Vendor)
#define Flag_Len      1 // 狀態
#define DT_Len       19 // 日期與時間
#define DevNO_Len    12 // 設備(Device)財編

int iBlack;      //表s_black的地址
int iHead;       //表head的地址
int iOperation;  //表 Operation的地址
int iUpload;     //表UPload的地址
// 資料庫欄位長度
#define Check_Len   (WorkID_Len + 1 + BoxNO_Len + 1 + PosNO_Len + 1 + DT_Len + 1 + DT_Len + 1 + Flag_Len)   // 進貨 : 驗貨 + 入庫資料表 : 88 Byte
//                                                                    驗貨時間     入庫時間     箱號是否不存在                
#define In_Len      (WorkID_Len + 1 + BoxNO_Len + 1 + PosNO_Len + 1 + DT_Len) // 儲位資料表 : 63
#define Pick_Len    (WorkID_Len + 1 + BoxNO_Len + 1 + DT_Len + 1 + DT_Len + 1 + Flag_Len)                   // 出貨 : 撿貨 + 出貨資料表 : 75
//                                                    撿貨時間     出貨時間     箱號是否不存在                
#define Out_Len     (WorkID_Len + 1 + BoxNO_Len + 1 + VenNO_Len + 1 + DT_Len) // 儲位資料表 : 55
#define Invent_Len  (PosNO_Len  + 1 + BoxNO_Len + 1 + DT_Len + 1 + PosNO_Len  + 1 + Flag_Len)                 // 盤點資料表 : 64
//儲位  箱號  盤點日期 新儲位  # : 移轉 ; * : 新增不存在
// 設備攜入/出
#define Carry_Len   (PosNO_Len + 1 + DevNO_Len + 1 + DT_Len)

// 其他
#define Buffer_Max_Size 256
#define Config_File "Config"

//****************************************************
// 名稱 : _StrRight
// 功能 : 重字符串中重右邊開始獲取几位信息
// 參數 : [in/out] dst  : 轉換地
//        [in]     src  : 源地
//        [in]     len  : 獲取長度
//****************************************************
void _StrRight(char* dst, char *src, int len)
{
 int offset = strlen(src) - len;
    if(strlen(src)<len)
    return;
 memset(dst, '/0', strlen(dst));
 memcpy(dst, &src[offset], len);
}
//****************************************************
// 名稱 : _StrNo
// 功能 : 重字符串中重左邊開始獲取几位信息
// 參數 : [in/out] dst  : 轉換地
//        [in]     src  : 源地
//        [in]     len  : 獲取長度
//****************************************************
void _StrLeftLen(char* dst, char *src, int offset,int len)
{
    int maxLen = offset+ len;
    if(strlen(src)<maxLen)
    return;
 memset(dst, '/0', strlen(dst));
 memcpy(dst, &src[offset], len);
}
//****************************************************
// 名稱 : _StrNo
// 功能 : 重字符串中重右邊開始獲取几位信息
// 參數 : [in/out] dst  : 轉換地
//        [in]     src  : 源地
//        [in]    offset: 偏移量      
//        [in]     len  : 獲取長度
//****************************************************
void _StrRightLen(char* dst, char *src, int offset,int len)
{
    int maxLen =strlen(src)-offset;
    if(strlen(src)<len&&strlen(src)<offset&&strlen(src)<maxLen+len)
    return;
 memset(dst, '/0', strlen(dst));
 memcpy(dst, &src[maxLen], len);
}
//*******************************************************************************************
// [名稱] _FlashScreen
// [用途] 閃爍畫面
//*******************************************************************************************
void _FlashScreen()
{
 int i ;
 clr_scr() ;
 clr_rect(0,0,100,64);
 SetCursor(0) ;

 for(i = 0 ; i <= 15 ; i += 5)
 {
  fill_rect(0,0+i,128,5) ;        //填滿矩形區域
  fill_rect(0,57-i,128,5) ;
  fill_rect(0,62,128,2) ;
  OSTimeDly(10) ;
 } 
}
//*******************************************************************************************
// [名稱] _PlaySound
// [用途] 播放聲音
// [參數] sndType [in]: 聲音種類
//*******************************************************************************************
void _PlaySound(int sndType)
{
 int sndError[14]   = { 5, 10, 10, 10, 15, 10, 20, 10, 25, 10, 30, 10, 0, 0};
 int sndWarn[12]    = {35, 10, 30, 10, 35, 10, 35,  5, 35,  5,  0,  0};
 int sndSuccess[12] = {30, 20, 30, 20, 25, 20, 20, 15, 15, 15,  0,  0};
 int sndSave[4]     = {16,  5,  0,  0}; 
 int sndScan[4]     = {30, 10,  0,  0};

 switch(sndType)
 { 
  case SND_None : break;
  case SND_Error: on_beeper(sndError);    break;
  case SND_Succ : on_beeper(sndSuccess);  break; 
  case SND_Save : on_beeper(sndSave);     break; // SND_Save
  case SND_Scan : on_beeper(sndScan);     break; 
  case SND_Warn : on_beeper(sndWarn);     break;    
 }
}
//******************************************************************
// 名稱 : _AddOneChar
// 功能 : 在來源字串最後填入一各字
// 參數 : [in/out] data : 字串
//        [in]     len  : 字串陣列長度
//        [in]     key  : 填入字元
//******************************************************************
void _AddOneChar(char *data, int dataLen, char key)
{
 int len = strlen(data);
 if(len < dataLen)
  data[len] = key; 
}
//******************************************************************
// 名稱 : _BackOneChar
// 功能 : 消除字串最後一各字
// 參數 : [in/out] data) : 字串
//******************************************************************
void _BackOneChar(char *data)
{
 int len = strlen(data);
 if(len > 0)
  data[len - 1] = '/0';
}
//******************************************************************
// 名稱 : _GetDateTime
// 功能 : 取得日期字串
// 參數 : [in]     style     : 指定日期格式
//        [in/out] pDateTime : 回傳日期
//******************************************************************
void _GetDateTime(int style, char *pDateTime)
{
 char currTime[16];
 get_time(currTime);
 if(style == DT_LongMonthTime)  // 08.11 17:27:30
 {
  memmove(pDateTime,      currTime + 4, 2); // MM
  pDateTime[2]  = '.';
  memmove(pDateTime + 3,  currTime + 6, 2); // DD
  pDateTime[5]  = ' ';
  memmove(pDateTime + 6,  currTime + 8, 2); // HH
  pDateTime[8]  = ':';
  memmove(pDateTime + 9,  currTime + 10, 2); // MM
  pDateTime[11] = ':';
  memmove(pDateTime + 12, currTime + 12, 2); // SS
  pDateTime[14] = '/0';
 }
 else if(style == DT_LongDate) // 2006/08/11
 {
  memcpy(pDateTime, currTime, 4);
  pDateTime[4] = '/';
  memcpy(pDateTime + 5, currTime + 4, 2);
  pDateTime[7] = '/';
  memcpy(pDateTime + 8, currTime + 6, 2);
  pDateTime[10] = '/0';
 }
 else if(style == 5) //格式: YYYY/MM/DD hh:mm:ss
 {
  memcpy(pDateTime, currTime, 4);
  pDateTime[4]  = '/';
  memcpy(pDateTime +  5, currTime + 4, 2);
  pDateTime[7]  = '/';
  memcpy(pDateTime +  8, currTime + 6, 2);
  pDateTime[10] = ' ';
  memcpy(pDateTime + 11, currTime + 8, 2);
  pDateTime[13] = ':';
  memcpy(pDateTime + 14, currTime + 10, 2);
  pDateTime[16] = ':';
  memcpy(pDateTime + 17, currTime + 12, 2);
  pDateTime[19] = '/0'; 
 }
}
//******************************************************************
// 名稱 : _ShowSingleMsg
// 功能 : 顯示單行訊息
// 參數 : [in] x         : X軸座標
//        [in] y         : Y軸座標
//        [in] clearScr  : 0 - 不清除螢幕 ; 1 - 清除螢幕
//        [in] delayTime : 延遲時間
//        [in] sndType   : 音效種類, 0 - 不撥放音效
//        [in] msg       : 顯示內容
//******************************************************************
void _ShowSingleMsg(int x, int y, int clearScr, int delayTime, int sndType, char *msg)
{
 SetCursor(0);
 if(clearScr == 1)
  clr_scr();
 gotoxy(x, y);
 puts(msg);
 _PlaySound(sndType);
 if(delayTime > 0)
  OSTimeDly(delayTime);
}
//******************************************************************
// 名稱 : _GetMnuIdx
// 功能 : 取得選單第幾項,one base
// 參數 : [in] mnuNo  : 選單數量
//        [in] mnuIdx : 選單目前點選項目
//        [in] key    : 輸入字元,KEY_UP、KEY_DOWN、'1'、'9'
// 回傳 : 按下數字或上下鍵後的項目數字
//******************************************************************
int _GetMnuIdx(int mnuNo, int mnuIdx, char key)
{
 char keyStr[2];
 int  keyNo;
 keyStr[0] = key;
 keyStr[1] = '/0';
 
 if(key == KEY_UP)
 {
  if(mnuIdx == 1)
   return mnuNo;
  else
   return --mnuIdx;
 }
 else if(key == KEY_DOWN)
 {
  if(mnuIdx == mnuNo)
   return 1;
  else
   return ++mnuIdx;
 }
 
 keyNo = atoi(keyStr);
 return keyNo;
}

int _Inquire(char * title1, char * title2, char * select1, char *select2)
{
 char key;
 SetVideoMode(VIDEO_NORMAL);
 SetFont(FONT_6X12);
 SetCursor(0);
 clr_scr();
 gotoxy(0, 0);
 puts(title1);
 gotoxy(0, 1);
 puts(title2);
 gotoxy(0, 2);
 puts(select1);
 gotoxy(0, 3);
 puts(select2);
 _PlaySound(SND_Warn);
 while(1)
 {
  key = getchar();
  if(key == '1')
   return 1;
  if(key == '2')
   return 2;
 }
 
}
//******************************************************************
// 名稱 : _StrPad
// 功能 : 將字符指定位置加上指定字符
// 參數 : [in/out] data : 目的地字串陣列
//        [in]     int  : 指定偏移位置
//        [in]     int  : 指定轉換長度
//        [in]     dstLen  : 指定要轉換的字符
//******************************************************************
void _StrPad(char* data, int offset, int len, char key)
{
 int upperBound = len - 2;
 for( ; offset <= upperBound ; offset++)
  data[offset] = key;
 data[len - 1] = '/0';
}
//******************************************************************
// 名稱 : _GetScanData
// 功能 : 取得掃瞄器讀取的字串
// 參數 : [in/out] dstData : 目的地字串陣列
//        [in]     dstLen  : 字串陣列長度
//******************************************************************
void _GetScanData(char *data, int dataLen)
{
 memset(data, '/0', dataLen);
 memcpy(data, CodeBuf, dataLen); // 避免拷貝到 CodeBuf '/0'之後的字元
 _StrPad(data, strlen(data), dataLen, '/0');
 _PlaySound(SND_Scan);
}
//******************************************************************
// 名稱 : _IntToStr
// 功能 : 將int型轉換成string型
// 參數 : [in] value : 目的地字串陣列
//        [in/out]     strValue  : 字符的地址
//******************************************************************
void _IntToStr(long value, char *strValue)
{
 int a = 0; // 萬位
 int b = 0; // 千位
 int c = 0; // 百位
 int d = 0; // 十位
 int e = 0; // 個位
 int index = 0;
 
 if(value > 9999)
 {
  a = value / 10000;
  b = (value - 10000 * a) / 1000;
  c = (value - (10000 * a + 1000 * b))/ 100;
  d = (value - (10000 * a + 1000 * b + 100 * c))/ 10;
  e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;
 }
 else if(value > 999)
 {
  b = value / 1000;
  c = (value - (10000 * a + 1000 * b))/ 100;
  d = (value - (10000 * a + 1000 * b + 100 * c))/ 10;
  e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;  
 }
 else if(value > 99)
 {
  c = value / 100;
  d = (value - (10000 * a + 1000 * b + 100 * c))/ 10;
  e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;  
 }
 else if(value > 9)
 {
  d = value / 10;
  e = (value - (10000 * a + 1000 * b + 100 * c + 10 * d))/ 1;  
 }
 else
  e = value;
 if(a > 0)
 {
  strValue[index] = 48 + a;
  index++;
 }
 if(b >0)
 {
  strValue[index] = 48 + b;
  index++;
 }
 if(b==0&&a>0)
 {
  strValue[index] = 48 + b;
  index++;
    }
 if(c > 0)
 {
  strValue[index] = 48 + c;
  index++;
 }
 if(c==0&&(b>0||a>0)) 
 {
     strValue[index] = 48 + c;
  index++; 
 }
 if(d > 0)
 {
  strValue[index] = 48 + d;
  index++;
 }
 if(d==0&&(b>0||a>0||c>0))
 {
  strValue[index] = 48 + d;
  index++;
 }
 if(e >= 0)
 {
  strValue[index] = 48 + e;
  index++;
 }
 strValue[index] = '/0';  
}
//******************************************************************
// 名稱 : _IntToStr
// 功能 : 將int型轉換成string型
// 參數 : [in] value : 目的地字串陣列
//        [in/out]     strValue  : 字符的地址
//******************************************************************
void _IntToFormatStr(long value, char *strValue)
{
 
 int b = 0; // 千位
 int c = 0; // 百位
 int d = 0; // 十位
 int e = 0; // 個位 
    b = (value ) / 1000;
    c = (value - (1000 * b))/ 100;
    d = (value - (1000 * b + 100 * c))/ 10;
    e = (value - (1000 * b + 100 * c + 10 * d))/ 1;
  strValue[0] = 48 + b;
  strValue[1] = 48 + c; 
  strValue[2] = 48 + d;
     strValue[3] = 48 + e;
  
}

void _CreateMaterialTable_black(int flag)
{
 // 建立物料資料表,一共有4個
 close_DBF(iBlack);
 if(flag == 1)
  remove("BLACK");
 if(access("BLACK") == 0)
 { 
  iBlack = create_DBF("BLACK",30);
  create_index(iBlack, 1, 0,30);
 }
 else
 {
  iBlack = open_DBF("BLACK");
 } 
}
void _CreateMaterialTable_Head(int flag)
{
 // 建立物料資料表,一共有4個
 close_DBF(iHead);
 if(flag == 1)
  remove("Head");
 if(access("Head") == 0)
 { 
  iHead = create_DBF("Head",19);
  create_index(iHead, 1,0, 11);
 }
 else
 {  
  iHead = open_DBF("Head");
 } 
}
void _CreateMaterialTable_Operation(int flag)
{
 // 建立物料資料表,一共有4個
 close_DBF(iOperation);
 if(flag == 1)
  remove("Operation");
 if(access("Operation") == 0)
 {   
  iOperation = create_DBF("Operation",21);
  create_index(iOperation, 1, 0, 11);
 }
 else
 {
  iOperation = open_DBF("Operation");
 } 
}
void _CreateMaterialTable_Upload(int flag)
{
 // 建立物料資料表,一共有4個
 close_DBF(iUpload);
 if(flag == 1)
  remove("Upload");
 if(access("Upload") == 0)
 {   
  iUpload = create_DBF("Upload",49);
  create_index(iUpload, 1, 0, 30);
 }
 else
 {
  iUpload = open_DBF("Upload");
 } 
}
void DeleteDatabase()
{
 _CreateMaterialTable_black(1);
 _CreateMaterialTable_Head(1);
 _CreateMaterialTable_Operation(1);
 _CreateMaterialTable_Upload(1);
}
void CreateDatabase()
{
 _CreateMaterialTable_black(2);
 _CreateMaterialTable_Head(2);
 _CreateMaterialTable_Operation(2);
 _CreateMaterialTable_Upload(2);
}

int _ReadCom(char *buff, char firstChar)
{
 char ch;
 char key;
 int index = 1;
 memset(buff, '/0', 256);
 buff[0] = firstChar;
 while(read_com(1, &ch) == 1)
 { 
  key = getchar();
  if(key == KEY_ESC)
   return 0;
  buff[index] = ch;
  index++;
 }
 clr_scr();
 gotoxy(0, 1);
 puts(buff);
 //OSTimeDly(50);
 return 1; 
}
//
//
//

/*** 專案專屬函式 ***/
void Upload()
{
 char ch;
 int  dateCount;
 int  progress = 0;
 int  indexUpload= 0;
 int  indexHead=0;
 int  indexOperation=0;
 int  count;
 int  countUpload;
 int  countHead;
 int  countOperation;
 int  retval;
 char buff[256];  
 char tmpStr[256];
 char key;
 char strValue[7];
 
 close_com(1);
 clear_com(1);
 SetCommType(1, 2);
 open_com(1, BAUD_115200 | DATA_BIT8 | PARITY_NONE | HANDSHAKE_NONE);
 _ShowSingleMsg(0, 2, 1, 0, SND_None, (char *)"wait..");

 // 資料筆數
 countUpload = member_in_DBF(iUpload);
 countHead =member_in_DBF(iHead);
 countOperation =member_in_DBF(iOperation);
 if(countUpload == 0)
 {
  _ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"no data Upload");
  return;
 }
 while(1)
 {
  key = getchar();
  if(key == KEY_ESC)
  {
   _ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)" worry");
   while (!com_eot(1)); /* wait till prior transmission completed */
   write_com(1, "break/r");
   break;
  }
  gotoxy(0, 1);
  if(progress == 0)
   puts("wait..");
  else if(progress == 1)
   puts("wait....");
  else if(progress == 2)
   puts("wait......");
  else if(progress == 3)
   puts("wait........");
  OSTimeDly(10);
  clr_scr();
  progress++;
  if(progress > 3)
   progress = 0;
  // receive 
  if(read_com(1, &ch) == 0)
   continue; 
  else if(_ReadCom(buff, ch) == 0)
  {
   _ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"worry");
   while (!com_eot(1)); /* wait till prior transmission completed */
   write_com(1, "break/r");
   break;
  }  
  memset(tmpStr, '/0', 256);
  memcpy(tmpStr, buff, 5);
  if(strcmp(tmpStr, "start") == 0)
  {
   memset(tmpStr, '/0', 256);
   memset(strValue, '/0', 7);
   dateCount=countUpload+countHead+countOperation;
   _IntToStr(dateCount, strValue);
   strcpy(tmpStr, "UpLoad");
   strcat(tmpStr, strValue);
   strcat(tmpStr, " 筆紀錄");
   _ShowSingleMsg(0, 2, 1, 100, SND_None, tmpStr);
   while (!com_eot(1)); /* wait till prior transmission completed */
   memset(tmpStr, '/0', 256);
   strcpy(tmpStr, "rec!!");
   strcat(tmpStr, strValue);
   strcat(tmpStr, (char *)"/r"); // 2006/09/01 測試 IrLib.dll ReadIrCom() 需要 /r 當結束字元
   write_com(1, tmpStr);
  }
  else if(strcmp(tmpStr, "next!") == 0)
  {
   if(indexUpload>=countUpload)
   {
    while (!com_eot(1)); /* wait till prior transmission completed */
    write_com(1, "end!!/r"); // 2006/09/01 測試 IrLib.dll ReadIrCom() 需要 /r 當結束字元
    _ShowSingleMsg(2, 2, 1, 300, SND_Succ, (char *)"UpLoad is over");
    break;
   }
            else if(indexOperation<countOperation) 
   { 
    if (indexOperation==0)
        lseek_DBF(iOperation,1,0,1);
       else
        lseek_DBF(iOperation,1,1,0);
       get_member(iOperation,1,buff);
          indexOperation++;
           strcpy(tmpStr,"data!1");
   }
   else if(indexHead<countHead) 
   { 
    if (indexHead==0)
        lseek_DBF(iHead,1,0,1);
       else
        lseek_DBF(iHead,1,1,0);
       get_member(iHead,1,buff);
          indexHead++;
           strcpy(tmpStr,"data!2");
      }
      else if(indexUpload<countUpload) 
   { 
    if (indexUpload==0)
        lseek_DBF(iUpload,1,0,1);
       else
        lseek_DBF(iUpload,1,1,0);
       get_member(iUpload,1,buff);
          indexUpload++;
           strcpy(tmpStr,"data!3");
      }
   while (!com_eot(1)); /* wait till prior transmission completed */
   strcat (tmpStr,buff);
      strcat(tmpStr, (char *)"/r"); // 2006/09/01 測試 IrLib.dll ReadIrCom() 需要 /r 當結束字元
   write_com(1, tmpStr); 
   filelength(iUpload);
  } 
 }
 
 close_com(1);
}
//******************************************************************
// 名稱 : _VerifyLowBound
// 功能 : 檢驗欄位字串是否為零
// 參數 : [in] data : 字串
//        [in] fieldName : 欄位名稱
// 回傳 : 0 - 字串長度為零 ; 1 - 字串長度大於1
//******************************************************************
int _VerifyLowBound(char *data, char * fieldName)
{
 char msg[17];
 memset(msg, '/0', 17);
 strcpy(msg, fieldName);
 strcat(msg, "長度為零");
 if(strlen(data) == 0)
 {
  _ShowSingleMsg(0, 3, 1, 200, SND_Error, msg);
  return 0;
 }
 else
  return 1;
}
//
// Add the Data to DataBase
//

void _AddInsertData(char* tmpStr)
{
     char dst[31];
     int len =30;
     memset(dst,'/0',31);
  
     if(strlen(tmpStr)<30||strlen(tmpStr)>250)
     {
        return; 
     }
     if(strlen(tmpStr)>=30)
     {             
       memcpy(dst, tmpStr, len);
    add_member(iBlack, dst);
     }
     if(strlen(tmpStr)>=60)
     {
       memcpy(dst,tmpStr+30, len);
    add_member(iBlack, dst);
     }
     if(strlen(tmpStr)>=90)
     {
       memcpy(dst,tmpStr+60, len);
    add_member(iBlack, dst);
     }
     if(strlen(tmpStr)>=120)
     {
      memcpy(dst,tmpStr+90, len);
    add_member(iBlack, dst); 
     }
     if(strlen(tmpStr)>=150)
     {
       memcpy(dst,tmpStr+120, len);
    add_member(iBlack, dst);
     }
     if(strlen(tmpStr)>=180)
     {
      memcpy(dst,tmpStr+150, len);
    add_member(iBlack, dst);
     }
      if(strlen(tmpStr)>=210)
     {
       memcpy(dst,tmpStr+180, len);
    add_member(iBlack, dst);
     }
      if(strlen(tmpStr)>=220)
     {
       memcpy(dst,tmpStr+210, len);
    add_member(iBlack, dst);
     }
}
//
//  get the data into diffrent table
//
void _GetDataToTable(char* strTemp,char* strTableNo)
{
 if(strcmp(strTableNo,"data!1")==0)
 {
  _AddInsertData(strTemp);
 }
 if(strcmp(strTableNo,"data!2")==0)
    {
     add_member(iHead, strTemp);
    }
    if(strcmp(strTableNo,"data!3")==0)
 {
  add_member(iOperation, strTemp);
 }   
}
///////////////////////////////////////////////////////////////////////
void Download()
{
 char ch;
 int  progress = 0;
 int  index    = 0;
 int  count    = 10;
 char buff[256];
 char tmpStr[256];
 char key;
 int  retval;
 char table_no;
 int  dataCount=0;
 char strCount[5];
    char strTableNo[256];

 retval = _Inquire((char *)"old data will delete", (char *)"", (char *)"1.NO AND OUT",(char *)"2.YES");
 if(retval == 1)
  return;
 else
   DeleteDatabase();
 close_com(1);
 clear_com(1);
 SetCommType(1, 2);
 open_com(1, BAUD_115200 | DATA_BIT8 | PARITY_NONE | HANDSHAKE_NONE);
 _ShowSingleMsg(0, 2, 1, 0, SND_None, (char *)"wait data..");
  
 while(1)
 {
  key = getchar();
  if(key == KEY_ESC)
  {
   _ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"worry");
   while (!com_eot(1)); /* wait till prior transmission completed */
   write_com(1, "break/n");
   break;
  }
  gotoxy(0, 1);
  if(progress == 0)
   puts("wait..");
  else if(progress == 1)
   puts("wait....");
  else if(progress == 2)
   puts("wait......");
  else if(progress == 3)
   puts("wait........");
  OSTimeDly(10);
  clr_scr();
  progress++;
  if(progress > 3)
   progress = 0;
  // receive 
  if(read_com(1, &ch) == 0)
   continue; 
  else if(_ReadCom(buff, ch) == 0)
  {
   _ShowSingleMsg(0, 2, 1, 300, SND_Error, (char *)"worry");
   while (!com_eot(1)); /* wait till prior transmission completed */
   write_com(1, "break/r");
   break;
  }  
  memset(tmpStr, '/0', 256);
  memcpy(strTableNo,buff,6);
  memcpy(tmpStr, buff, 5);
  if(strcmp(tmpStr, "start") == 0)
  {
   memset(tmpStr, '/0', 256);
   memcpy(tmpStr, buff + 5, strlen(buff) - 5);  // 資料筆數
   count = atoi(tmpStr);
   strcat(tmpStr, "bit data");   
   _ShowSingleMsg(0, 2, 1, 100, SND_None, tmpStr);
   while (!com_eot(1)); /* wait till prior transmission completed */
   write_com(1, "next!/r");
  }
  else if(strcmp(tmpStr, "data!") == 0)
  {    
   _StrRight(tmpStr, buff, strlen(buff) - 6);
   table_no=tmpStr[0];   
      _GetDataToTable(tmpStr,strTableNo);
    
      dataCount=member_in_DBF(iBlack);        
            _IntToStr(dataCount,strCount);
   //_ShowSingleMsg(0, 2, 1, 10, SND_None, tmpStr);
   _ShowSingleMsg(0, 2, 1, 40, SND_None, strCount);
   while (!com_eot(1)); /* wait till prior transmission completed */
   write_com(1, "next!/r");
  }
  else if(strcmp(tmpStr, "end!!") == 0)
  {
            dataCount=member_in_DBF(iOperation); 
            _IntToStr(dataCount,strCount);
   _ShowSingleMsg(2, 2, 1, 500, SND_Succ, strCount);
   break;
  } 
 }
 close_com(1);
}

//
//
//
void main_Draw(int mnuIdx)
{
 char *mnuItems[6] = {"1Collect",
                         "2DownLoad",
                      "3UpLoad",
                      "4BlackLight",
                      "5UserSetDate",
                      "6UserSetTime"};
                     
 SetVideoMode(VIDEO_NORMAL);
 SetFont(FONT_6X8);
 SetCursor(0);
 clr_scr();
 
 if(mnuIdx <= 10)
 {
  gotoxy(0, 0);
  puts(mnuItems[0]);
  gotoxy(0, 1);
  puts(mnuItems[1]); 
  gotoxy(0, 2);
  puts(mnuItems[2]);
  gotoxy(0, 3);
  puts(mnuItems[3]);
  gotoxy(0, 4);
  puts(mnuItems[4]);     
  gotoxy(0, 5);
  puts(mnuItems[5]);  
  //gotoxy(0, 1);
  //puts(mnuItems[6]);  
 }
 SetVideoMode(VIDEO_REVERSE);
    if((mnuIdx == 1))
  gotoxy(0, 0);
 else if((mnuIdx == 2) || (mnuIdx == 7))
  gotoxy(0, 1);
 else if((mnuIdx == 3) || (mnuIdx == 8))
  gotoxy(0, 2);
 else if((mnuIdx == 4) || (mnuIdx == 9))
  gotoxy(0, 3);
 else if((mnuIdx == 5) || (mnuIdx == 10))
  gotoxy(0, 4);   
 else if((mnuIdx == 6))
  gotoxy(0, 5); 
 puts(mnuItems[mnuIdx - 1]);
 SetVideoMode(VIDEO_NORMAL);
}

//
//
//
void _CheckDataDraw(char* machSn,char* machPlaceNo,int mnuIdx)
{
    char *mnuItems[3] = {"Items:",
                         "R/Q:",
                      "R/C:"};
    char tempMachPlaceNo[20];
    char tempStr[31];
    char machQty[5];
    char machThisQty[5];
    clr_scr();

    memset(tempMachPlaceNo,'/0',20);
    memset(tempStr, '/0',31);
    memset(machQty,'/0',5);
    if(has_member(iHead,1,machPlaceNo))
    {
     get_member(iHead,1,tempMachPlaceNo);  
     _StrLeftLen(machThisQty,tempMachPlaceNo,11,4);
     gotoxy(5,6);
     puts(tempMachPlaceNo+15); 
     gotoxy(10,6);
     puts(machThisQty);
    }
    get_member(iOperation,1,tempStr);  
    _StrLeftLen(machQty,tempStr,13,4);                  
    SetVideoMode(VIDEO_NORMAL);                   
    SetFont(FONT_6X8);

 SetCursor(0);
 
    gotoxy(0, 0);
 puts(mnuItems[0]);
 gotoxy(0, 1);
 puts(machSn);  
 gotoxy(0,6);
 puts(mnuItems[1]);
 
 gotoxy(9,6);
    puts("/");
 gotoxy(0,7);  
 puts(mnuItems[2]);
    gotoxy(5,7); 
    puts(tempStr+17);
    gotoxy(9,7);
    puts("/");
    gotoxy(10,7);
    puts(machQty);
 SetCursor(1);
 if(strlen(machSn)>16)
  gotoxy(strlen(machSn),1);
 else
  gotoxy(strlen(machSn)-16,2);
}
//
//
//
void _CheckDataIsRight(char* machSn,char* tempMachPlaceNo)
{
 int mnuIdx  = 2;   
 int intMachNumber;     //機台要求數量
    int machQtyNumber;     //機台實際數
    int  len=30;
    char key;
    char machNo[7];        //物品類號
    char machPlace[6];     //機台產地
    char machNumber[5];    //機台數量
    char tempMachSn[31];   //臨時物品序號
    char tempStr[31];
    char machQty[5];       //機台實際數字符型
    char sysDate[15];      //獲取系統時間
    char tempSnAddDate[45];//將序號和時間向加
    char machPlaceNo[12];
    char machLength[3];
    char tempOperation[22];
    char tempLength[3];
   
 InitScanner1();
 memset(machNo, '/0',  7);
 memset(machPlace, '/0',  6);
 memset(machNumber, '/0',  5);
 memset(tempMachSn,'/0',31);
 memset(tempStr, '/0',  31);
 memset(machQty, '/0',  5);
 memset(sysDate,'/0',15);
 memset(tempSnAddDate,'/0',45);
 memset(machPlaceNo,'/0',12);
 memset(machLength,'/0',3);
 memset(tempOperation,'/0',22);
 memset(tempLength,'/0',3);
 
 
    //_StrRightLen(machNo,machSn,8,6);
 if(strlen(machSn)<31&&strlen(machSn)>18)
    {
     
     _IntToStr(strlen(machSn),tempLength);
     get_member(iOperation,1,tempOperation);
     memcpy(machLength,tempOperation+11,2);
     _StrRightLen(machNo,machSn,8,6); 
     _StrLeftLen(machPlace,machSn,2,5); 
     memcpy(machPlaceNo,machPlace,5);
     memcpy(machPlaceNo+5,machNo,6);
     memcpy(tempMachSn,machSn,strlen(machSn));
     _StrPad(tempMachSn,strlen(tempMachSn),31,32);
  } 
  if(strlen(machSn)<19)
  {
        _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "Length < 19");        
     }  
     else if(strlen(machSn)>30)
     {
     _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "Length > 30");        
  }
  else if(strcmp(tempLength,machLength))
  {
   _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "Length  worry"); 
  } 
  else if(has_member(iUpload,1,tempMachSn))
     {
        _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "has been check"); 
     } 
  else if(has_member (iBlack, 1,tempMachSn))
     {
        _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) " in blackname"); 
     }                
     else if(!has_member(iHead, 1,machPlaceNo))
     {
        _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "don't has this thing"); 
     }             
     else if(has_member(iHead, 1, machPlaceNo))
     {
        get_member(iHead, 1, tempStr);
        _StrRight(machNumber,tempStr,4);
        _StrLeftLen(machQty,tempStr,11,4);
        machQtyNumber=atoi(machQty);
        intMachNumber=atoi(machNumber);
        if(machQtyNumber<=intMachNumber)
        {        
             _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "thing has full");
        }
        else
        {    
    intMachNumber+= 1;
    _IntToFormatStr(intMachNumber,machNumber);
    memcpy(tempStr+15,machNumber,4);
    update_member(iHead,1,tempStr);
    get_member(iOperation,1,tempStr);                                                   
    _StrRight(machQty,tempStr, 4);
    _StrLeftLen(machNumber,tempStr,13,4);               
    machQtyNumber=atoi(machQty);
    intMachNumber=atoi(machNumber);
         
    if(intMachNumber>machQtyNumber)
    {     
     machQtyNumber+= 1;
     _IntToFormatStr(machQtyNumber,machQty);

     memcpy(tempStr+17,machQty,4);
     update_member(iOperation,1,tempStr);
     get_time(sysDate);
     memcpy(tempSnAddDate,tempMachSn,strlen(tempMachSn));
     memcpy(tempSnAddDate+30,sysDate,14);          
     add_member(iUpload,tempSnAddDate);
     _ShowSingleMsg(2, 2, 1, 200, SND_Succ,(char *) "Add Success");
     }
     else
     {
      _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "count has full");
     }        
    }
   }   
   memcpy(tempMachPlaceNo,machPlaceNo,11);                            
   _CheckDataDraw(machSn,machPlaceNo,mnuIdx);                        
}
//************************************************
// GetKeyData() : User set time.
//************************************************

void UserSetDate()
{
 int  pos,xpos,ypos,iday,ibeep[4] = {20,10, 0, 0};
    int  jump[2]={5,8};
    char sbuf[15],stime[15],date[8],timeTemp[11],key; 
   
    pos=0;
    xpos=1;
    ypos=2;
    clr_scr();
    dis_alpha();
    memset(timeTemp,'/0',11);
    memset(stime,'/0',15);
    get_time(stime);
    memcpy(timeTemp,stime,4);
    memset(timeTemp+4,'-',1);
    memcpy(timeTemp+5,stime+4,2);
    memset(timeTemp+7,'-',1);
    memcpy(timeTemp+8,stime+6,2);

    sbuf[0] = 0;
    SetCursor (1);
    gotoxy (xpos, ypos);
    puts(timeTemp);  
    gotoxy(1,2);
   while(1)
   {
    key = getchar();
        if((key >= '0') && (key <= '9'))
        {         
         gotoxy (xpos, ypos); 
         putchar (key);
         sbuf[pos]=key;
         xpos++;
         pos++;
         if(xpos==5||xpos==8)
         {
          xpos++;          
         }
         gotoxy(xpos,ypos);
         if (pos >= 8)
         {                           
          memcpy(stime,sbuf,8);
          if(set_time(stime))
          {                
           on_beeper(ibeep);
           clr_scr();        
           return;
          }
          else
          {
           _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "SetDate Err");
           return;     
          }        
         }        
  }
  if(key==KEY_ESC)
  {
   return; 
  }
 }                                  
}
//******************************************************************
// 設置系統時間
//******************************************************************
void UserSetTime()
{
    int  pos,xpos,ypos,iday,ibeep[4] = {20,10, 0, 0};
    int  jump[2]={5,8};
    char sbuf[6],stime[15],date[8],timeTemp[6],key; 
   
    pos=0;
    xpos=1;
    ypos=2;
    clr_scr();
    dis_alpha();
    memset(sbuf,'/0',6);
    memset(timeTemp,'/0',6);
    memset(stime,'/0',15);
    get_time(stime);
    memcpy(timeTemp,stime+8,2);
    memset(timeTemp+2,':',1);
    memcpy(timeTemp+3,stime+10,2);

    sbuf[0] = 0;
    SetCursor (1);
    gotoxy (xpos, ypos);
    puts(timeTemp);  
    gotoxy(1,2);
   while(1)
   {
    key = getchar();
        if((key >= '0') && (key <= '9'))
        {         
         gotoxy (xpos, ypos); 
         putchar (key);
         sbuf[pos]=key;
         xpos++;
         pos++;
         if(xpos==3)
         {
          xpos++;          
         }
         gotoxy(xpos,ypos);
         if (pos >= 4)
         {                           
          memcpy(stime+8,sbuf,4);
          if(set_time(stime))
          {                
           on_beeper(ibeep);
           clr_scr();        
           return;
          }
          else
          {
           _ShowSingleMsg(2, 2, 1, 200, SND_Error,(char *) "SetTime Err");
           return;     
          }        
         }        
  }
  if(key==KEY_ESC)
  {
   return; 
  }
 }                                       
}
//-------------------------------------------------------------------------//
//******************************************************************
//  設置背靜燈光
//******************************************************************
void BlackLight()
{
 int retval=1;
    retval = _Inquire((char *)"Black Light", (char *)"", (char *)"1.NO",(char *)"2.OFF");
 if(retval == 1)
    lcd_backlit (1);
 else
    lcd_backlit (0);
    return;
}

//******************************************************************
//  核查
//******************************************************************
void CheckData()
{
 int mnuNo   = 1;
 int mnuIdx  = 2;
 char key;
    int  len=30;
 char machSn[31];     // 物品序號
    char machPlaceNo[12];   //物品地址和種類
    char tempMachPlaceNo[12];
    char saveKey;
    
 InitScanner1();
 memset(machSn, '/0',31);
 memset(machPlaceNo,'/0',12);
 memset(tempMachPlaceNo,'/0',12);
 _CheckDataDraw(machSn,tempMachPlaceNo,mnuIdx); 
 
 while(1)
 {
     key=getchar();
  if(Decode())
  {        
     _GetScanData(machSn, len); 
     _CheckDataIsRight(machSn,tempMachPlaceNo);       
  } 
  else if(key == KEY_ESC)
  {
   HaltScanner1();
   return;
  }
  else if(key == KEY_ALPHA)
  {   
     en_alpha(8000);
        }
  else if(key == KEY_CR)
  {   
     _CheckDataIsRight(machSn,tempMachPlaceNo);
        }
        else if(key >= '#' && key <= 'z')
        {
       _AddOneChar(machSn, len, key);
       _CheckDataDraw(machSn,tempMachPlaceNo, mnuIdx); 
        }
        else if(key == KEY_BS)
        {
       _BackOneChar(machSn); 
       _CheckDataDraw(machSn,tempMachPlaceNo,mnuIdx);
        }
   } 
}

//******************************************************************
// 程式進入點
//******************************************************************
void main(void)
{
 int mnuNo   = 6;
 int mnuIdx  = 1;
 char key;
 CreateDatabase();
 main_Draw(mnuIdx);
 while(1)
 {
  key = getchar();
  if((key == KEY_UP) || (key == KEY_DOWN) || ((key >= '1') && (key <= '6')))
  {
   mnuIdx = _GetMnuIdx(mnuNo, mnuIdx, key);
   main_Draw(mnuIdx);
  }
  else if(key == KEY_CR)
  {
   switch(mnuIdx)
   {     
                case 1 : CheckData();   break;  //
    case 2 : Download();    break;    //
    case 3 : Upload();      break;    //
    case 4 : BlackLight();  break;    //
    case 5 : UserSetDate(); break;    //
    case 6 : UserSetTime(); break;    //
   }
      main_Draw(mnuIdx);
  }
 }

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

金蝶KIS商贸高级版4.0汉码盘点机使用说明书-金蝶KIS条码数据采集器,金蝶KIS盘点机PDA

PDA与“金蝶KIS商贸高级版”无缝对接,通过WIFI,3G/4G无线网络连接后台数据库,实时与后台数据库进行数据传输。在PDA上可以通过扫描条码完成采购收货,出库校验,销售出库,仓库盘点,库存查询的...

数据采集器-架构介绍

说点事说说数据采集的流程数据采集一般是一个从硬件设备收集到数据,然后对对数据进行解析处理,归类,入库,供查询使用。说说踩过的坑 坑1:java多线程并发数量以及tcp粘包问题 由于数据采集是通过tc...

用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)

前言: 用了cxf,axis等各种wbeservice实现库,简单试用了一下动态调用的方式,很不满意,完全无法满足业务的需要,所以自己实现了一个webservice采集客户端,方便动态调用外部webs...

资产盘点数据采集器 扫描枪(器)PDA应用APP

通过条码或者RFID技术结合PDA手持终端可实现数据采集自动化, 企业部门对固定资产进行条码预分配,并打印粘贴在固定资产上,当需要盘点时,由资产管理中心统一分配盘点任务到PDA手持终端上,盘点员只需拿...

数据采集器核心思想

数据采集核心思想实现 1数据连接  也就socket常连接,由于netty在socket连接的出色性能,用netty做socket的连接框架 2数据传输  16进制方式进行传输 3数据解析  对于数据...

汉码盘点机无缝对接无缝对【思讯服装之星V9】思讯服装之星盘点机条码数据采集器PDA

【思讯商业之星V9】。通过WIFI,3G,4G网络与总部实时数据交互。在盘点机上扫描条码,即可自动生成后台数据库服务器中的各种单据。采购入库,采购退货,批发销售,批发退货,仓库盘点,实时库存查询(实时...

无线数据采集器设计

摘要: 本设计是为某公司的新产品——生产现场无线数据采集器进行产品形态设计和人机界面设计。由于这款产品的应用环境为生产现场的物流信息传递,所以设计时除了要满足功能对产品的需求以外,还要考虑到工作环境里...

Java网页数据采集器[续篇-远程操作]

本期概述 上期我们学习了html页面采集后的数据查询, 但这仅仅是在本地查询数据库,如果我们想通过远程操作来进行数据的采集,存储和查询,那又该怎么做呢? 今天我们一起来学习下:如何通过本地客户端远...

lightinthebox火车头数据采集器(20120812更新) 使用火车头接口技术一键批量采集 批量发布 批量去水印 接口技术

lightintebox 如何 实现 数据采集,lightinthebox中如何实现以下功能:(欢迎广大网友交流 qq:158393237 旺旺:  q459255119) 1  找供应商采...

如何选购盘点机,条码数据采集器?需要注意哪些事项?比如:金蝶盘点机,药品盘点机,超市盘点机,图书盘点机,服装盘点机等

随着条码技术的普遍推广,仓储管理信息化技术的发展,越来越多的企业均会上一套进销存管理软件来进行仓储管理。但是随着商品的越来越多,库存流转越来越复杂,我们录入各种单据的工作量也越来越大,由于人工录入大量...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)