Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 22

Тема: Проблема с ПМ01 М02-24.АВ

  1. #11

    По умолчанию

    Поможет ли мне обновление прошивки ПЛК с 2.10 до 2.14?

  2. #12

    По умолчанию

    Так, заработало, но не так как ожидалось

    Принимает нормально, в ответ подготавливаю на отправку байтовый массив

    Вот кусок кода, ответственного за отправку

    str := 'AT+CIPSEND=';
    str := CONCAT(str, INT_TO_STRING(fulllength));
    str := CONCAT(str, '$R');
    cnt := SysComWrite(aPort, ADR(str), LEN(str), 0);
    g_sends_1 := cnt;
    cnt := SysComWrite(aPort, ADR(outbuf), fulllength, 0);
    g_sends_2 := cnt;
    str := '$R';

    cnt := SysComWrite(aPort, ADR(str), LEN(str), 0);
    g_sends_3 := cnt;

    g_send_bytes_to_pc := g_sends_1 + g_sends_2 + g_sends_3; <-- для отладки


    На сервере в ответ вместо ожидаемого байтового массива (как отправил в таком виде, так и должен получить)
    получаю в ответ посылку другого содержания (раскодированного), она ниже

    AT+CIPS

    Что за фигня?
    Короче, проблема с отправкой.

    Еще раз подчеркну - этот код корректно работает для модема старой модификации, почему не работает для новой модели ПМ-02?

  3. #13

    По умолчанию

    Переделал на

    str := 'AT+CIPSEND$R';
    cnt := SysComWrite(aPort, ADR(str), LEN(str), 0);

    cnt := SysComWrite(aPort, ADR(outbuf), fulllength, 0);
    str := '$1A$R';

    cnt := SysComWrite(aPort, ADR(str), LEN(str), 0);

    В ответ на сервере появляется

    65
    84
    43
    67
    73
    80
    83
    84
    65
    84
    85
    83
    13
    65
    84
    43
    67
    73
    80
    83
    69
    78
    68
    13
    255 <-- Нужный мне пакет, начинающийся с 255
    120
    1
    18
    18
    157

    с начала полученного пакета (65) и до 255, если перевести в байты в ASCII - получится типа "AT+CIPSTUS AT+CIPS;ND"

    Первое слово очень похоже на команду AT+CIPSTATUS, второе - AT+CIPSEND
    Как же все таки убрать этих паразитов?

  4. #14
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    либо не весь код выкладываете, но если все так как описано, то не ждете ответов на посланные команды, возможно поэтому все в одну строку лепится
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #15

    По умолчанию

    > capzap
    >... то не ждете ответов на посланные команды, возможно поэтому все в одну строку лепится

    Нет, не думаю.

    Сегодня однозначно локализовал проблему

    Проблема в отправке командой AT+CIPSEND= (передаю бинарные данные)
    Общий синтаксис AT+CIPSEND=<Длина данных><Данные>

    Поправил от лишнего код, в программе сделал только один ответ (квитирую подтверждение полученных данных с сервера).
    Единственная команда, которая отправляется серверу.

    cnt: DWORD;
    _index: BYTE;
    outbuf: ARRAY[0..254] OF BYTE;
    ....
    str := 'AT+CIPSEND=6$R';
    cnt := SysComWrite(0, ADR(str), LEN(str), 0);
    outbuf[0] := 255;
    outbuf[1] := 0;
    outbuf[2] := 120;
    outbuf[3] := 0;
    outbuf[4] := _index;
    outbuf[5] := outbuf[2] + outbuf[4];
    cnt := SysComWrite(0, ADR(outbuf), 6, 0);

    _index например 25

    Все просто. В посылке явно задаем дину передаваемого массива данных, в нашем случае 6, затем отправляем сами данные.
    Ставлю модем старой модели.
    На сервере принимаю

    255
    0
    120
    0
    25
    145

    То что нужно!

    Меняю на модем ПМ-02
    В ответ получаю

    65
    84
    43
    67
    73
    80 (AT+CIP)

    Ну как же так?

    Один и тот же код, один и тот же контроллер.

    ЧЯДНТ??????
    Последний раз редактировалось grayeddy; 02.02.2014 в 13:24.

  6. #16
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    ни чего такого, на что я намекал, Вы не сделали, отправляете одну команду SysComWrite, и не дождавшись ответа Ok или ERROR посылаете вторую, вот возможно и выталкиваете в инет весь накопленный буффер модема, а то что на старом модеме получается, так вроде не секрет что чипсеты разные и значит имеется какое то отличие, уж не знаю в размере буффера или во временных задержках

  7. #17

    По умолчанию

    Как сделать паузу, чтобы программа начала выполнение с того места, где остановилась?
    Аналог Delay?

    Решил поставить паузу в 200 мс между AT+CIPSEND и отправкой данных

    Сделал так
    VAR
    ...
    timerTP: TP;
    ...

    str := 'AT+CIPSEND=6$R';
    cnt := SysComWrite(0, ADR(str), LEN(str), 0);
    (* ставим паузу *)
    timerTP(IN := TRUE, PT := T#200ms);
    IF timerTP.Q THEN
    timerTP(IN := FALSE):

    outbuf[0] := 255;
    outbuf[1] := 0;
    outbuf[2] := 120;
    outbuf[3] := 0;
    outbuf[4] := _index;
    outbuf[5] := outbuf[2] + outbuf[4];
    cnt := SysComWrite(0, ADR(outbuf), 6, 0);
    END_IF

    Похоже не работает.
    3а 4 года забыл про таймеры на ST
    Последний раз редактировалось grayeddy; 02.02.2014 в 16:32.

  8. #18
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Кстати при первой записи проконтролируйте, сколько байт записалось,конечно не факт что это значение ушло в порт и всё же, может обнаружится какой прогресс почему слипаются команды

  9. #19

    По умолчанию

    Уже прогресс. Когда ставлю брейк (breakpont) на местоположение таймера или выходного буфера (скажем на outbuf[0]) внутри END_IF , то все начинает работать как надо.

    Просто жму далее F5 - и опа. все идет как надо.
    Стоит снять брейк - не идет.

  10. #20
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Третий раз тогда повторю, добавляйте в свой код прием ответа от модема и только после отправляйте следующую команду

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. Ответов: 5
    Последнее сообщение: 12.10.2013, 08:00
  2. проблема с плк110-24.60
    от YuriBel в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 03.11.2010, 23:34
  3. проблема с бп15б-д2-24
    от CmpaHHUk69rus в разделе Эксплуатация
    Ответов: 2
    Последнее сообщение: 30.09.2010, 21:05
  4. проблема с плк100-24 R.m.
    от mettled в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 01.12.2009, 14:25
  5. Нет связи с ТРМ202-Щ2.РР(М02)
    от Антон_Б в разделе Помощь Разработчикам
    Ответов: 10
    Последнее сообщение: 02.10.2008, 21:45

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •