⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcommsenddatathread_unit.pas

📁 这是一个非常实用的实时串口通讯程序
💻 PAS
📖 第 1 页 / 共 5 页
字号:
                                                       iLength := 0;
                                                       CopyMemory(@iLength,@CommNetDriver.GDataBuf,2);
                                                       iHead := FindBufHead(@CommNetDriver.GDataBuf[3],iLength);
                                                       CommNetDriver.m_hSection.Release;
                                                       if (iHead>0) then
                                                       begin
                                                         if (CommNetDriver.GDataBuf[iHead+1]=RIGHT_CALL) then
                                                         begin
                                                           crc16:=chkcrc16(4,@CommNetDriver.GDataBuf[iHead]);
                                                           CopyMemory(@crc161,@CommNetDriver.GDataBuf[iHead+4],2);
                                                           if (crc16=crc161) then
                                                           begin
                                                             SETUPDOWN[TCTLINK[iContrl]]:=true;
                                                             SYSTIMEDOWN[TCTLINK[iContrl]] :=false;
                                                             break;
                                                           end
                                                           else
                                                           begin
                                                             ZeroMemory(@bSendDataBuf,1024);
                                                             bSendDataBuf[1] := $b4;
                                                             CommNetDriver.ClientComm.SendData(@bSendDataBuf,1);
                                                           end;
                                                         end;
                                                       end;
                                                     end;
                                                   end;
                                               end;
                                             end;

                                           $01: //账户查询请求
                                             begin

                                             end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                           $02://打开账户请求
                                             begin
                                             begin
                                               In_Pay :=false;
                                               in_ServPay :=false;
                                               //Open_Pay :=false;
                                               IsOperCard :=false;
                                               NowOper :=0;
                                               NowPayNo :=0;

                                               crc16 := chkcrc16(9,@CommNetDriver.GDataBuf[iHead]);
                                               CopyMemory(@crc161,@CommNetDriver.GDataBuf[iHead+9],2);
                                               //Main_Form.Edit2.text :=IntTostr(strToint(Main_Form.Edit2.Text)+1);
                                               if (crc16<>crc161) then
                                                  begin
                                                    //Main_Form.Edit8.text :=IntTostr(strToint(Main_Form.Edit8.Text)+1);
                                                    bSendDataBuf[1] := ERROR_CALL;
                                                    nLen :=CommNetDriver.ClientComm.SendData(@bSendDataBuf,1);
                                                    if (nLen<=0) then
                                                       CommNetDriver.ClientComm.SendData(@bSendDataBuf,1);
                                                  end
                                               else
                                                  begin
                                                     ZeroMemory(@bSendDataBuf,1024);
                                                     bSendDataBuf[1] :=$69;
                                                   // Main_Form.Edit3.text := IntTostr(Strtoint(Main_Form.Edit3.text)+1);

                                                     nLen := CommNetDriver.ClientComm.SendData(@bSendDataBuf,1);
                                                     if (nLen<=0) then
                                                       CommNetDriver.ClientComm.SendData(@bSendDataBuf,1);
                                                     With GLBDataModule.PDADOQuery do
                                                     begin
                                                        CopyMemory(@bSendDataBuf,@CommNetDriver.GDataBuf[iHead+4],4);
                                                        //若未反则不用进行
                                                        {bSendDataBuf[5]:=bSendDataBuf[1];
                                                        bSendDataBuf[1]:=bSendDataBuf[4];
                                                        bSendDataBuf[4]:=bSendDataBuf[2];
                                                        bSendDataBuf[2]:=bSendDataBuf[3];
                                                        bSendDataBuf[3]:=bSendDataBuf[4];
                                                        bSendDataBuf[4]:=bSendDataBuf[5];}
                                                        CopyMemory(@iAccount,@bSendDataBuf,4);

                                                        /////////判断POS机类型//////////////
                                                        Close;
                                                        Sql.Text :='Select CT_Type From CTMachineTAB '+
                                                                   ' WHERE (CTMachineTAB.CT_CommandNum = 1) AND '+
                                                                   '       (CTMachineTAB.CT_TCPathNUM = '+IntToStr(CommNetDriver.GDataBuf[iHead+2])+')'+
                                                                   '       AND (CTMachineTAB.CT_MachineNUM= '+IntToStr(CommNetDriver.GDataBuf[iHead+3])+') ';
                                                        try
                                                          Open;
                                                          PosType :=FieldbyName('CT_type').AsInteger;
                                                          CardNo := iAccount;
                                                          /////查询出纳机数组
                                                          if PosType =2 then
                                                          begin
                                                            NowPayNo:=0;
                                                            for PayCount :=1 to PayTotalCount do
                                                            begin
                                                              ///伺服机
                                                              if (ServPay_Path =CommNetDriver.GDataBuf[iHead+2]) and
                                                               (ServPay_num=CommNetDriver.GDataBuf[iHead+3]) then
                                                              begin
                                                                //////////////////////////
                                                                In_pay :=true;
                                                                In_Servpay :=true;
                                                                NowPayNo :=PayCount;   //当前伺服机号
                                                                break;
                                                                ///////////////////////////
                                                              end
                                                              else
                                                              begin
                                                                //出纳
                                                                if (PayApp[PayCount].PayPath =CommNetDriver.GDataBuf[iHead+2]) and
                                                               (PayApp[PayCount].PayNum =CommNetDriver.GDataBuf[iHead+3]) then
                                                                begin
                                                                  In_pay :=true;
                                                                  NowPayNo :=PayCount;   //当前出纳机号
                                                                  break;
                                                                end
                                                                else
                                                                begin
                                                                  In_Pay :=false;
                                                                  In_Servpay :=false;
                                                                  NowPayNo :=0;
                                                                end;
                                                              end;
                                                            end;
                                                          end;
                                                        except
                                                        end;
                                                        /////////////////////////////////
                                                        if not (iAccount=0) then //正常帐户打开请求
                                                        begin
                                                          AccountOpen :=false;

                                                          iAccountPwd  := 0;
                                                          iStatus      := 0;
                                                          //iIfOpen      := 0;
                                                          iAMoney      := 0;
                                                          iALMoney     := 0;
                                                          //iMFMoney     := 0;
                                                          iChange      := 0;
                                                          iRate        := 0;
                                                          iSendStaMoney := 0;
                                                          Close;
                                                          case Postype of
                                                          0,5,6: begin   //水控,洗衣机,开水房
                                                                   SQL.Text :=' SELECT PERSON_ACCOUNT.PA_ACCOUNT, PERSON_ACCOUNT.PA_PWD, '+
                                                                              '          PERSON_ACCOUNT.PA_STATUS, PERSON_ACCOUNT.PA_IFOPEN, '+
                                                                              '          PERSON_ACCOUNT.PA_MONEY,  '+
                                                                              '          DEGREETYPE.ChangeScale, ToTalDay_Limit, Pass_Limit '+
                                                                              ' FROM PERSON_ACCOUNT INNER JOIN '+
                                                                              '          DEGREETYPE ON '+
                                                                              '          PERSON_ACCOUNT.PA_DEGREEID = DEGREETYPE.DEGREE_ID'+
                                                                              ' WHERE (PERSON_ACCOUNT.PA_CARDNO = ' + IntToStr(iAccount) + ') AND '+
                                                                              '       (PERSON_ACCOUNT.PA_MONEY> 0) and (PA_STATUS=1)';// AND '+
                                                                              //'       (PERSON_ACCOUNT.PA_IFOPEN = ''0'')';
                                                                   try
                                                                     Open;
                                                                     if RecordCount >0 then
                                                                     begin
                                                                       AccountOpen :=true;
                                                                       iAccount     := FieldByName('PA_ACCOUNT').AsInteger;
                                                                       iAccountPwd  := FieldByName('PA_PWD').AsInteger;
                                                                       iStatus      := FieldByName('PA_STATUS').AsInteger-1;
                                                                       iIfOpen      := FieldByName('PA_IFOPEN').AsInteger;
                                                                       iAMoney      := FieldByName('PA_MONEY').AsInteger;
                                                                       //iALMoney     := FieldByName('Pass_Limit').AsInteger;
                                                                       //iMFMoney     := FieldByName('MF_MONEY').AsInteger;
                                                                       iChange      := FieldbyName('ChangeScale').AsInteger;
                                                                       if (iIfOpen=1) then
                                                                       begin
                                                                         Inc(LockCount);
                                                                         if (LockCount mod 6 =0) then
                                                                         begin
                                                                           iIfOpen :=0;
                                                                         end;
                                                                       end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -