Рейтинг:
2
Graeme_Grant
Этот вопрос возвращает меня в начало 1990-х...
Передача данных через последовательные порты-это не то же самое, что TCP/IP. Вам нужно добавить немного рукопожатия.
Это означает, что когда передатчик отправляет пакет данных приемнику, приемник должен ответить ответом ACK или NAK. Если ACK был принят передатчиком, то отправьте следующий блок; если NAK был получен, то отправьте повторно.
Кроме того, данные по RS232 могут быть повреждены. То же самое происходит и с TCP/IP, но транспортный уровень в TCP/IP автоматически повторяет попытки, а не RS232. Поэтому неплохо обернуть блок данных заголовком (описывает данные-например, идентификатор последовательности, тип данных и т. д.) и конечной контрольной суммой. Если контрольная сумма действительна на приемном конце, то получатель отвечает и ACK, если нет, то NAK. Когда получатель отправляет ответ, желательно также добавить идентификатор пакета и заголовок контрольной суммы/хвостовую оболочку. Это позволит сделать его проще для передатчика, чтобы оставаться в синхронизации или определить, если повредить данные были получены обратно.
Member 12941572
не получил ни единого слова :-)
0x01AA
Хе-хе, 5 за упоминание ностальгической части 90-х и, конечно же, более важной этой вещи для рукопожатия
Graeme_Grant
Это были дни черных ящиков... :)
Member 12941572
Ха ха но я до сих пор не получил ответа пожалуйста помогите мне ребята
0x01AA
Ха-ха, а где ты застрял?
Это простая вещь:
Отправитель:
Отправить...
Приемник:
Получать
..и упомянуто здесь достаточно много: получатель должен сообщить отправителю, когда он готов или не готов к приему. Либо аппаратным рукопожатием, либо программным рукопожатием xon/xoff
Member 12941572
да, когда я нажимаю на кнопку "Отправить", общий текстовый файл передается, но я хочу отправлять строку за строкой.? я попробовал использовать stream Reader, но не получил решения
Graeme_Grant
Есть ли куски, разделенные новым маркером линии (CR, CR/LF или LF)? Если да, то просто используйте string.Split
метод.
Member 12941572
внутри блока отправки или внутри блока выбора файла
Graeme_Grant
1. Загрузите файл
2. разделительные линии
3. перебора строк &ампер; отправка в цикле - foreach(...)
, for(...;...;...)
, прием...
Рейтинг:
0
CPallini
Цитата:
в то время как ((строка = читатель.С readline()) != нуль)
{
Вы можете использовать тот же цикл для записи строк в последовательный порт.
Однако с точки зрения приемника ничего не меняется. Он должен различать различные линии на основе символа (символов) Терминатора линии.
Member 12941572
Я думаю, что вы не поняли мой вопрос, я должен прочитать текстовый файл строка за строкой, и это успех в консольном приложении. Что мне нужно, так это то, что та же операция будет выполнена в приложении winform, куда я вставлю код
0x01AA
А 5, даже ОП утверждает, что вы не понимаете его вопроса *лол*, но я совершенно убежден, что вы понимаете.
CPallini
:- ) Большое вам спасибо.
Member 12941572
я не нашел своего решения даже сейчас.
0x01AA
Чего именно вы ожидаете?
Graeme_Grant
Вы хотите, чтобы мы написали ваш код для вас?
Member 12941572
это не значит, что я жду от вас кода...
я попробовал то что он сказал но проблема не решена
Рейтинг:
0
Ankit Rajput
Привет,
Вы можете попробовать этот код. Я думаю, это решит вашу проблему.
if (serialPort1.IsOpen == false)
{
this.serialPort1.Open();
}
using (StreamReader reader = new StreamReader(@"E:Text.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
//list.Add(line); // Add to list.
serialPort1.Write(line + Environment.NewLine);
}
}
Я думаю, что этот код послужит вашей цели.
Member 12941572
на самом деле я не писал никаких данных во время выполнения программы , я должен отправить текстовый файл, который имеет 400 строк, которые я должен прочитать один за другим, надеюсь, вы понимаете, что я сказал