ADAM-5510+DK-8070 (вывод на панель) |
Ответить |
Автор | |
Новичок Присоединился: 02 Февраль 2011 Online Status: Offline Публикации: 25 |
Опубликовано: 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 - все нормально. Кто сталкивался? |
|
Участник Присоединился: 02 Декабрь 2010 Online Status: Offline Публикации: 68 |
|
Добрый день!
алгоритм не передает нулевой символ, попробуй так 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); |
|
Участник Присоединился: 02 Декабрь 2010 Online Status: Offline Публикации: 68 |
|
и еще вы забыли 0 >>> s[] = "$01T00ABCDEFGHIJKLMNOP"; переделай на s[] = "$01T000ABCDEFGHIJKLMNOP";
|
|
Новичок Присоединился: 02 Февраль 2011 Online Status: Offline Публикации: 25 |
|
:-) по поводу 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 |
|
... 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 |
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |