无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

 

 

VFP 環(huán) 境 下 實 時 數(shù) 據(jù) 采 集 的 實 現(xiàn)

東 南 大 學(xué) 熱 能 所(210096)---- 周 衛(wèi) 平


---- VFP 作 為 新 一 代 數(shù) 據(jù) 庫 管 理 系 統(tǒng), 在 數(shù) 據(jù) 的 存 取、 編 輯、 顯 示、 處 理 等 方 面 具 有 強 大 和 豐 富 的 工 具, 在 國 內(nèi) 外 得 到 了 廣 泛 應(yīng) 用。 在 許 多 工 業(yè) 應(yīng) 用 中, 往 往 要 對 現(xiàn) 場 模 擬 數(shù) 據(jù) 進(jìn) 行A/D 轉(zhuǎn) 換 且 實 時 處 理, 由 于VFP 不 能 對 端 口 進(jìn) 行 直 接 訪 問, 因 而 無 法 實 現(xiàn) 數(shù) 據(jù) 采 集。 幸 好VFP 提 供 了DDE 功 能。DDE 是Windows 應(yīng) 用 程 序 之 間 進(jìn) 行 動 態(tài) 信 息 傳 遞 和 共 享 的 一 個 消 息 協(xié) 議, 利 用DDE 可 實 現(xiàn)Windows 的 服 務(wù) 程 序 和 客 戶 程 序 的 相 互 獨 立 運 行, 具 有 很 好 的 實 時 性。 在 實 踐 中, 我 們 利 用 高 級 語 言BorLand C++ for Windows 實 現(xiàn)96 路A/D 數(shù) 據(jù) 采 集, 并 以 此 為 服 務(wù) 程 序; 在VFP 環(huán) 境 下 建 立 客 戶 程 序, 將 服 務(wù) 程 序 傳 遞 過 來 的 數(shù) 據(jù) 及 時 進(jìn) 行 運 算 處 理 后, 存 入 數(shù) 據(jù) 庫, 并 作 為 各 種 表 單、 報 表、 曲 線 的 數(shù) 據(jù) 源。 該 方 法 在VB 或ACCESS 97 環(huán) 境 下 同 樣 適 用, 只 要 將 客 戶 程 序 稍 加 修 改 即 可。 下 面 就 如 何 實 現(xiàn)VFP 環(huán) 境 下 的 實 時 數(shù) 據(jù) 采 集 作 一 介 紹。

1. 建 立 數(shù) 據(jù) 采 集 服 務(wù) 程 序

---- 服 務(wù) 程 序 包 括 二 個 基 本 部 分: 其 一 是WinMain 入 口 函 數(shù), 它 主 要 完 成 一 此 初 始 化 任 務(wù), 建 立 一 個 名 為hwnd 的 原 始 數(shù) 據(jù) 顯 示 窗 口, 服 務(wù) 程 序 名 為PFBCdas。 其 二 是 應(yīng) 用 程 序 功 能 函 數(shù)MainWndProc。 下 面 是 程 序 清 單( 因 篇 幅 關(guān) 系, 在 此 省 去WinMain 函 數(shù))。
#define AD_Interval 1000    //采樣周期為 1000ms
#define  base   0x280          // A/D采樣板基地址
/*  base+k (k=1,2,…14)為A/D板各寄存器地址    */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int     i, j, k ,  AD_Status, idTimer;
int   AD_Data[8][16];         // A/D數(shù)據(jù)存儲單元 
int     DdeAdviseStatus=0;
char    buf[64], DDEbuf[2048];       //數(shù)據(jù)暫存緩沖器 
char    szAppName[]="PFBCdas";    //服務(wù)程序名
char    szDdeTopic[]="AD001";     //主題名 
char    szDdeItem[]="DATA";      // 數(shù)據(jù)項名
long FAR PASCAL _export MainWndProc(HWND, UINT, UINT, LONG) ;
long FAR PASCAL _export MainWndProc (HWND hwnd, UINT message, UINT 
                                  wParam, LONG lParam)    
