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

📄 tcommsenddatathread_unit.pas

📁 这是一个非常实用的实时串口通讯程序
💻 PAS
📖 第 1 页 / 共 5 页
字号:
                                bSendDataBuf[2] := SETUPTIME;
                                bSendDataBuf[3] := TCTLINK[iContrl];
                                CharToBcd(@bSendDataBuf[4],FormatDateTime('yy',Now),2);
                                CharToBcd(@bSendDataBuf[5],FormatDateTime('mm',Now),2);
                                CharToBcd(@bSendDataBuf[6],FormatDateTime('dd',Now),2);
                                CharToBcd(@bSendDataBuf[7],FormatDateTime('hh',Now),2);
                                CharToBcd(@bSendDataBuf[8],FormatDateTime('nn',Now),2);
                                CharToBcd(@bSendDataBuf[9],FormatDateTime('ss',Now),2);
                                bSendDataBuf[10]:= WELLSIGN;
                                CopyMemory(@bSendDataBuf[3],@bSendDataBuf[4],7);
                                crc16 :=chkcrc16(9,@bSendDataBuf);
                                CopyMemory(@bSendDataBuf[11],@crc16,2);
                                bSendDataBuf[10] := bSendDataBuf[12];
                                bSendDataBuf[12] := 0;

                                nLen :=CommNetDriver.ClientComm.SendData(@bSendDataBuf,11);
                                if (nLen>0) then
                                  begin
                                    iCount := 0;
                                    While (iCount<3) do
                                      begin
                                        if not AcceptData then
                                          begin
                                            break;
                                          end
                                        else
                                          begin
                                            CommNetDriver.m_hSection.Acquire;
                                            iLength := 0;
                                            CopyMemory(@iLength,@CommNetDriver.GDataBuf,2);
                                            iHead := FindBufHead(@CommNetDriver.GDataBuf[3],iLength);
                                            CommNetDriver.m_hSection.Release;
                                            if (iHead>0) then
                                            begin
                                              Case CommNetDriver.GDataBuf[iHead+1] of
                                              RIGHT_CALL:
                                                begin
                                                  crc16 :=chkcrc16(4,@CommNetDriver.GDataBuf[iHead]);
                                                  CopyMemory(@crc161,@CommNetDriver.GDataBuf[iHead+4],2);
                                                  if (crc16=crc161) then
                                                  begin
                                                    SYSTIMEDOWN[TCTLINK[iContrl]] := true;
                                                    break;
                                                    end;
                                                end;
                                              End;
                                            end
                                            else
                                            begin
                                              Inc(iCount);
                                            end;
                                          end;
                                      end;
                                  end;
                             end ;
                       end;
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
                    //////自动放冷水////////////////
               {if SendWater_flag=1 then
               begin
                 if (copy(SendWater_Time1,1,5) <=FormatDateTime('hh:nn',now)) and (not SendWater_sys) then
                 begin
                   SendWaterCount:=0;
                   with GLBDataModule.PDADOQuery do
                   begin
                     Close;
                     SendWater_Sql :='SELECT CT_CommandNum, CT_MachineNUM, CT_TCPathNUM '+
                                ' FROM CTMachineTAB '+
                                ' WHERE (CT_VALID = ''1'') AND (CT_SaleStatus = 1) and CT_Type =0 ';
                     Sql.Text := SendWater_Sql;
                     Open;
                     if GLBDataModule.PDADOQuery.RecordCount <> 0 then
                     begin
                       SenderWatering :=true;
                       Main_Form.Timer2.Interval :=1000000;
                       Main_Form.Timer2.Enabled :=true;
                       while not GLBDataModule.PDADOQuery.eof do
                       begin
                        CommNo := FieldbyName('CT_CommandNum').AsInteger;
                        PathNo := FieldbyName('CT_TCPathNUM').AsInteger;
                        MacNo  :=  FieldbyName('CT_MachineNUM').AsInteger;

                        CommFunc.StatUp_ColdWater(CommNo,PathNo,MacNo,FSTime);
                        SendWaterCount:=SendWaterCount+1;
                        Next;
                        if (SendWaterCount Mod 5 )=0 then
                        begin
                          Sleep(3000);
                        end;  
                       end;
                       SendWater_sys :=true;
                       SendWater_flag :=0;
                     end;
                     if SendwaterCount =GLBDataModule.PDADOQuery.RecordCount then
                     begin
                        SendWater_sys :=true;
                        SendWater_flag :=0;
                     end;
                   end;
                 end;
               end;  }
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
                    //发查询命令
                    CommNetDriver.m_hSection.Acquire;
                    ZeroMemory(@CommNetDriver.GDataBuf,1024);
                    CommNetDriver.m_hSection.Release;
                    ZeroMemory(@bSendDataBuf,1024);
                    bSendDataBuf[1] := STARSIGN;
                    bSendDataBuf[2] := QUERY;
                    bSendDataBuf[3] := TCTLINK[iContrl];
                    bSendDataBuf[4] := WELLSIGN;
                    crc16:=chkcrc16(4,@bSendDataBuf);
                    CopyMemory(@bSendDataBuf[6],@crc16,2);
                    bSendDataBuf[5] := bSendDataBuf[7];
                    bSendDataBuf[7] := 0;
                    nLen := CommNetDriver.ClientComm.SendData(@bSendDataBuf,6);
                    //Main_Form.Edit1.Text :=IntToStr(StrToInt(Main_Form.Edit1.Text)+1);
                    if (nLen>0) then
                       begin
                            Sleep(20);
                            if not AcceptData then
                              begin
                                break;
                              end
                            else
                               begin
                                  CommNetDriver.m_hSection.Acquire;
                                  iLength := 0;
                                  CopyMemory(@iLength,@CommNetDriver.GDataBuf,2);
                                  iHead := FindBufHead(@CommNetDriver.GDataBuf[3],iLength);
                                  CommNetDriver.m_hSection.Release;
                                  if (iHead>0) then
                                     begin
                                        Case CommNetDriver.GDataBuf[iHead+1] Of
                                           $00:
                                             begin
                                               //总控器配置请求
                                               crc16 :=chkcrc16(8,@CommNetDriver.GDataBuf[iHead]);
                                               CopyMemory(@crc161,@CommNetDriver.GDataBuf[iHead+8],2);
                                               if (crc16=crc161) then
                                               begin
                                                 ZeroMemory(@bSendDataBuf,1024);
                                                 bSendDataBuf[1] := STARSIGN;
                                                 bSendDataBuf[2] := SETUPCMD;
                                                 ////drc
                                                 case CommNetDriver.GDataBuf[iHead+2] of
                                                   1: CopyMemory(@bSendDataBuf[3],@TCTLINK[1],17);
                                                   2: CopyMemory(@bSendDataBuf[3],@TCTLINK[18],17);
                                                   3: CopyMemory(@bSendDataBuf[3],@TCTLINK[35],17);
                                                   4: CopyMemory(@bSendDataBuf[3],@TCTLINK[52],17);
                                                 end;
                                                 CommNetDriver.m_hSection.Acquire;
                                                 ZeroMemory(@CommNetDriver.GDataBuf,1024);
                                                 CommNetDriver.m_hSection.Release;
                                                 //drc
                                                 bSendDataBuf[20]:=WELLSIGN;
                                                 crc16 := chkcrc16(20,@bSendDataBuf);
                                                 CopyMemory(@bSendDataBuf[22],@crc16,2);
                                                 bSendDataBuf[21]:=bSendDataBuf[23];
                                                 bSendDataBuf[23]:=0;
                                                 nLen :=CommNetDriver.ClientComm.SendData(@bSendDataBuf,22);
                                                 if (nLen>0) then
                                                 begin
                                                   Sleep(500);
                                                   if not AcceptData then
                                                     begin
                                                       break;
                                                     end
                                                   else
                                                     begin
                                                       CommNetDriver.m_hSection.Acquire;

⌨️ 快捷键说明

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