Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка при работе с WIP AT
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
AlexKazmin
Есть терминал Fargo Maestro 100. В нём используется модем серии Q24. Используя встроенный TCP стек передаются бинарные данные на сервер. При передаче данных использую DLE стаффинг. т.е. перед каждой 03h добавляется 10h. Всё работает, но в один прекрасный момент на сервер приходит просто число 03h и происходит обрыв ТСР соединения, т.е. такая ситуация как будто 10h не добавлялась. Пробовал тестировать - передавал разное количество данных, просто 10h 03h, но какую то зависимость между тем когда модем проглатывает 10h и обрывает соединение определить не удалось.


Может кто-нибудь уже сталкивался с подобной проблемой?
million68
Datasheet говорит, что :
"In case a [DLE] character needs to be transmitted as data, it should be preceded by another [DLE] character."

Т.е. пропатчить нужно не только ETX, но и DLE:
Код
void USART_TransmitDLE( unsigned char data )
{
if(data==DLE || data==ETX) {
   while ( !( UCSR1A & (1<<UDRE1)) );      /* Wait for empty transmit buffer */
   UDR1=DLE;
}
while ( !( UCSR1A & (1<<UDRE1)) );      /* Wait for empty transmit buffer */
UDR1 = data;                            /* Put data into buffer, sends the data */
}
AlexKazmin
Спасибо! Попробую.
AlexKazmin
Пробовал, не помогает. Такое ощущение, что когда в модем уходит 10h 03h, модем не воспринимает 10h, соответственно остаётся только 03h и по этому символу разрывается соединение.

Вот код который преобразует массив байтов в массив предназначенный для отправки в модем:
for (int i=0;i<SendByte.Length;i++)
{
if ((SendByte[i] == 0x03) || (SendByte[i] == 0x10))
{
SendArray.Add(0x10);
}
SendArray.Add(SendByte[i]);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.