реклама на сайте
подробности

 
 
> Ошибка при работе с WIP AT, Возникает ошибка при передаче данных с помощью TCP/IP стека
AlexKazmin
сообщение Nov 17 2010, 12:20
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 16-11-10
Пользователь №: 60 945



Есть терминал Fargo Maestro 100. В нём используется модем серии Q24. Используя встроенный TCP стек передаются бинарные данные на сервер. При передаче данных использую DLE стаффинг. т.е. перед каждой 03h добавляется 10h. Всё работает, но в один прекрасный момент на сервер приходит просто число 03h и происходит обрыв ТСР соединения, т.е. такая ситуация как будто 10h не добавлялась. Пробовал тестировать - передавал разное количество данных, просто 10h 03h, но какую то зависимость между тем когда модем проглатывает 10h и обрывает соединение определить не удалось.


Может кто-нибудь уже сталкивался с подобной проблемой?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
million68
сообщение Nov 19 2010, 06:53
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 9-03-07
Из: USSR
Пользователь №: 26 007



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 */
}
Go to the top of the page
 
+Quote Post
AlexKazmin
сообщение Nov 19 2010, 12:00
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 16-11-10
Пользователь №: 60 945



Спасибо! Попробую.
Go to the top of the page
 
+Quote Post
AlexKazmin
сообщение Nov 22 2010, 06:13
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 16-11-10
Пользователь №: 60 945



Пробовал, не помогает. Такое ощущение, что когда в модем уходит 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]);
}

Сообщение отредактировал AlexKazmin - Nov 22 2010, 06:13
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 02:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016