Конференция "Corba" » передать в com-порт байты типа 000h [Delphi, Windows]
 
  • 161a © (30.09.10 13:16) [0]
    Прошу прщения, но я только учусь.
    Так вот вопрос:
    необходимо передать черех ком-порт 4 байта "000h, 055h, 017h, 05Fh".
    Это кусок из кода:"

     Buff:=s;
     nBytes:=4;//Length(Buff);
     ok:=WriteFile(  //uses Windows
       hCom,
       Buff[1],
       nBytes,
       wr_cnt,
       nil
     );
     if not ok then RaiseLastOSError;
     if wr_cnt<>nBytes then Raise Exception.Create('Число записанных байтов в COM-порт меньше, чем было затребовано.');
    end;"

    подскажите, плз, как в "s" забить эти байты?
  • Сергей М. © (30.09.10 15:01) [1]
    Никаких Buff тут не нужно.
    Передавай прямо из s:

    s: = #$00#$55#$17#$5F;
    ok:=WriteFile(
      hCom,
      s[1],
      nBytes, // 4
      wr_cnt,
      nil
    );
  • 161a © (30.09.10 15:22) [2]
    увы не сработало...
    я пошел другим путем:

     var Buff: array[0..$FF] of Byte;
     var wr_cnt: DWORD;
     var ok:Boolean;
     var nBytes: DWORD;
    begin

     if bPortIsOpen=False then begin
           Raise Exception.Create('Сначала откройте COM-порт.');
     end;

     Buff[0]:=$00;
     Buff[1]:=$55;
     Buff[2]:=$17;
     Buff[3]:=$5F;

     nBytes:=4;//Length(Buff);
     ok:=WriteFile(  //uses Windows
       hCom,
       Buff,
       nBytes,
       wr_cnt,
       nil
     );
     if not ok then RaiseLastOSError;
     if wr_cnt<>nBytes then Raise Exception.Create('Число записанных байтов в COM-порт меньше, чем было затребовано.');
    end;

    вроде в мониторе он передает, но в ответ от устройства ничего не получаю...
    по паспорту написано:
    "Передача данных инициируется посылкой запроса ведомому устройству от ведущего устройства (компьютер). Передаче запроса должен предшествовать интервал молчания длительностью минимум 4 мс.

    Запрос состоит из 4-х байт:
    1. сетевой адрес ведомого устройства;
    2. байт 055h — код функции запроса текущего веса;
    3. два байта контрольной суммы CRC16.

    Ведомое устройство принимает запрос, контролирует бит паритета для каждого байта данных, сравнивает присвоенный устройству сетевой адрес и адрес в запросе и вычисляет контрольную сумму CRC16."

    вот я и думаю, может где с тайм-аутом не то?
  • 161a © (30.09.10 16:02) [3]
    P.S.
    "Если хотя бы одно условие нарушено, то ответ не генерируется. При выполнении всех условий ведущий посылает ответ, состоящий из 8 байт:
    1. сетевой адрес ведомого устройства;
    2. три байта значения веса (первый байт – младший), целое число со знаком, отрицательные значения представлены в дополнительном коде, т.е. –1 = 0FFFFFFh.
    3. байт служебной информации b1;
    4. байт служебной информации b2;
    5. два байта контрольной суммы CRC16."
  • Сергей М. © (30.09.10 16:02) [4]

    > не сработало


    Что значит "не сработало" ?
    Вот так прямо и говорит - "не срабатываю" ?)
  • 161a © (30.09.10 16:11) [5]
    нет, говорит, фигвам... :0)
    не передает в ответ ничего...
  • Сергей М. © (30.09.10 16:32) [6]

    > 161a ©   (30.09.10 16:11) [5]


    И чего ?
    У тебя и если ты "пошел другим путем" тоже "в ответ от устройства ничего не получаю")
    А если нет разницы, зачем "платить дважды" ?)
  • 161a © (30.09.10 16:41) [7]
    таки и я о том: посыл вроде прошел, но ответ не сгенерировался! вот что обидно! хотя у их "родной" программы все проходит на ура... а от нее есть толькл ехе-шник... как посмотреть где я ошибаюсь... :(
  • Сергей М. © (30.09.10 16:48) [8]

    > посыл вроде прошел


    Что значит "вроде" ?
    Либо он заведомо прошел либо не прошел)

    Ты сравни монитором-то что уходит от твоей программулины с тем что уходит от родного ехе-шника для этой железяки
  • 161a © (30.09.10 16:49) [9]
    уходит одно и то же, но может там по времени какая-то закавыка...
  • Сергей М. © (30.09.10 17:04) [10]
    т.е. монитор показывает что от дивайса вообще ничего не поступает в ответ на твой посыл ?
  • 161a © (30.09.10 17:27) [11]
    ага
  • Сергей М. © (30.09.10 17:31) [12]
    А что за монитор-то ?

    p.s.

    А чего это ты запостил вопрос в "Corba и COM" ?
    Твоя задача кроме фигурирующей аббревиатуры "СОМ" не имеет ни малейшего отношения к теме раздела)
  • 161a © (30.09.10 17:32) [13]
    ну я ж грю тока учусь, монитор "comport toolkit"
  • Сергей М. © (30.09.10 17:48) [14]
    Покажи дампы монитора для случая твоего и не твоего посылов ..
  • 161a © (30.09.10 17:51) [15]
    мой
    000019|15:31:48.375 |COM1  |<<|00 55 17 5F                                    |.U._
    не мой
    000019|15:32:53.906 |COM1  |<<|00 55 17 5F                                    |.U._
    000020|15:32:54.046 |COM1  |>>|00 74 00 00 02 04 BC 76                        |.t....јv
  • 161a © (30.09.10 17:52) [16]
    сорри! не мой
    000019|15:31:48.375 |COM1  |<<|00 55 17 5F                                    |.U._
    000020|15:31:48.531 |COM1  |>>|00 00 00 00 02 14 3A C7                        |......:З
    это нулевое значение ответчика
  • Сергей М. © (30.09.10 17:58) [17]

    > мой
    > 000019|15:31:48.375


    > сорри! не мой
    > 000019|15:31:48.375


    Что-то ты темнишь) ..

    Как это "мой" и "не мой" посылы у тебя были отправлены в одно и тоже время с точностью до миллисекунды ?
  • 161a © (30.09.10 18:03) [18]
    блин, не оттуда скопировал
    Мой
    000001|18:02:51.562 |COM1  |<<|00 55 17 5F                                    |.U._
    не мой
    000001|18:01:53.514 |COM1  |<<|00 55 17 5F                                    |.U._
    000002|18:01:53.655 |COM1  |>>|00 00 00 00 02 14 3A C7                        |......:З
  • Сергей М. © (30.09.10 18:08) [19]
    ну хорошо
    покажи свой код инициализации/открытия порта и чтения из него..
 
Конференция "Corba" » передать в com-порт байты типа 000h [Delphi, Windows]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]