//應(yīng)用程序功能函數(shù)   
     {
     ATOM        aAppName,aTopic;
     ATOM        aItem;
     GLOBALHANDLE        hDdeData;
     DDEDATA FAR *lpDdeData;
     static HWND hwndClient;
     switch (message)
        {       
     case WM_CREATE:
        idTimer=SetTimer(hwnd,NULL,AD_Interval,NULL); 
                         //打開定時器
        outportb(base+11,0x10);  //選擇軟件觸發(fā)方式
        outportb(base+9,1);      //選擇輸入信號放大倍數(shù)為10
        outportb(base+14,0);
        outportb(base+13,0);     //清A/D完成位
        outportb(base+10,0);    //選擇通道0
        return 0;
   case WM_TIMER:
        for(i=0;i<6;i++)
          for(j=0;j<16;j++)       //采樣點為6*16=96個
          {
           outportb(base+13,j);                  
           outportb(base+10,i);   
           outportb(base+12,0);     //啟動A/D轉(zhuǎn)換
           do AD_Status=inportb(base+5);
           while ((AD_Status&0x10)==0x10); 
//判轉(zhuǎn)換是否結(jié)束?                                                                 
AD_Data[i][j]=(inportb(base+5)&0x0f)*256+inportb(base+4); 
                /*  讀A/D轉(zhuǎn)換后的數(shù)字值  */
            }
           _strdate(buf);                 //取采樣日期
           strcpy(DDEbuf,buf);
           strcat(DDEbuf,",");
           _strtime(buf);                //取采樣時間
           strcat(DDEbuf,buf);
           strcat(DDEbuf,",");
           for(i=0;i<6;i++)
            for(j=0;j<16;j++)
            {
             char  temp[32];
             strcat(itoa(AD_Data[i][j],buf,10),",");
              /*各采樣數(shù)據(jù)之間以逗號分隔*/
             strcat(DDEbuf,buf);
             }
           if(DdeAdviseStatus!=0)      //如果建立了DDE服務(wù)
           {
           aItem = GlobalAddAtom (szDdeItem) ;
                       //添加DDE數(shù)據(jù)項為全局原子
           hDdeData = GlobalAlloc (GHND | GMEM_DDESHARE,
                         sizeof (DDEDATA) + strlen (DDEbuf)) ;
               /*給采樣數(shù)據(jù)分配全局內(nèi)存塊*/
           lpDdeData = (DDEDATA FAR *) GlobalLock (hDdeData) ;
           lpDdeData->fResponse = 0 ;
           lpDdeData->fRelease  = 1 ;
           lpDdeData->fAckReq   = 0 ;
           lpDdeData->cfFormat  = CF_TEXT ;
                          //采樣數(shù)據(jù)為文本格式
           lstrcpy ((LPSTR) lpDdeData->Value,DDEbuf) ;
               /*將采樣數(shù)據(jù)從緩沖器放至DDE內(nèi)存*/
           GlobalUnlock (hDdeData) ;
           if(!PostMessage(hwndClient,WM_DDE_DATA,hwnd,
              MAKELONG(hDdeData,aItem)))  //發(fā)送DDE數(shù)據(jù)
           {
            GlobalFree(hDdeData); 
                  //若發(fā)送失敗,則釋放資源
            GlobalDeleteAtom(aItem);        
             }
             }
            return 0;
   case WM_DDE_INITIATE:        //DDE初始化
          hwndClient=wParam;
          hdc=GetDC(hwnd);
          aAppName=GlobalAddAtom(szAppName);
          aTopic=GlobalAddAtom(szDdeTopic);
          if ((LOWORD (lParam) == NULL || LOWORD (lParam) == aAppName)
            && (HIWORD (lParam) == NULL || HIWORD (lParam) == aTopic))
          {           // 發(fā)送服務(wù)程序名和主題名
        SendMessage(hwndClient,WM_DDE_ACK,hwnd,
                       MAKELONG(aAppName,aTopic));
               } 
          else
          {
           GlobalDeleteAtom (aAppName) ;
           GlobalDeleteAtom (aTopic) ;
              }
           return 0 ;
   case WM_DDE_TERMINATE:     //關(guān)閉DDE服務(wù)
        hwndClient=wParam;      
        PostMessage (hwndClient, WM_DDE_TERMINATE, hwnd, 0L) ;
        return 0 ;
   case WM_DDE_ADVISE:        //建立DDE服務(wù)
        DdeAdviseStatus=1;           //已建立DDE服務(wù)標(biāo)志
        hwndClient=wParam;
        aItem=HIWORD(lParam);
        if(!PostMessage(hwndClient,  WM_DDE_ACK,  hwnd,
          MAKELONG(0x8000,aItem)))          //發(fā)送DDE應(yīng)答
        {
         GlobalDeleteAtom(aItem);
                }
         return 0;
   case WM_DESTROY:             //程序失敗處理
        PostQuitMessage (0) ;
        return 0 ;
           }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
     }

