Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Программное обеспечение
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

ADAM-5510+DK-8070 (вывод на панель)

 Ответить Ответить
Автор
Сообщение
Марат Смотреть выпадающим
Новичок
Новичок


Присоединился: 02 Февраль 2011
Online Status: Offline
Публикации: 25
Свойства публикации Свойства публикации   Ответить, цитируя автора - Марат Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: ADAM-5510+DK-8070 (вывод на панель)
    Опубликовано: 07 Февраль 2011 15:55

привет.

Пытаюсь выводить данные на панель DK-8070 с помощью команды

$01T00ABCDEFGHIJKLMNOP 

где $01T000 - адрес устройства T000 - команда выдачи строки с позиции 0,00

При выдачи строки длиной не более 10 символов (ABCDEFGHIJ) - все нормально выводиться,

Если пытаться вывести строку длиннее - то сразу она не выводиться, и если следом выдать любую посылку (например просто $01\r - "пустая команда+возврат каретки") то выдается 10 символов из предыдущей посылки, а начиная с 11 символа выдается текст $01...

В принципе, наверное, это не очень важно, если не выдавать "длинных команд", но ладно, если на экран... А если понадобиться все же длинные команды выдавать вообще?... 

Да, если использовать не com_tx_string(S) а пихать побайтно com_tx(c) и после каждой посылки делать какую-то задержку типа for(i=0;i<32000;i++) ; то все воспринимается нормально.

Пробовал также 

s[] = "$01T00ABCDEFGHIJKLMNOP";

i=0;

while (s[i]!=0)

{

    while (!com_tx_empty()) ;  // wait for free

    com_tx(s[i]);

    i++;

}

скорости обмена портов тоже пробовал : 1200, 9600, 19200 ... 

пробовал посылать также на DK-8070 напрямую с порта PC - все нормально.

Кто сталкивался?

Наверх
poison Смотреть выпадающим
Участник
Участник
Аватар

Присоединился: 02 Декабрь 2010
Online Status: Offline
Публикации: 68
Свойства публикации Свойства публикации   Ответить, цитируя автора - poison Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2011 08:58
Добрый день!
алгоритм не передает нулевой символ, попробуй так
s[] = "$01T00ABCDEFGHIJKLMNOP";

i=0;

while (s[i]!=0)

{

while (!com_tx_empty()) ; // wait for free

com_tx(s[i]);

i++;

}
com_tx(s[i]); // или com_tx(0);
Наверх
poison Смотреть выпадающим
Участник
Участник
Аватар

Присоединился: 02 Декабрь 2010
Online Status: Offline
Публикации: 68
Свойства публикации Свойства публикации   Ответить, цитируя автора - poison Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2011 09:21
и еще вы забыли  0    >>>   s[] = "$01T00ABCDEFGHIJKLMNOP"; переделай на s[] = "$01T000ABCDEFGHIJKLMNOP";
Наверх
Марат Смотреть выпадающим
Новичок
Новичок


Присоединился: 02 Февраль 2011
Online Status: Offline
Публикации: 25
Свойства публикации Свойства публикации   Ответить, цитируя автора - Марат Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2011 10:12

:-)

по поводу T000 - это просто опечатка, в програмке, то все правильно,

передавать завершающий байт 0 не нужно. DK-8070 принимает набор байтов, и считает, что завершающим байтом является '\r' - ведь менее длинные строчик выводятся нормально.

Если короче сформулировать вопрос - как выдать строку "12345678901234567890" на дисплей DK-8070?  при попытке выполнить команду 

$01T000123456789\r

все выводиться, а если попытаться

$01T00012345678901234567890\r

то ответа от DK-8070 не получаю, при дальнейшей выдаче команды $01\r на экране DK-8070 появляется строка 

1234567890$01

и я получаю ответ !01 - типа правильно выполнена предущая (пустая) команда

... Буду еще пробовать последовательно выдавать по 10(?) байт делать паузу, потом остальное, или еще буду пробовать _flush_ .... результаты потом расскажу. :)

Наверх
Марат Смотреть выпадающим
Новичок
Новичок


Присоединился: 02 Февраль 2011
Online Status: Offline
Публикации: 25
Свойства публикации Свойства публикации   Ответить, цитируя автора - Марат Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2011 11:40

... flush не помогло, 

стал экспериментировать с задержками после выдачи набора символов, те после каждого 15-го символа давал задержку

for(i=0;i<Delay;i++

{

     asm nop;

}

при Delay=100 так же как и было

при Delay=500 на дисплее DK-8070 стало появляться больше символов :) типа

123456789012348$01 (см предыдущее :)

при увеличении задержки - выводится полная строка 12345678901234567890 и получаю нормальный ответ.

попробовал изменить скорость обмена по RS232 - на Adame - COM4 (сконфигурирован как RS232) поставил 115200 - и все стало работать.... т.е. по крайней мере стала выполняться команда

com_232_485_tx_string("$01T00012345678901234567890\r");

которая полностью выводит строку на экран 8070... правда попытка вывести не 20 символов, а 40 (чтоб перелезло на другую строку) не вышло... на другой строке появилось 14691468 :) видимо где то все таки что-то потерялось. Хотя ответ пришел, что все ок.

Остановился пока на том, что после послыки каждого 15 байта делаю задержку на 100 nop'ов - это при скорости обмена 115200... 

вот код посылки строки:

void com_232_485_delay() // make small delay
{
    int NOPS=100; // 70 nops min for out 80 symbols at 115200 after every 16th
    unsigned long i;
    for(i=0;i<NOPS;i++)
    {
        asm nop ;
    }
}

int com_232_485_sendstring(unsigned char s[])
{
     int idelay=16; // ?? after 16th symbols make a delay
     int si=0;
     // send bytes, after 16-th we make small delay :-)
     while(s[si])
     {
          if (com_232_485_tx_empty()) // if empty - send it // ???
          {
               com_232_485_tx(s[si++]);
          }
          if (si%idelay==0) // sent 16 bytes
                com_232_485_delay(); // delay 100 nops
     }
     return si;   // if empty string - return 0;
}




Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz