Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 10

ReadFile и WriteFile

08.02.2013, 20:15. Показов 2866. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ком-порт. В нем Tx и Dx c соединены проводом Я отправляю в порт массив байт, а он выдает совсем другие
данные.

C++
1
2
3
4
5
6
7
8
9
10
11
12
 bufferout[0] = 'sss';
     bufferout[1] = 0x6a;
     bufferout[2] = 0x22;
     bufferout[3] = 0x0f;
    WriteFile(hCOM,&bufferout ,sizeof(bufferout),&bc,NULL);
    ReadFile(hCOM,&bufferin,sizeof(bufferin),&cb,NULL);
    for(i=0;i<sizeof(bufferin);i++){
        cout << bufferout[i];
        cout <<" /";
        cout << bufferin[i];
        cout << endl;
    }




Пишет :

s /
j /Ё
" /н
* ,(Две палочки которых нет на клаве)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2013, 20:15
Ответы с готовыми решениями:

Функции win32 CreateFile WriteFile и ReadFile
В общем делаю небольшой проект. Необходимо считать данные из файла. Очевидно, что изначально в него необходимо эти данные записать. Так...

[C] ReadFile/WriteFile
Всем доброго времени суток! Есть вроблема с програмкой ,а именно: Unhandled exception at 0x010b1493 in lab3.exe: 0xC0000005: Access...

ReadFile WriteFile на примере
день добрый есть проект типа напоминания задача сохранять данные в файл при добавлении и считывать их от туда при открытии программы...

11
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 19:04
Tx и Dx c соединены проводом
Возможно, этого недостаточно. Посмотрите здесь: How to Do a Serial Loopback Test http://www.ni.com/white-paper/3450/en

Порт должен быть настроен timeout, baud, parity, databits, stopbits etc. - BuildCommDCB(). Обмен, обычно, идет асинхронно и управляется ивентами - WaitCommEvent(). Посмотрите, например, Remon Spekreijse "CSerialPort".
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.02.2013, 22:29
Цитата Сообщение от Shadow_i Посмотреть сообщение
WriteFile(hCOM,&bufferout ,sizeof(bufferout),&bc,NULL);
записать в порт 4 байта
а куда они пойдут???
пока не отошлет 4 байта из функции не выйдет

Цитата Сообщение от Shadow_i Посмотреть сообщение
ReadFile(hCOM,&bufferin,sizeof(bufferin) ,&cb,NULL);
считать 4 байта
а откуда они возьмутся
если у тебя
Цитата Сообщение от Shadow_i Посмотреть сообщение
В нем Tx и Dx c соединены проводом
или ты думаешь что весь массив сидит в проводе и ждет когда его считают
передавай считывай по одному байту
а еще лучше и правильней в разных потоках
один поток на чтение другой на запись

Добавлено через 58 секунд
Цитата Сообщение от gazlan Посмотреть сообщение
Порт должен быть настроен timeout, baud, parity, databits, stopbits etc. - BuildCommDCB().
а как думаешь у одного и того же порта разные настройки?
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 23:06
думаешь у одного и того же порта разные настройки?
:-)

При некоторых значениях параметров он просто не будет работать или работа будет неустойчивой (зависит от железа). В первую очередь, это касается скорости передачи данных.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.02.2013, 23:31
Цитата Сообщение от gazlan Посмотреть сообщение
При некоторых значениях параметров
каких?
если порт настроен то у него и при чтении и при записи одна и та же скорость, четность, количество бит
как он может сам с собой незасинхронизироватся?

Добавлено через 56 секунд
Цитата Сообщение от gazlan Посмотреть сообщение
В первую очередь, это касается скорости передачи данных.
порт один и тот же
Цитата Сообщение от Shadow_i Посмотреть сообщение
Есть ком-порт. В нем Tx и Dx c соединены проводом
скорость приема и передачи одна и таже
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 23:45
скорость приема и передачи одна и таже
При условии, что она вообще есть.

Например, с GSM-модемами стабильно работать больше, чем на 19.2, у меня не получалось.

P.S.

Кстати, побайтная передача необязательна - большинство моделей поддерживают внутреннюю очередь на 16 символов.
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 23:57
Не знаю, поможет ли, 232 под рукой нет, но нашел старый код для 485 (отличий не так много).

