Отправка СМС на кирилице

Delphi 10.3 + BComPort.

3g Hyawei E153 на AT+CSCS=? отвечает -

+CSCS: ("IRA","GSM","UCS2")
OK

Приведенный ниже код без проблем отправляет сообщение на латинице (закоментированная строка). С русскими буквами - ошибка (+CMS ERROR: 305).

Если раскоментировать закоментированные строки - модем отключается на несколько секунд и находится опять. Пробовал Sleep(7000) - не помогло. 7 секунд подобрал экспериментально.

    function EncodeUnicodeToUCS2(const S: string): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := 1 to Length(S) do
      begin
        Result := Result + IntToHex(Ord(S[I]), 4);
      end;
    end;
    
    
    procedure TfrmMain.Button1Click(Sender: TObject);
    var
      AStr: AnsiString;
      StringNumber: String;
      StringMessage: String;
    begin
      StringNumber := '+XXXXXXXXXXXXX'; //- номер в правильном формате
      StringMessage := 'Тестовое сообщение 123 TEST test ';
//      StringMessage := '123 TEST test ';
    
      AStr := 'AT+CMGF=1' + #13#10;
      frmMain.BCPort1.Write(AStr[1], Length(AStr));
      Sleep(100);
    
      AStr := 'AT+CSCS="UCS2"' + #13#10; // Устанавливаем кодировку UCS2
      frmMain.BCPort1.Write(AStr[1], Length(AStr));
      Sleep(100);
    
    //  AStr := 'AT+CSMP=17,167,0,8' + #13#10; // Устанавливаем кодировку UCS2
    //  frmMain.BCPort1.Write(AStr[1], Length(AStr));
    //  Sleep(500);
    
      AStr := 'AT+CMGS="' +EncodeUnicodeToUCS2(StringNumber) + '"' + #13;
      frmMain.BCPort1.Write(AStr[1], Length(AStr));
      Sleep(100);
    
      AStr := EncodeUnicodeToUCS2(StringMessage) + #26;
      frmMain.BCPort1.Write(AStr[1], Length(AStr));
      Sleep(500);
    end;

Ответы (0 шт):