VFP»·¾³ÏÂʵʱÊý¾Ý²É¼¯µÄʵÏÖ -µçÄÔ×ÊÁÏ

µçÄÔ×ÊÁÏ Ê±¼ä£º2019-01-01 ÎÒҪͶ¸å
¡¾www.unjs.com - µçÄÔ×ÊÁÏ¡¿

   

    VFP×÷ΪÐÂÒ»´úÊý¾Ý¿â¹ÜÀíϵͳ£¬ÔÚÊý¾ÝµÄ´æÈ¡¡¢±à¼­¡¢ÏÔʾ¡¢´¦ÀíµÈ·½Ãæ¾ßÓÐÇ¿´óºÍ·á¸»µÄ¹¤¾ß£¬ÔÚ¹úÄÚÍâµÃµ½Á˹㷺ӦÓã¬

VFP»·¾³ÏÂʵʱÊý¾Ý²É¼¯µÄʵÏÖ

¡£ÔÚÐí¶à¹¤ÒµÓ¦ÓÃÖУ¬ÍùÍùÒª¶ÔÏÖ³¡Ä£ÄâÊý¾Ý½øÐÐA/Dת»»ÇÒʵʱ´¦Àí£¬ÓÉÓÚVFP²»ÄܶԶ˿ڽøÐÐÖ±½Ó·ÃÎÊ£¬Òò¶øÎÞ·¨ÊµÏÖÊý¾Ý²É¼¯¡£ÐÒºÃVFPÌṩÁËDDE¹¦ÄÜ¡£DDEÊÇWindowsÓ¦ÓóÌÐòÖ®¼ä½øÐж¯Ì¬ÐÅÏ¢´«µÝºÍ¹²ÏíµÄÒ»¸öÏûϢЭÒ飬ÀûÓÃDDE¿ÉʵÏÖWindowsµÄ·þÎñ³ÌÐòºÍ¿Í»§³ÌÐòµÄÏ໥¶ÀÁ¢ÔËÐУ¬¾ßÓкܺõÄʵʱÐÔ¡£ÔÚʵ¼ùÖУ¬ÎÒÃÇÀûÓø߼¶ÓïÑÔBorLand C++ for WindowsʵÏÖ96·A/DÊý¾Ý²É¼¯£¬²¢ÒÔ´ËΪ·þÎñ³ÌÐò£»ÔÚVFP»·¾³Ï½¨Á¢¿Í»§³ÌÐò£¬½«·þÎñ³ÌÐò´«µÝ¹ýÀ´µÄÊý¾Ý¼°Ê±½øÐÐÔËËã´¦Àíºó£¬´æÈëÊý¾Ý¿â£¬²¢×÷Ϊ¸÷ÖÖ±íµ¥¡¢±¨±í¡¢ÇúÏßµÄÊý¾ÝÔ´¡£¸Ã·½·¨ÔÚVB»òACCESS97»·¾³ÏÂͬÑùÊÊÓã¬Ö»Òª½«¿Í»§³ÌÐòÉÔ¼ÓÐ޸ļ´¿É¡£ÏÂÃæ¾ÍÈçºÎʵÏÖVFP»·¾³ÏµÄʵʱÊý¾Ý²É¼¯×÷Ò»½éÉÜ¡£1.½¨Á¢Êý¾Ý²É¼¯·þÎñ³ÌÐò

    ----·þÎñ³ÌÐò°üÀ¨¶þ¸ö»ù±¾²¿·Ö£ºÆäÒ»ÊÇWinMainÈë¿Úº¯Êý£¬ËüÖ÷ÒªÍê³ÉÒ»´Ë³õʼ»¯ÈÎÎñ£¬½¨Á¢Ò»¸öÃûΪhwndµÄԭʼÊý¾ÝÏÔʾ´°¿Ú£¬·þÎñ³ÌÐòÃûΪPFBCdas¡£Æä¶þÊÇÓ¦ÓóÌÐò¹¦Äܺ¯ÊýMainWndProc¡£ÏÂÃæÊdzÌÐòÇåµ¥£¨Òòƪ·ù¹ØÏµ£¬ÔÚ´ËʡȥWinMainº¯Êý£©¡£

    #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Êý¾Ý´æ´¢µ¥Ôª

    int DdeAdviseStatus=0;

    char buf[64], DDEbuf[2048]; //Êý¾ÝÔݴ滺³åÆ÷

    char szAppName[]="PFBCdas"; //·þÎñ³ÌÐòÃû

    char szDdeTopic[]="AD001"; //Ö÷ÌâÃû

    char szDdeItem[]="DATA"; // Êý¾ÝÏîÃû

    long FAR PASCAL _export MainWndProc(HWND, UINT, UINT, LONG) ;

    long FAR PASCAL _export MainWndProc (HWND hwnd, UINT message, UINT

    wParam, LONG lParam)

    //Ó¦ÓóÌÐò¹¦Äܺ¯Êý

    {

    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); //Ñ¡ÔñÈí¼þ´¥·¢·½Ê½

    outportb(base+9,1); //Ñ¡ÔñÊäÈëÐźŷŴó±¶ÊýΪ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ת»»

    do AD_Status=inportb(base+5);

    while ((AD_Status&0x10)==0x10);

    //ÅÐת»»ÊÇ·ñ½áÊø?

    AD_Data[i][j]=(inportb(base+5)&0x0f)*256+inportb(base+4);

    /* ¶ÁA/Dת»»ºóµÄÊý×ÖÖµ */

    }

    _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),",");

    /*¸÷²ÉÑùÊý¾ÝÖ®¼äÒÔ¶ººÅ·Ö¸ô*/

    strcat(DDEbuf,buf);

    }

    if(DdeAdviseStatus!=0) //Èç¹û½¨Á¢ÁËDDE·þÎñ

    {

    aItem = GlobalAddAtom (szDdeItem) ;

    //Ìí¼ÓDDEÊý¾ÝÏîΪȫ¾ÖÔ­×Ó

    hDdeData = GlobalAlloc (GHND | GMEM_DDESHARE,

    sizeof (DDEDATA) + strlen (DDEbuf)) ;

    /*¸ø²ÉÑùÊý¾Ý·ÖÅäÈ«¾ÖÄÚ´æ¿é*/

    lpDdeData = (DDEDATA FAR *) GlobalLock (hDdeData) ;

    lpDdeData->fResponse = 0 ;

    lpDdeData->fRelease = 1 ;

    lpDdeData->fAckReq = 0 ;

    lpDdeData->cfFormat = CF_TEXT ;

    //²ÉÑùÊý¾ÝΪÎı¾¸ñʽ

    lstrcpy ((LPSTR) lpDdeData->Value,DDEbuf) ;

    /*½«²ÉÑùÊý¾Ý´Ó»º³åÆ÷·ÅÖÁDDEÄÚ´æ*/

    GlobalUnlock (hDdeData) ;

    if(!PostMessage(hwndClient,WM_DDE_DATA,hwnd,

    MAKELONG(hDdeData,aItem))) //·¢ËÍDDEÊý¾Ý

    {

    GlobalFree(hDdeData);

    //Èô·¢ËÍʧ°Ü£¬ÔòÊÍ·Å×ÊÔ´

    GlobalDeleteAtom(aItem);

    }

    }

    return 0;

    case WM_DDE_INITIATE: //DDE³õʼ»¯

    hwndClient=wParam;

    hdc=GetDC(hwnd);

×îÐÂÎÄÕÂ