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);