2. 建 立VFP 環(huán) 境 下 的 客 戶 端 程 序

---- 首 先 建 立 和 服 務(wù) 程 序 之 間 的 通 道, 然 后 將 服 務(wù) 程 序 傳 遞 來 的 數(shù) 據(jù) 放 至 字 符 串DATA 內(nèi), 再 通 過 自 定 義 函 數(shù)recdata 將 采 樣 數(shù) 據(jù) 存 入 數(shù) 據(jù) 庫 中 待 用。 下 面 是 客 戶 程 序 清 單。
PROCEDURE   getdata
PUBLIC  mchannel
mchannel = DDEInitiate('PFBCdas','AD001') 
&&建立客戶程序和服務(wù)程序間的通道 
IF   mchannel !=-1
  =DDEadvise(mchannel,'DATA','recdata',2)
                &&建立DDE熱連接,數(shù)據(jù)項為DATA
ENDIF
RETURN

PROCEDURE  recdata      &&用戶自定義函數(shù)
PARAMETERS  channel,action,item,data,format,status
PRIVATE   newdata
newdata=""
IF  action='ADVISE'        &&若連接成功
   newdata=DATA            &&將采樣數(shù)據(jù)傳遞至newdata
   do process with newdata      &&調(diào)用數(shù)據(jù)處理程序 
ELSE
   IF  action='TERMINATE'                       
        = DDETerminate(mchannel)   &&關(guān)閉通道
   ENDIF
ENDIF
RETURN

PROCEDURE    process
PARAMETER    newdata
PRIVATE  i,loc1,loc2
DIMENSION  gdata(98)
 * 從字符串 newdata中取采樣值
gdata(97)=CTOD(left(newdata,8))        &&取日期值
gdata(98)=SUBSTR(newdata,10,8)         &&取時間值
* 從字符串newdata的相鄰逗號間取采樣值,
                    并將采樣值轉(zhuǎn)化為毫伏值
FOR  i=3  TO  98
   loc1=ATC(",", newdata, (i-1))
   loc2=ATC(",", newdata, (i))
   gdata(i-2)=VAL(SUBSTR(newdata,(loc1+1),(loc2-loc1)))
                   *0.024414062
ENDFOR
IF  USED("onedata")
        SELECT  onedata
ELSE
        SELECT  0
USE  onedata  ALIAS  onedata
                    &&打開數(shù)據(jù)庫onedata
ENDIF
APPEND  FROM  ARRAY  gdata
               &&將數(shù)組gdata中的轉(zhuǎn)換數(shù)據(jù)添加到數(shù)據(jù)庫中 
RETURN  
---- 聯(lián) 系 地 址: 南 京 市 東 南 大 學(xué) 熱 能 工 程 研 究 所
---- 郵 編:210096
---- 聯(lián) 系 人: 周 衛(wèi) 平
---- 電 話:(025)3794191
---- EMAIL 地 址:qhye@seu.edu.cn 无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
西西人体一区二区| av高清不卡| 亚洲久久视频| 一区二区三区四区在线看| 日韩欧美三区| 日韩不卡在线| 久久国产视频网| 西西人体一区二区| 999国产精品999久久久久久| 日本精品另类| 国产精品外国| 日本久久成人网| 国内自拍视频一区二区三区| 美女国产精品| 久久婷婷一区| 亚洲综合在线电影| 亚洲作爱视频| 亚洲最新无码中文字幕久久| 91精品国产自产在线观看永久∴| 欧美成人久久| 免费日韩精品中文字幕视频在线| 日韩成人av影视| 国产精品久久久久久久免费观看| 日韩av免费| 亚洲精品韩国| 美女视频黄久久| 久久国产日韩| 视频一区中文字幕精品| 国产欧美精品| 91精品婷婷色在线观看| 亚洲精品一区二区在线播放∴| 国产精品久久久一区二区| 欧美日韩在线观看首页| 免费精品视频| 毛片在线网站| 免费看黄色91| 激情黄产视频在线免费观看| 日韩视频不卡| 美女视频黄久久| 爽好久久久欧美精品| 美女性感视频久久| 国产女优一区| 日韩a一区二区| 亚洲综合色婷婷在线观看| 国产一区二区精品久| 日韩视频不卡| 国产精品久久久久久久免费观看 | 日韩亚洲精品在线观看| 香蕉久久国产| 国产日产一区| 色爱综合网欧美| 999国产精品视频| 免费人成在线不卡| 欧美亚洲人成在线| 欧美国产一级| 久久三级中文| 日韩国产欧美一区二区| 亚洲精品美女| 国产精品日本| 尤物tv在线精品| 精品国产网站| 欧美一级一区| 喷白浆一区二区| 欧美~级网站不卡| 欧美丰满日韩| 欧美xxxx性| 久久国产视频网| 福利一区二区| 欧美一区二区三区久久精品| 三上悠亚国产精品一区二区三区 | 精品亚洲自拍| 999国产精品永久免费视频app| 亚洲综合专区| 模特精品在线| 影院欧美亚洲| 欧美+日本+国产+在线a∨观看| 成人欧美一区二区三区的电影| 蜜桃精品视频| 美日韩一区二区三区| 欧美亚洲三区| 久久国内精品自在自线400部| 最新国产精品视频| 丝袜亚洲另类欧美| 亚洲天堂日韩在线| 日韩中文字幕不卡| 久久xxxx| 日韩中文字幕一区二区三区| 久久成人国产| 日本成人中文字幕在线视频| 日韩高清国产一区在线| 日韩不卡一区二区| 国产精品美女在线观看直播| 国产欧美大片| 久久97视频| av免费不卡国产观看| 日韩在线中文| 免费视频一区三区| 亚洲男女av一区二区| 激情综合在线| 中文字幕av一区二区三区四区| 日韩福利视频导航| 久久精品国产99| 国产探花在线精品一区二区| 首页亚洲欧美制服丝腿| 人在线成免费视频| 精品亚洲精品| 免费成人网www| 国产精品久久久久久久免费观看| 久久激情中文| 视频在线观看一区二区三区| 日韩高清在线一区| 高清一区二区三区av| 蜜桃精品在线| 日韩专区在线视频| 免费亚洲婷婷| 久久久精品五月天| 激情婷婷亚洲| 日本综合视频| 97精品在线| 91久久亚洲| 麻豆久久久久久久| 国产高清一区| 日本少妇一区二区| 日韩av免费| 日本成人精品| 久久精品导航| 国产日本久久| 黄色国产精品| 九九99久久精品在免费线bt| 亚洲精品va| 精品网站aaa| 亚洲一区二区三区高清不卡| 欧美亚洲三区| 欧美日韩国产亚洲一区| 国产日韩视频在线| 欧美日韩在线网站| 国产亚洲精品精品国产亚洲综合| 久久久久一区| 国产欧美日韩精品一区二区三区| 亚洲一级网站| 麻豆久久久久久久| 免费视频一区二区| 久久久精品午夜少妇| 国产精品成人**免费视频| 91久久黄色| 日本欧美不卡| 免费一二一二在线视频| 丝袜美腿亚洲一区| 久久久国产精品网站| 国产精品字幕| 中文字幕av一区二区三区四区| 久久精品欧洲| 日韩在线一二三区| 精品久久中文| 热久久国产精品| 中文一区一区三区高中清不卡免费| 亚洲不卡av不卡一区二区| 日韩中文字幕亚洲一区二区va在线| 国产精品中文| 黄色av日韩| 日本91福利区| 久久精品免费看| 91精品视频一区二区| 亚洲乱亚洲高清| 亚洲视频电影在线| 亚洲综合欧美| 欧美日韩国产一区精品一区| 日韩免费视频| 涩涩av在线| 韩国久久久久久| av高清不卡| 亚洲成av在线| 国产成人精品亚洲日本在线观看| 国产伦乱精品| 欧美亚洲专区| 91精品国产经典在线观看| 久久国产精品99国产| 99国内精品| 狠狠干成人综合网| 在线亚洲精品| 国产精品普通话对白| 国产精品免费看| 免费在线观看日韩欧美| 免费成人av在线播放| 天堂av在线一区| 蜜桃视频一区二区三区| 一区二区91| 日韩va欧美va亚洲va久久| 日韩国产欧美一区二区三区| 日韩激情一二三区| 国产精品久久久亚洲一区| 日韩av不卡在线观看| 蜜桃久久久久| 亚洲一级黄色| 91精品国产乱码久久久久久久 | 99视频+国产日韩欧美| 日本蜜桃在线观看视频| 精品国产亚洲一区二区在线观看| 青青草精品视频| 欧美一区久久|