C++
1
2
TL16C552 * DUAL ASYCHRONOUS COMMUNICATIONS ELEMENT WITH FIFO
SLLS102B - DECEMBER 1990 - REVISED MARCH 1996
Вложения
Тип файла: rar 485.rar (7.7 Кб, 10 просмотров)
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.02.2013, 00:06
Цитата Сообщение от gazlan Посмотреть сообщение
Например, с GSM-модемами стабильно работать больше, чем на 19.2, у меня не получалось.
а это здесь причем?
в твоем примере работают два один со стороны компа другой со стороны модема,и их нужно синхронизировать а У ТС один и тот же порт
Цитата Сообщение от gazlan Посмотреть сообщение
Кстати, побайтная передача необязательна - большинство моделей поддерживают внутреннюю очередь на 16 символов.
ты на прогу то посмотри
Цитата Сообщение от Shadow_i Посмотреть сообщение
WriteFile(hCOM,&bufferout ,sizeof(bufferout),&bc,NULL);
заслать данные в ком порт причем режим записи синхронный
пока не зашлет не выйдет из функции, а куда он их шлет?
и только потом чтение
Цитата Сообщение от Shadow_i Посмотреть сообщение
ReadFile(hCOM,&bufferin,sizeof(bufferin) ,&cb,NULL);
вот если бы тут работал другой порт(например как у тебя модем) то вопросов бы не было
заслали данные в модем и ждем что он нам ответит а здесь один и тот же порт
насчет побайтовой я может тоже не прав
здесь правильное решение многопоточность
один поток главная программа создает поток для чтения( и это поток сидит и ловит данные)
потом создаем поток для записи и как только он начинает слать данные поток для чтения их тут же выхватывает

Добавлено через 6 минут
Цитата Сообщение от gazlan Посмотреть сообщение
но нашел старый код для 485
а где у PC 485??

Цитата Сообщение от gazlan Посмотреть сообщение
отличий не так много
с точки зрения программы их вообще нет
и то и другое последовательный порт
различие в интерфейсе(железе)
232 это токовая петля
485 это диф линия

Добавлено через 15 секунд
Цитата Сообщение от gazlan Посмотреть сообщение
но нашел старый код для 485
а где у PC 485??

Цитата Сообщение от gazlan Посмотреть сообщение
отличий не так много
с точки зрения программы их вообще нет
и то и другое последовательный порт
различие в интерфейсе(железе)
232 это токовая петля
485 это диф линия
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.02.2013, 00:09
здесь правильное решение многопоточность
Точнее, асинхронный режим. Советую посмотреть, как это сделано у Remon Spekreijse (там несколько ошибок в коде, но сути это не меняет). Код под Win32.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.02.2013, 01:32
Цитата Сообщение от gazlan Посмотреть сообщение
Советую посмотреть, как это сделано у Remon Spekreijse
Где посмотреть?
ссылку плиз
Цитата Сообщение от gazlan Посмотреть сообщение
Точнее, асинхронный режим.
асинхронный режим чего?
порта?
или функции WriteFile?
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.02.2013, 02:28
Цитата Сообщение от ValeryS Посмотреть сообщение
Где посмотреть?
В Google, как обычно.

Remon Spekreijse wrote the classic serial-type serialport the latest version 1.2
http://www.codeforge.com/article/22611

Вероятно, эта версия новее той, что я когда-то смотрел.

К слову, при поиске по "Remon Spekreijse" выдаются ссылки и на более новые статьи, использующие или цитирующие его код. Возможно, и там найдется что-то интересное по теме.



асинхронный режим чего? порта? или функции WriteFile?
Порта. Задается при открытии (чтение/запись происходят по ивентам).
ReadFile/WriteFile будут совместно использовать OVERLAPPED structure:

C++
1
2
3
4
5
6
7
8
9
10
11
12
   
   // get a handle to the port
   m_hComm = CreateFile
   (
      pPortName,                       // communication port string (COMX)
      GENERIC_READ | GENERIC_WRITE,    // read/write types
      0,                               // comm devices must be opened with exclusive access
      NULL,                            // no security attributes
      OPEN_EXISTING,                   // comm devices must use OPEN_EXISTING
      FILE_FLAG_OVERLAPPED,            // Async I/O
      0                                // template must be 0 for comm devices
   );
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.02.2013, 02:43
Гм. Извиняюсь. Оказывается, codeforge.com не то место, откуда можно что-то скачать.

Вот другая ссылка, и, на всякий случай, сам файл (вероятно, более старой версии).

http://www.codeguru.com/cpp/i-... l-port.htm
Вложения
Тип файла: zip serialport_demo.zip (65.5 Кб, 8 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2013, 02:43
Помогаю со студенческими работами здесь

Createfile, readfile, writefile
Файл 4 создаётся,но данные из файла 1 не переносятся.Почему? HANDLE myFile; HANDLE myFile2; DWORD buf; char asd; myFile =...

Параметры функций ReadFile и WriteFile
Приветствую. Использую данные функции при работе с COM портом. При использовании проверяю как отработала сама функция (не вернула ли...

ReadFile WriteFile для устройства
В коллаут драйвере реализованы Read/Write диспатчеры. В юзерском приложении открываю девайс и в одном потоке читаю из устройства нон...

Копирование файла кусками по 64КБ, используя ReadFile и WriteFile
Здравствуйте, уважаемые форумчане! На вас последняя надежда! Задача такая: написать программу для копирования файлов кусками по 64кб в...

WriteFile и ReadFile: Suspicious pointer conversion in function main
Всем привет. Знакомлюсь с WinAPI и потоками, но чет не заладилось... Ругается на WriteFile и ReadFile #include &lt;stdio.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru