Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
GIRATOR

робота с com-портом в шеснадцатиричном коде.

12.11.2011, 03:23. Показов 1199. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Я как каждый начинающий в прграмировании столкнулса с проблемой, вызваной скорее отсутствием опыта, чем сложностью задачи. Собственно к делу.
C/C++ я только осваиваю - тем не менее задача поставлена не "примитивная"
В ком-порт нужно отправить команду (контролеру). Команды задаютса в шеснадцатиричном коде, например: "F0AA 16FB 12FD 24CC 57BB 0000 CRC16 55FF". Самостоятельно по примерам разобралса с отпрвкой(прийомом) текста через COM, без преобразования. Собственно вопрос: как команду заданую к примеру в текстовом файле или находящююся в строчке, передать как шеснадцатиричный код? То есть чтоб в коде програмы команда выглядела как в примере (текст ), но чтоб каждый символ считывалса в hex а не в сhar? Иными словами чтоб char "0F" --> dec "15"... а не char "0F" --> dec"4970"...

Прошу прощения за невнятное обяснение, но обясняю как могу...
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2011, 03:23
Ответы с готовыми решениями:

Станет ли видео с портом PCI-Express x16 2.х на мать с портом PCIe 2.0
Всем привет. Хочу поставить новое видео, но вот смущают порта.Будет ли оно нормально работать и будет ли вообще работать. Мать asus...

Робота с .htaccess робота с адресом перенаправление
Здравствуйте как мне в .htaccess сделать перенаправление вот этих адресов /index.php?do=reg на /registr.html ...

ПРАКТИЧНА РОБОТА № 1 „РОБОТА З МНОЖИНАМИ”
Ребята помогите пожалуйста сделать практычну роботу очень нужно буду благодарна. Умова задачі така: Використовуючи множину символів...

2
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
12.11.2011, 04:59
Вот несколько "велосипедное" решение. В примере, конвертируется один байт. Ассерт происходит если во входной строке встречается неизвестный символ. И да, понимает только обозначенный алфавит, если мы скормим число "ff", например на конвертирование, то ассертнет. Надеюсь, разберетесь:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdlib.h>
#include <string.h>
#include <assert.h>
 
unsigned char byte_str2bin (const char * p) {
 
    char * t;
    int h, l;
    char hexAlph[] = "0123456789ABCDEF";
 
    t = strchr(hexAlph, *p);
    assert(t);
    h = t - hexAlph;
 
    ++p;
 
    t = strchr(hexAlph, *p);
    assert(t);
    l = t - hexAlph;
 
    return ((h << 4) | l);
 
}
 
int main( int argc, char * argv[] ) {
 
    char byteInStr[] = "FF";
    unsigned char byteInBin;
    byteInBin = byte_str2bin(byteInStr);
    return 0;
 
}
0
GIRATOR
13.11.2011, 16:50
Лучший ответ Сообщение было отмечено как решение

Решение

Роботает норм. А как быть с необозанчеными символами. Тоесть вот накорявил по примерам две програми, одна считывает с com и выводит на екран как текст:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <fstream>
using namespace std;
 
int main()
{
    char name[4]="com";
    char symbol='Q';
    char *number=new char;
    HANDLE hport;
    DWORD real_read;
    DCB dcb;
    BOOL succ;
    ofstream out;
 
    cout <<"TEST READING FROM COM-PORT AND WRITING IN FILE" <<endl <<endl;
    cout <<"ENTER COM-PORT NUMBER: ";
    cin >>number;
    cout <<endl;
    strcat(name,number);
    hport=CreateFile(name,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 
    if(hport==INVALID_HANDLE_VALUE)
    {   cout <<"COM" <<number <<"  CAN'T BE OPENED" <<endl;
        getche();
        return 1;   }
 
    out.open("TEST.a32",ios::trunc);
 
    if(!out)
    {   cout <<"FILE 'TEST.a32' CAN'T BE OPENED" <<endl;
        getche();
        return 1; }
 
    dcb.DCBlength=sizeof(dcb);
    succ=GetCommState(hport,&dcb);
    dcb.BaudRate=CBR_115200;
    dcb.ByteSize=8;
    dcb.Parity=EVENPARITY;
    dcb.StopBits=2;
    succ=SetCommState(hport,&dcb);
 
    while(true)
    {   ReadFile(hport,&symbol,1,&real_read,NULL);
        if(real_read==1) { out <<symbol; cout << symbol; } }
 
    out.close();
    CloseHandle(hport);
    return 0;
}

А вторая собственно отправляет, считывает с клавы срвазу в 16-м коде, тоесть набираем 41 получаем А, 42 - В... и т.д .:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
using namespace std;
 
int main()
{
    char name[4]="com";
    char *number=new char;
    HANDLE hport;
    DWORD real_write;
    DCB dcb;
    BOOL succ;
    char symbol[512];
 
 
    cout <<"TEST SENDING TO COM-PORT" <<endl <<endl;
    cout <<"ENTER COM-PORT NUMBER: ";
    cin >>number;
    cout <<endl;
    strcat(name,number);
 
    hport=CreateFile(name,GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    if(hport==INVALID_HANDLE_VALUE)
    { cout <<"COM" <<number <<"CAN'T BE OPENED" <<endl;
        getche();
        return 1; }
 
    dcb.DCBlength=sizeof(DCB);
    succ=GetCommState(hport,&dcb);
    dcb.BaudRate=CBR_115200;
    dcb.ByteSize=8;
    dcb.Parity=EVENPARITY;
    dcb.StopBits=2;
    succ=SetCommState(hport,&dcb);
 
  int s =0;
  for (s = 0; s < 255; s++)
    {
    cout << endl <<">";
    if (feof(stdin)) break;
    fflush(stdout);
    scanf("%x", symbol);
    int i=0;
      while (symbol[i] != 0)
      { WriteFile(hport,&symbol[i],1,&real_write,NULL);
      i = i+1; }
    }        
   
    CloseHandle(hport);
    return 0;
}
И ну и тоже самое, с "FF", а если ввести 0 или чегото до 21 то вообще абракадабра...
Или ето просто програма читатель норм не может отобразить, а контролерру будет понятно?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2011, 16:50
Помогаю со студенческими работами здесь

Нарисовать робота, как пример взять робота из мультфильма "Валли"
Графика в Дельфи

Управление com портом
Необходимо напрямую управлять som портом. Т.е. подать на определённую ногу 1(или 0), считать состояние ноги. Есть ли для этого...

Работа с COM - портом
Не могу сделать чтобы, при работе с соm - портом возможно было выбирать как автоматические настройки по(default), так и ручные настройки....

Работа с COM портом
Есть некое устройство подключённое к COM порту. Создаю консольное приложение с таким кодом: using System; using System.IO.Ports; ...

работа с COM-портом
Может ли кто-нибудь подсказать библиотеку для работы с com (или lpt) портом на си шарпе. Мне нужно считать сколько единичек пришло за...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru