Форум программистов, компьютерный форум CyberForum.ru

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

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

Прошу прощения за невнятное обяснение, но обясняю как могу...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2011, 03:23     робота с com-портом в шеснадцатиричном коде.
Посмотрите здесь:

Общение с com-портом C++
C++ работа с ком портом?
C++ Работа с COM - портом
C++ Лабораторная робота!
Как работать с com-портом в С++ ? C++
C++ Работа с COM портом
C++ Управление LPT портом
C++ Работа с СОМ-портом
C++ Копиляция программы работы с COM портом
Работа с COM портом C++
C++ Представить число в двоичном коде и в коде Грея
Робота на 5 C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2907 / 1251 / 224
Регистрация: 19.01.2009
Сообщений: 3,242
Завершенные тесты: 1
12.11.2011, 04:59     робота с com-портом в шеснадцатиричном коде. #2
Вот несколько "велосипедное" решение. В примере, конвертируется один байт. Ассерт происходит если во входной строке встречается неизвестный символ. И да, понимает только обозначенный алфавит, если мы скормим число "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;
 
}
GIRATOR
Сообщений: n/a
13.11.2011, 16:50     робота с com-портом в шеснадцатиричном коде. #3
Роботает норм. А как быть с необозанчеными символами. Тоесть вот накорявил по примерам две програми, одна считывает с 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 то вообще абракадабра...
Или ето просто програма читатель норм не может отобразить, а контролерру будет понятно?
Yandex
Объявления
13.11.2011, 16:50     робота с com-портом в шеснадцатиричном коде.
Ответ Создать тему
Опции темы

Текущее время: 15:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru