1. Pascal / Говнокод #5805

    +85

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    // ComPort1: TComPort; компонент для работы RS-232
    type
     Tst5=string[5];
    var
      Form1: TForm1;
      lastcnl:byte;
      CommonShiftTT:integer;
      roundtt:integer;
      Start_Proces:boolean;
      intN,intdg0,intdg50:integer;
      cerr,cerr0,cerr50:integer;
      intdg:integer;
      cnl:integer;
      b:array [1..5]of byte;
      s,sdg50,sdg0,ss:Tst5;
      tt,realdg:real;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.ComPort1RxBuf(Sender: TObject; const Buffer;
      Count: Integer);
    var
      i:integer;
      p:pointer;
    begin
     for i:=1 to 5 do b[i]:=0;
     ListBox1.Items.clear;
     if ComPort1.Connected then begin
        p:=@Buffer;
        b[1]:=byte(p^);
      end
      else begin
        exit;
      end;
      cnl:=b[1];
      if cnl=0 then begin
        Start_Proces:=true;
      end;
      ListBox1.Items.Add(inttostr(cnl));
      if Start_Proces=true then begin
        b[2]:=Byte(pointer(longint(p)+1)^);
        b[3]:=Byte(pointer(longint(p)+2)^);
        b[4]:=Byte(pointer(longint(p)+3)^);
        b[5]:=Byte(pointer(longint(p)+4)^);
    
        if (b[2] and $20)>0 then ss[1]:='+' else ss[1]:='-';
        if (b[2] and $40)>0 then ss[2]:='0' else ss[2]:='1';
    
        FOR i:=3 TO 5 DO begin
        case b[i] of
              $82:ss[i]:='0';
              $CF:ss[i]:='1';
              $A4:ss[i]:='2';
              $85:ss[i]:='3';
              $C9:ss[i]:='4';
              $91:ss[i]:='5';
              $90:ss[i]:='6';
              $C7:ss[i]:='7';
         {min}$80:ss[i]:='8';
              $81:ss[i]:='9';
              $FF:ss[i]:='x'
            else ss[i]:=chr(b[i]);
        end;
        ss[0]:=#5;
    
        case cnl of
          0:begin
            vaL(ss,intdg0,cerr0);
            stR(intdg0,sdg0);
            Label1.Caption:=inttostr(intdg0);
          end;
          1:begin
            vaL(ss,intdg50,cerr50);
            stR(intdg50,sdg50);
            Label2.Caption:=inttostr(intdg50);
          end;
          2..26:begin
            vaL(ss,intN,cerr);
            intN:=intN-intdg0+CommonShiftTT;
            realdg:=intN/((intdg50-intdg0)/500);{real type}
            intdg:=SMALLINT(round(realdg));{integer type}
            tt:=intdg/10;
            roundtt:=SMALLINT(round(tt));{integer}
            stR(roundtt:5,s);
          end;
        end;
      end;
      ListBox1.Items.Add('float='+floattostr(tt));
      ListBox1.Items.Add(inttostr(cnl)+'='+ss+' = '+inttostr(roundtt));
     end;
    end;

    Процедура приема и обработки Кодов АЦП с контроллера. Контроллер обрабатывает данные полученные с температурных (аналоговых) датчиков и передает на COM в цифровом виде.
    Сделано для АКГУП Индустриальный г. Барнаул

    Запостил: zak, 25 Февраля 2011

    Комментарии (12) RSS

    • показать все, что скрытоDelphi, сам по себе говно язык.. не до плюсы или супер паскаль...
      Ответить
    • А как это можно написать лучше?
      Ответить
    • Ооо, делфикодеры заминусовали, блин :)
      Ответить
    • не читал, но клеймлю нубокодом из-за глобальных переменных
      Ответить
      • глобальные переменные - не самое страшное, что бывает в жизни.
        Таскать за собой в каждую функцию самопальную struct *context - еще хуже.
        Издержки чистого процедурного программирования. Даешь ООП?
        PS: название Start_Proces доставляет. Как минимум одна опечатка.
        Ответить
    • назвали бы магик-намберы как-то нагляднее - да и хватит.
      ну и глобальные переменные - фи, если это не тестовый (для экспериментов) модуль.
      Ответить
    • vaL(ss,intdg50,cerr50);
      stR(intdg50,sdg50);
      Label2.Caption:=inttostr(intdg50);

      Просто прелесть. А также
      if Start_Proces=true then begin
      b[2]:=Byte(pointer(longint(p)+1)^);
      b[3]:=Byte(pointer(longint(p)+2)^);
      b[4]:=Byte(pointer(longint(p)+3)^);
      b[5]:=Byte(pointer(longint(p)+4)^);

      Move(Buffer, B, SizeOf(B)), очевидно, не устраивает.
      Ответить

    Добавить комментарий