ÏÃÃÅ3377ÌåÓý¹«Ë¾µÄAIϵÁÐÒDZíÔÚ¹¤ÒµÏÖ³¡Ó¦Óù㷺£¬µ«¹ØÓÚʹÓÃDelphi¿ª·¢AIÒDZíµÄ¼à¿ØÈí¼þµÄ×ÊÁÏÈ´ºÜÉÙ£¬±¾ÎÄƾ¾Ý×Ô¼º¶ÔAIÒDZíÉÏλ»ú¼à¿ØÈí¼þµÄ¿ª·¢¾Àú£¬Ïêϸ½éÉÜÁË»ùÓÚDelphi¿ª·¢AIÒDZíͨÓóÌÐòµÄÀú³Ì£¬ÆäÖаüÀ¨¹ØÓÚAIÒDZíÊý¾ÝµÄ¶ÁдµÄ³ÌÐò½éÉÜÒÔ¼°ÔÚÊý¾Ý¶ÁдÀú³ÌӦעÒâµÄһЩÎÊÌâ¡£
Òªº¦´Ê£ºDelphi AIÒÇ±í ´®ÐÐͨѶ
ÒýÑÔ£ºÏÃÃÅ3377ÌåÓý¹«Ë¾µÄAIϵÁÐÒDZí¾ßÓй¦Ð§Ç¿´ó£¬²Ù×÷¼òµ¥£¬¿ØÖÆÐÔÄܺõÈÌص㣬²¢ÒÑÔÚ¹¤ÒµÏÖ³¡»ñµÃÁ˹㷺µÄÓ¦Óá£È»¶øÒDZíÔÚʵ¼ÊµÄ¹¤ÒµÓ¦ÓÃÖУ¬ÍùÍùÐèÒªÀûÓÃÅÌËã»ú¶ÔÆäËùÊÕÂÞµÄÊý¾Ý½øÐжÁÈ¡¡¢Éú´æ£¬ÒÔ¼°¹ØÓÚÒDZí×ÔÉí²ÎÊý½øÐжÁÈ¡ÓëÉ趨¡£Îª´Ë3377ÌåÓý¹«Ë¾ÎªÓû§ÌṩÁËAIϵÁÐÒDZíµÄ´®ÐÐͨѶ½Ó¿ÚÄ£¿é£¬×°ÖôËÄ£¿éºó£¬Óû§Äܹ»±ãµ±µØͨ¹ýÅÌËã»ú232¿ÚʵÏÖÓëÒDZíµÄÊý¾Ý½»»»¡£±¾ÎľÍAI-708PÒDZí×÷Ϊ¹æ·¶£¬Ïêϸ½éÉÜÈçºÎÀûÓÃDelphi¿ª·¢AIϵÁÐÒDZíµÄÉÏλ»ú¼à¿ØÈí¼þ¡£
1£®¾ßÌåʵÏÖ
AIÒDZíÊÇͨ¹ýÅÌËã»ú´®¿ÚÓëÅÌËã»úÁ¬½ÓµÄ£¬Æä¾ßÓÐ×Ô¼ºµÄ´®ÐÐͨѶÐÒ飬Èí¼þ¿ÉÒÔƾ¾Ý´ËͨѶÐÒéʵÏÖ¶ÔÒDZíµÄÊý¾Ý¶ÁÈ¡ÓëÉ趨£¬ÒÔ¼°¶ÔÒDZí״̬µÄ¶ÁÈ¡ÓëÉ趨¡£ÍøÉϹØÓÚAIÒDZíͨѶ³ÌÐòµÄÀý³Ì¶àΪVBÌåÀý£¬²¢ÇÒ³ÌÐò½ÏΪ¼òµ¥£¬¹¦Ð§½ÏΪ¼òµ¥£¬µ¹ÔËÓÚ¶þ´Î¶ÔÒDZí½øÐÐÈ«Ã濪·¢¡£Ôڴ˱ÊÕß×Ô¼ºÕë¶Ô708PÐÍζȿØÖÆÆ÷ÌåÀýÁËÒ»¸öAIÒDZíµÄÉÏλ»ú¼à¿ØÈí¼þÒÔʵÏÖÅÌËã»ú¶ÔAIÒDZí¼à¿Ø¡£±¾ÎÄƾ¾Ý×Ô¼ºµÄ¿ª·¢¾Àú£¬Ïêϸ½éÉÜÁË»ùÓÚdelphi¿ª·¢AIÒDZíÉÏλ»úͨÓóÌÐòµÄ¿ª·¢È«Àú³Ì£¬ÒÔ¼°ÔÚ¿ª·¢Àú³ÌÖÐËùӦעÒâµÄһЩÊÂÏî¡£
1.1³ÌÐò¹¦Ð§½éÉÜ
±¾Èí¼þΪAIÒDZíͨÓüà¿ØÈí¼þ£¬Æä°üÀ¨ÒÔϹ¦Ð§£º
1£® AIÒDZí¼ì²âÓëʶ±ð
2£® AIÒDZí²ÎÊýµÄ¶ÁÈ¡ÓëÉ趨
3£® AIÒDZíµÄ״̬¶ÁÈ¡ÓëÉ趨
ÔÚÏÂÃ潫¶ÔÒÔÉϹ¦Ð§µÄʵÏÖ×÷ÏàÓ¦½éÉÜ¡£
1.2¹¦Ð§ÊµÏÖ
ÔÚ¿ª·¢Àú³ÌÖУ¬ÎªÁËËõ¶Ì¿ª·¢ÖÜÆÚ£¬Èí¼þÖÐʹÓÃÁ˵ÚÈý·½¿Ø¼þSPCOMMʵÏÖ´®ÐÐͨѶ¹¦Ð§£¬ËäÈ»Èç¹û¶ÁÕ߸ÐÐËȤ¿ÉÒÔ×Ô¼ºÊµÑéʹÓÃWINDOWS APIº¯Êý×ÔÐÐÌåÀý´Ë¹¦Ð§£¬¹ØÓÚWINDOWS APIº¯ÊýÒÔ¼°¿Ø¼þSPCOMMµÄʹÓÃÒªÁ죬ÔÚ±¾ÎÄÖв»×÷½éÉÜ£¬¶ÁÕß¿ÉÒԲο´Ïà¹Ø×ÊÁÏ¡£ÔÚ½éÉܳÌÐò¹¦Ð§Ç°±ØÐëÏÈ˵Ã÷Á½¸öÀú³Ì£º
A. ¶ÁÒDZí²ÎÊýÀú³ÌTAI.ReadData(var msg: TMessage)³ÌÐò´úÂëÈçÏ£º
var
NO1,NO2,NO3,NO4,NO5,NO6,NO7,NO8:Cardinal;
s : string;
p : PChar;
begin
NO1 := 128 + msg.WParam;//¹ØÓÚ¶ÁÊý¾ÝÀú³ÌWParamÉú´æÒª¶ÁÒDZíµÄµØµã
NO2 := NO1;
NO3 := 82;
NO4 := msg.LParam; //¹ØÓÚ¶ÁÊý¾ÝÀú³ÌLParamÉú´æÒª¶ÁµÄ²ÎÊýµÄ²ÎÊýµØµã
NO5 := 0;
NO6 := 0;
NO7 := 82 + msg.WParam;
NO8 := msg.LParam;
s := chr(NO1)+chr(NO2)+chr(NO3)+chr(NO4)+chr(NO5)+chr(NO6)+chr(NO7)+chr(NO8);
p := PChar(s);
Comm1.WriteCommData(p,Length(s));
end;
B. дÒDZí²ÎÊýÀú³ÌTAI.SetData(var msg: TMessage) ³ÌÐò´úÂëÈçÏ£º
var
NO1,NO2,NO3,NO4,NO5,NO6,NO7,NO8:Integer;
s:string;
p:PChar;
begin
NO1 := 128 + Meter_Addr;// Meter_AddrΪȫ¾Ö±äÁ¿£¬Éú´æÒDZíµØµã
NO2 := NO1;
NO3 := 67;
NO4 := msg.WParam;//¹ØÓÚдÀú³ÌWParamÉú´æҪд²ÎÊýµÄ²ÎÊýµØµã
NO5 := (msg.LParam mod 256);// ¹ØÓÚдÀú³ÌLParamÉú´æҪд²ÎÊýÖµ
NO6 := (msg.LParam div 256);
NO7 := ((67 + Meter_Addr + msg.LParam + msg.WParam *256) mod 256);
NO8 := ((67 + Meter_Addr + msg.LParam + msg.WParam *256) div 256);
s := chr(NO1)+chr(NO2)+chr(NO3)+chr(NO4)+chr(NO5)+chr(NO6)+chr(NO7)+chr(NO8);
p := PChar(s);
Comm1.WriteCommData(p,Length(s));
end;
ÔÚ³ÌÐòÖнç˵Á½¸öÏûÏ¢³£Á¿£º
WM_Set = WM_USER + 100
WM_Read = WM_USER + 200
ͨ¹ý·¢ËÍÒÔÉÏÁ½¸öÏûÏ¢²¢¸½´øÏàÓ¦µÄ²ÎÊý£¬ÊµÏÖ¶ÔÒÔÉÏÁ½¸öÀú³ÌµÄŲÓ㬴ӶøʵÏÖ¶ÔÏûÏ¢¶ÔÒDZíÊý¾ÝµÄ¶ÁÈ¡ÓëÉ趨¡£ÒÔÉÏÁ½¸öÀú³Ìƾ¾ÝAIÒDZíͨѶÐÒ飬ÅÌËã³öÿһλ·¢Ë͵ÄÊý¾Ý£¬È»ºó×éºÏ³É×Ö·û´®£¬Ò»´ÎÐÔ·¢Ë͸øÒÇ±í¡£Ã¿¸ö²ÎÊý´ú±íµÄÒâÒå¼û³ÌÐò½âÊÍ¡£
1.2.1 AIÒDZí¼ì²â
ÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÅÌËã»úÍùÍù²»Ö¹Á¬½ÓÒ»¸öÒÇ±í£¬ËùÒÔÐèÒª¶Ô²î±ðµØµãÒDZí½øÐмìË÷ºÍʶ±ð£º
¹ØÓÚÒDZí¼ìË÷ÊÇͨ¹ý¶ÔµØµãµÄ±æʶʵÏֵģ¬ÀûÓÃAIͨѶÐÒéµÄ¶ÁÐж¯¶ÁÈ¡²î±ðµØµãµÄÒDZíµÄµØµã²ÎÊý£¬Èç¹û´Ëʱ»á·µ»ØÖµ£¬²¢ÇÒÆä¶Á»ØµÄÊý¾ÝÓë·¢ËÍËùÉ趨µÄµØµã±äÁ¿ÖµÏàµÈ£¬ÔòÈ·¶¨¼ìË÷µ½´ËµØµãµÄÒÇ±í£¬²¢Ìí¼Óµ½ÒDZíÐÐÁÐÖС£
¹ØÓÚÒDZíµÄʶ±ð¼´¶ÔÒѱ£´æµÄÒDZíµÄʶ±ðµÄ£¬¼´ÒDZí±ØÐëÓÐÆäÃ÷È·ÇÒ¶ÀÁ¢µÄµØµã¡£Ê¶±ðÒDZíÒªº¦ÔÚʶ±ðÒDZíµÄ¶ÎÊý£¨µ¥¶Î»ò¶à¶Î£©£¬¹ØÓÚ²î±ð¶ÎÊýµÄÒÇ±í£¬ÆäijЩ²ÎÊýµØµãËù¶ÔÓ¦µÄ²ÎÊýÒâÒåÓÐËù²î±ð¡£ÔÚÈí¼þÖÐÊÇͨ¹ý¶ÁÈ¡Ò»¸öÀι̲ÎÊýµØµãµÄÊý¾ÝʵÏֵģ¬ºÃ±È˵£º¹ØÓÚ¶à¶ÎÒDZíÀ´Ëµ£¬¶Áȡijһ¶ÎµÄÊý¾Ýʱ£¨Æä²ÎÊýµØµãͨ³£¶¼»á´óÓÚ25£©£¬ÒDZí»á·µ»ØÏàÓ¦²ÎÊýµØµãµÄ·µ»ØÖµ£¬È»¶ø¹ØÓÚµ¥¶ÎÒÇ±í£¬Ïò¸ÃµØµã·¢ËÍÊý¾ÝÒÇ±í²¢²»»á×÷Èκη´Ó¦¡£
1.2.2 AIÒDZí²ÎÊý¶ÁÈ¡
Èí¼þÄܹ»¶ÁÈ¡ÒDZíÄÚËùÓпɶÁÈ¡µÄÊý¾Ý£¬°üÀ¨ÊÕÂÞµÄÊý¾Ý¡¢¿ØÖÆÊý¾ÝÒÔ¼°¶ÔÒDZíµÄÉ趨¡£×Ô¶¯Ê¶±ðСÊýµãλÊý£¬°´ÒDZí±íÅÌÏÔʾ»¨ÑùÏÔʾ¶ÁÈ¡µÄÊý¾Ý¡£¹ØÓÚÒDZíµÄ¶ÁÈ¡Àú³ÌʵÏÖ¿ÉÒԲο´ÒÔÉϵÄReadDataÀú³ÌÒÔ¼°3377ÌåÓýµÄÒDZíͨѶÐÒé¡£ÐèÒªÖ¸³öµÄÊÇÔÚ¶ÁÈ¡Àú³ÌÖÐÐèҪעÒâ¶ÔijЩÌØÊâÊý¾ÝµÄ´¦Àí£¬ÆäÖаüÀ¨Ð¡ÊýµãµÄ´¦ÀíÒÔ¼°¸ºÊýµÄ´¦Àí¡£
A. СÊýµãµÄ´¦Àí
ÔÚÒDZíÊý¾ÝµÄ¶ÁÈ¡Àú³ÌÖУ¬µ±Äã»ñµÃÁËÒDZíµÄ·µ»ØÊý¾Ýºó£¬±ØÐëƾ¾ÝAIͨѶÐÒé¶Ô·µ»ØµÄÊý¾Ý½øÐÐÆÊÎöºÍÅÌËã¡£ÆäÖб£´æÒ»¸öÎÊÌ⣬ͨ¹ýÅÌËãºóÓеÄÊý¾Ý¿ÉÄÜÊÇʵ¼ÊÊý¾ÝµÄ10±¶£¬¶øÓеÄÊý¾Ý¿ÉÄÜÓëʵ¼ÊÊý¾ÝÏàͬ¡£Æ¾¾Ý±ÊÕßµÄÊӲ죬ÔÚÒDZí˵Ã÷ÊéÖÐÔÊÐí´øСÊýµãµÄÊý¾Ý¶¼ÐèÒª½øÐÐ10±¶´¦Àí£¬¼´½«·µ»ØÊý¾ÝÅÌËã»ñµÃµÄ½á¹ûÕæºó×÷³ý10ÅÌËã²Å»ª»ñµÃÕýÈ·µÄÊý¾Ý¡£
B. ¸ºÊýµÄ´¦Àí
ÔÚÒDZíÊý¾ÝµÄ¶ÁÈ¡Àú³ÌÖУ¬ÍùÍù»áÅöµ½¸ºÊýµÄÎÊÌ⣬´Ëʱƾ¾ÝAIͨѶÐÒéÅÌËã»ñµÃµÄÊý¾ÝÍùÍù»áºÜ´ó²¢ÇÒÊýÖµÓëʵ¼ÊÊýÖµ²»·û¡£¹ØÓÚÕâÖÖСÓÚÁãµÄÊý¾ÝÐèÒª½øÐиºÊý´¦Àí¡£¿ÉÊÇÈçºÎʶ±ðÒ»¸ö¸ºÊýÄØ£¿Æäʵ¹ØÓÚ¸ºÊý¶øÑÔ£¬µ±Æä±»¶ÁȡʱÆä¸ßλÍùÍù´óÓÚ127£¬ÓÚÊÇÎÒÃÇ¿ÉÒÔͨ¹ýÅжϸßλÀ´Ê¶±ð¸ºÊý¡£µ±Ê¶±ðµ½¸ºÊýºó£¬ÎÒÃÇÒªÏÔʾÕýÈ·µÄÊý¾Ý¾Í±£´æÒ»¸öת»»£¬´Ó¶þ½øÖƵĽǶÈÆÊÎö¿ÉÖªÒÇ±í·µ»ØµÄÊý¾ÝµÄ¸ßλµÄzui¸ßλΪ±ê¼Ç룬µ±ÆäΪ0ʱ´ú±íÕýÊý£¬µ±ÆäΪ1ʱ´ú±í¸ºÊý¡£Æ¾¾ÝÒÔÉÏÆÊÎö£¬Èç¹ûÎÒÃÇÐèÒª»ñµÃ¸ºÊýµÄÊýÖµ£¬Ö»Ð轫ÅÌËã³öÀ´µÄÊý¾Ý¼õÈ¥65536¼´¿É¡£
ÒÔÏÂÊǽÓÊÕÀú³ÌÖеÄһЩ´¦Àí³ÌÐò£º
½ÓÊÕÀú³Ì£º
var
p : PChar;
begin
p := Buffer;
bufferΪSPCOMMµÄ½ÓÊÕÀú³ÌÖÐËù½ÓÊÕµ½µÄÊý¾Ý¡£
¸ºÊý´¦ÀíÀú³Ì£º
if (p7>127 then
ReData:=((p6+p7*256)-65536)/10
else
ReData := (p6+p7*256)/10;
p6¡¢p7ÊǽÓÊÕµ½Êý¾ÝµÄµÚ7λºÍµÚ8λµÄת»¯ÎªÕûÊýºóµÄÖµ£¬¿ÉÒÔͨ¹ýp6:=ord(p[6])£¨pΪ½ÓÊÕÀú³ÌÖеÄp£©»ñµÃ¡£Æ¾¾ÝÒÔÉÏÀú³Ì»ñµÃµÄÊý¾ÝReDataÔÙ¾¹ýСÊýµãÆÊÎö¼°¼´¿É»ñµÃÓëÒDZíÒ»ÖµÄÊý¾Ý¡£
1.2.3 ״̬µÄ¶ÁÈ¡
ÒDZíµÄ״̬°üÀ¨ÔËÐÐ״̬¼°±¨¾¯×´Ì¬£¬¿ÉÒÔͨ¹ý¶ÁÈ¡ÒDZíµÄµÚ21ºÅ²ÎÊýͬʱ»ñÈ¡¡£
¶ÁÈ¡21ºÅ²ÎÊýʱ£¬ÒÇ±í·µ»ØµÄ²ÎÊýÖµÊÇϵͳÒDZíµÄÔËÐÐ״ֵ̬£¬ÓÉÓÚ¸÷¸öλ´ú±íµÄÒDZíÔËÐÐ״̬²î±ð£¬ËùÒÔÐèÒª¶ÔÆä½øÐÐÆÊÎö¡£·µ»ØÊý¾ÝµÄµÚ3λ´ú±íֹͣ룬µÚ2λ´ú±íÔÝͣ룬ÆäÓàµÄ0λºÍ1λ´ú±íÔËÐÐλ¡£Ö»Òª2ºÍ3λ²»Îª1¼´´ú±íÒÇ±í´¦ÓÚÔËÐÐ״̬¡£ËùÒÔµ±ÎÒÃǼì²âÒDZíµÄÔËÐÐ״̬ʱ£¬ÎÒÃÇÖ»ÐèÒª¶ÔÕâЩλ½øÐÐʶ±ð¼´¿É¡£
¶ÁÈ¡21ºÅ²ÎÊýʱ£¬ÒDZíͬʱ»á·µ»Ø±¨¾¯×´Ì¬£¬Í¨¹ý¶Ô±¨¾¯×´Ì¬Î»µÄʶ±ð£¬¿ÉÒÔ»ñÈ¡ÒDZíµÄ±¨¾¯×´Ì¬¡£MVÖµµÄ0¡¢1¡¢2¡¢3λ»®·Ö´ú±íÒDZíµÄÉÏÏÞ±¨¾¯¡¢ÏÂÏÞ±¨¾¯¡¢ÕýÆ«²î±¨¾¯¡¢¸ºÆ«²î±¨¾¯×´Ì¬£¬ÆäΪ1ÓÐЧ¡£
1.2.4 ²ÎÊýÉ趨
¹ØÓÚ²ÎÊýµÄÉ趨¿ÉÒԲο¼ÒDZíͨѶÐÒéÒÔ¼°Àú³ÌSetData£¬ÆäÐèҪעÒâµÄÊÇÆäÊý¾ÝµÄÅÌË㡢СÊýµã´¦ÀíÒÔ¼°¸ºÊýµÄ´¦Àí¡£Æä´¦Àí·½·¨ÓëÊý¾ÝµÄ¶ÁÈ¡»ùÄÚĻͬ£¬Ôڴ˲»ÔÙÏêϸ½²Ðð¡£
2£®½áÓï
ͨ¹ýÒÔÉÏÒªÁì¿ÉÒÔʵÏÖÒDZíÓëÅÌËã»úµÄÊý¾Ý½»»»£¬²¢ÇÒ¾ßÓгÌÐò¼òµ¥¡¢Ä£¿é»¯¡¢ÔËÐпɿ¿¡¢¹¦Ð§È«ÃæµÈÌص㡣¸Ã³ÌÐòÔ´´úÂëÒѱ»±¾¹«Ë¾¹ã·ºÓ¦ÓÃÓÚAIÒDZíµÄ¹¤ÒµÓ¦ÓÃÈí¼þÖС£