Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
12 / 12 / 5
Регистрация: 10.09.2009
Сообщений: 261

Не могу записчать в com порт из Memo.

11.01.2010, 14:42. Показов 4169. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Не получается из Мемо записать в ком порт.
Мои глобальные переменные:
C++
1
2
3
4
HANDLE handle;
DWORD numbytes_ok, temp;
COMSTAT ComState;
OVERLAPPED Overlap;
Мой баттон1(Здесь я создаю ком потр):
C++
1
2
3
4
5
6
7
8
COMMTIMEOUTS CommTimeOuts; 
DCB dcb;
String str=ComboBox1->Items[0].GetText() ;
handle = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
GetCommState(handle, &dcb);
SetCommState(handle, &dcb);
PurgeComm(handle, PURGE_RXCLEAR); 
PurgeComm(handle, PURGE_TXCLEAR);
Мой баттон 2. Здесь по идее берется информация из Мемо1, и пишется в порт.
C++
1
2
3
ClearCommError(handle, &temp, &ComState);
if(!temp)
WriteFile(handle, Memo1->Lines, sizeof(Memo1->Lines), &numbytes_ok, &Overlap);
Баттон3. Здесь информация читается из ком порта в Мемо2.
C++
1
2
3
ClearCommError(handle, &temp, &ComState);
if(!temp)
ReadFile(handle,  Memo2->Lines, sizeof(Memo1->Lines), &numbytes_ok, &Overlap);
Все компилируется, я ввожу текст в Мемо1, нажимаю баттон1, затем баттон2, затем баттон3, но данные введенные Мемо1 не появляются в Мемо2.
Почему?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2010, 14:42
Ответы с готовыми решениями:

Разбивка прокси из memo на порт и ип
Всем привет, столкнулся с проблемой Разбиваю прокси из smemo3 на им и порт таким вот кодом if Form1.sCheckBox1.Checked=True then begin ...

Не могу открыть порт
Доброго времени суток! Не могу открыть порты на своем adsl-модеме ICxDSL 5633 E. В интернете прочитал, что нужно заходить в раздел Advanced...

Не могу пробросить порт
Здравствуйте! На днях было переключение на кабельный интернет (IdNet - оптоволокно до свича в подъезде, потом сетевухой по квартирам) и...

12
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
11.01.2010, 16:12
C++
1
2
for(int i=0;i<Memo1->Lines->Count;i++)
WriteFile(handle, Memo1->Lines->Strings[i].c_str(), Memo1->Lines->Strings[i].Length(), &numbytes_ok, &Overlap);
И с чтением то же самое. Желательно, конечно, добавлять "\n" в конец строки, чтобы получать легче было.. А зачем тока overlapped здесь используете?

Добавлено через 14 минут
Вот написал быстренько маленький примерчик.. В Вашем случае оптимально будет:
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
#define READ_TIMEOUT_TOTAL  1000
#define READ_TIMEOUT        (READ_TIMEOUT_TOTAL/50)
class TSerialConnection
{
 
 
public:
        TDCB DCB;
        HANDLE SerialHandle;
        void __fastcall SendCommand(AnsiString Command);
        AnsiString __fastcall ReceiveCommand();
 
        TSerialConnection(AnsiString comPort);
        ~TSerialConnection(void);
 
};
 
TSerialConnection::TSerialConnection(AnsiString comPort)
{
 
    SerialHandle = CreateFile(comPort.UpperCase().c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
        memset(&DCB, 0, sizeof(DCB));
        DCB.DCBlength = sizeof(DCB);
    GetCommState(SerialHandle, &DCB);
    DCB.BaudRate = CBR_9600;
    DCB.ByteSize = 8;
    DCB.Parity = NOPARITY;
    DCB.StopBits = ONESTOPBIT;
        DCB.fParity = 0;
        DCB.fOutxCtsFlow = 0;
        DCB.fOutxDsrFlow = 0;
        DCB.fOutX = 0;
        DCB.fInX = 0;
        DCB.fErrorChar = 0;
        DCB.fRtsControl = 0;
    SetCommState(SerialHandle, &DCB);
        COMMTIMEOUTS ct;
        ct.ReadIntervalTimeout = 0;
        ct.ReadTotalTimeoutMultiplier = 0;
        ct.ReadTotalTimeoutConstant = READ_TIMEOUT;
        ct.WriteTotalTimeoutMultiplier = 0;
        ct.WriteTotalTimeoutConstant = 0;
        SetCommTimeouts(SerialHandle, &ct);
}
 
//---------------------------------------------------------------------------
TSerialConnection::~TSerialConnection(void)
{
        CloseHandle(SerialHandle);
}
//---------------------------------------------------------------------------
void __fastcall TSerialConnection::SendCommand(AnsiString Command)
{
    PurgeComm(SerialHandle,PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
    DWORD nb;
    if (SerialHandle!=INVALID_HANDLE_VALUE)
    {
 
        DWORD dwBytesWritten;
        int rc;
 
        WriteFile(SerialHandle, Command.c_str(),Command.Length(), &dwBytesWritten, NULL);
 
    }
}
//---------------------------------------------------------------------------
AnsiString __fastcall TSerialConnection::ReceiveCommand()
{
    AnsiString Result;
        bool IsError=true;
    if (SerialHandle!=INVALID_HANDLE_VALUE)
    {
        char buffer[255];
        DWORD dwBytesRead;
                DWORD dwTotal = 0;
                DWORD dwTimeout = 0;
 
        memset(buffer,0,sizeof(buffer));
                do
                {
                    ReadFile(SerialHandle, buffer+dwTotal, sizeof(buffer)-dwTotal, &dwBytesRead, NULL);
                        if (dwBytesRead != 0)
                        {
                            dwTotal += dwBytesRead;
                            if (strchr(buffer, '\n') != NULL)
                            {
                                IsError=false;
                                    break;
                                }
                        }
                        dwTimeout += READ_TIMEOUT;
                }
                while (dwTimeout < READ_TIMEOUT_TOTAL);
                if(!IsError)
                    Result = buffer;
                else
                    Result = "";
 
    }
        return Result;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TSerialConnection * SerialConnection = new TSerialConnection("Com1");
    for(int i=0;i<Memo1->Lines->Count;i++)
        {
            SerialConnection->SendCommand(Memo1->Lines->Strings[i]+"\n");
        }
        delete SerialConnection;
}
//---------------------------------------------------------------------------
2
12 / 12 / 5
Регистрация: 10.09.2009
Сообщений: 261
11.01.2010, 16:12  [ТС]
Цитата Сообщение от Зоти Сергей Посмотреть сообщение
C++
1
2
for(int i=0;i<Memo1->Lines->Count;i++)
WriteFile(handle, Memo1->Lines->Strings[i].c_str(), Memo1->Lines->Strings[i].Length(), &numbytes_ok, &Overlap);
И с чтением то же самое. Желательно, конечно, добавлять "\n" в конец строки, чтобы получать легче было.. А зачем тока overlapped здесь используете?
К сожалению все тоже самое
Я вот думаю, может мне нужно какоенибудь устройство с ком портом, чтобы программа туда писала и читала, или это не обязательно?
пысы
Зачем overlapped используется не знаю, я тупо с примера содрал, и вместо буфера подставил Memo.
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
11.01.2010, 16:22
Ну.. вам нужен кабель нуль модема... Спаять как 2 пальца об асфальт...
Прикрепил схему... Это вам минимум понадобится.
Потом втыкаете один конец кабеля в ком1 а другой в ком2(если все на одном компьютере делается).
И в программе открываете 2 порта. "COM1" и "COM2".
Если что не понятно - пишите. Помогу.
Миниатюры
Не могу записчать в com порт из Memo.  
1
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
13.01.2010, 13:57
Вам нужен один разъем. коротните вход и выход данных( контакты 2 и 3)- будете принимать то же, что и послали=)
вот это минимум- остальное чуть больше минимума.
ах да. еще можете побаловаться с модемом например. у меня в ноуте встроенный модем. висит на каком-то порту. коннектитесь и шлете- слушаете ответ=)
1
12 / 12 / 5
Регистрация: 10.09.2009
Сообщений: 261
13.01.2010, 15:19  [ТС]
Всем спасибо, Разьем с замкнутыми 2-м и 3-м входами, мне уже зделал начальник, даже дал рабочую прогу с кодом. Сейчас моя задача разобраться с кодом, посылать и принимать информацию с сом порта. Но моя прога почемуто не работает, а его работает.
Вот мой полный код:
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
HANDLE handle;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
COMMTIMEOUTS CommTimeOuts; 
DCB dcb;
String str=ComboBox1->Items[0].GetText() ;
handle = CreateFile("str", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
GetCommState(handle, &dcb);
SetCommState(handle, &dcb);
PurgeComm(handle, PURGE_RXCLEAR); 
PurgeComm(handle, PURGE_TXCLEAR);
 
}
//---------------------------------------------------------------------------
 
DWORD numbytes_ok, temp;
COMSTAT ComState;
OVERLAPPED Overlap;
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClearCommError(handle, &temp, &ComState);
if(!temp)
for(int i=0;i<Memo1->Lines->Count;i++)
WriteFile(handle, Memo1->Lines->Strings[i].c_str(), Memo1->Lines->Strings[i].Length(), &numbytes_ok, &Overlap);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ClearCommError(handle, &temp, &ComState);
if(!temp)
for(int i=0;i<Memo1->Lines->Count;i++)
ReadFile(handle, Memo2->Lines->Strings[i].c_str(), Memo1->Lines->Strings[i].Length(), &numbytes_ok, &Overlap);
}
Но информация из Memo1, посланая в ком порт так и не появляется в Memo2.
В чем может быть ошибка?
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
13.01.2010, 16:37
Не.. ну елки палки. Я же Вам написал рабочий пример. Там несколько строчек кода.
Никаких Overlapped не надо.

Во вложенном проект с двумя Memo.

Нажали на кнопку, открылся ком порт, из Memo1 отправились данные в ком порт и оттуда же считались и появились в Memo2.
Этот пример как раз будет работать с замкнутыми 2 и 3-ей ножками. Даже переделывать ничего не надо.

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
#define READ_TIMEOUT_TOTAL  1000
#define READ_TIMEOUT        (READ_TIMEOUT_TOTAL/100)
class TSerialConnection
{
 
 
public:
        TDCB DCB;
        HANDLE SerialHandle;
        void __fastcall SendCommand(AnsiString Command);
        AnsiString __fastcall ReceiveCommand();
 
        TSerialConnection(AnsiString comPort);
        ~TSerialConnection(void);
 
};
 
TSerialConnection::TSerialConnection(AnsiString comPort)
{
 
        SerialHandle = CreateFile(comPort.UpperCase().c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
        memset(&DCB, 0, sizeof(DCB));
        DCB.DCBlength = sizeof(DCB);
        GetCommState(SerialHandle, &DCB);
        DCB.BaudRate = CBR_9600;
        DCB.ByteSize = 8;
        DCB.Parity = NOPARITY;
        DCB.StopBits = ONESTOPBIT;
        DCB.fParity = 0;
        DCB.fOutxCtsFlow = 0;
        DCB.fOutxDsrFlow = 0;
        DCB.fOutX = 0;
        DCB.fInX = 0;
        DCB.fErrorChar = 0;
        DCB.fRtsControl = 0;
        SetCommState(SerialHandle, &DCB);
        COMMTIMEOUTS ct;
        ct.ReadIntervalTimeout = 0;
        ct.ReadTotalTimeoutMultiplier = 0;
        ct.ReadTotalTimeoutConstant = READ_TIMEOUT;
        ct.WriteTotalTimeoutMultiplier = 0;
        ct.WriteTotalTimeoutConstant = 0;
        SetCommTimeouts(SerialHandle, &ct);
}
 
//---------------------------------------------------------------------------
TSerialConnection::~TSerialConnection(void)
{
        CloseHandle(SerialHandle);
}
//---------------------------------------------------------------------------
void __fastcall TSerialConnection::SendCommand(AnsiString Command)
{
        PurgeComm(SerialHandle,PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
        DWORD nb;
        if (SerialHandle!=INVALID_HANDLE_VALUE)
        {
 
                DWORD dwBytesWritten;
                int rc;
 
                WriteFile(SerialHandle, Command.c_str(),Command.Length(), &dwBytesWritten, NULL);
 
        }
}
//---------------------------------------------------------------------------
AnsiString __fastcall TSerialConnection::ReceiveCommand()
{
        AnsiString Result;
        bool IsError=true;
        if (SerialHandle!=INVALID_HANDLE_VALUE)
        {
                char buffer[255];
                DWORD dwBytesRead;
                DWORD dwTotal = 0;
                DWORD dwTimeout = 0;
 
                memset(buffer,0,sizeof(buffer));
                do
                {
                        ReadFile(SerialHandle, buffer+dwTotal, sizeof(buffer)-dwTotal, &dwBytesRead, NULL);
                        if (dwBytesRead != 0)
                        {
                                dwTotal += dwBytesRead;
                                if (strchr(buffer, '\n') != NULL)
                                {
                                        IsError=false;
                                        break;
                                }
                        }
                        dwTimeout += READ_TIMEOUT;
                }
                while (dwTimeout < READ_TIMEOUT_TOTAL);
                if(!IsError)
                        Result = buffer;
                else
                        Result = "";
 
        }
        if(Result!="")
            return Result.SubString(1,Result.Pos("\n")-1);
        return Result;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        TSerialConnection * SerialConnection = new TSerialConnection("Com1");
        for(int i=0;i<Memo1->Lines->Count;i++)
        {
                SerialConnection->SendCommand(Memo1->Lines->Strings[i]+"\n");
                Memo2->Lines->Add(SerialConnection->ReceiveCommand());
        }
        delete SerialConnection;
}
//---------------------------------------------------------------------------
Вложения
Тип файла: zip Project1.zip (13.8 Кб, 176 просмотров)
1
12 / 12 / 5
Регистрация: 10.09.2009
Сообщений: 261
13.01.2010, 16:55  [ТС]
Ураааааааааа!!!!!!
Заработало!!!!!
Сергей, спасибо вам огромное.
0
kitart
25.02.2010, 12:27
Цитата Сообщение от Зоти Сергей Посмотреть сообщение
Во вложенном проект с двумя Memo.
Добрый день!
А етот проект роботает под любой ОС или только под Винду?
Эсли так, то как его переделать под Unix?
12 / 12 / 5
Регистрация: 10.09.2009
Сообщений: 261
25.02.2010, 16:35  [ТС]
Цитата Сообщение от kitart Посмотреть сообщение
Добрый день!
А етот проект роботает под любой ОС или только под Винду?
Эсли так, то как его переделать под Unix?
Я конечно не специалисть, но насколько я знаю, компелироваться не будет, потому что программа сделана как виндовский апликайшин, а что бы программа работал под линух ее надо сделать меж осевой, для этого в билдере нажимаем File->New->Other->CLX Application, и тут пишем текст программы.
Насколько мне известно существует два вида приложений vcl и clx, vcl испльзует библиотеки майкросовта и будет работать только под виндовс, а CLX приложение будет работать под любой ОС.
0
kitart
27.02.2010, 14:01
Цитата Сообщение от Hacker_ Посмотреть сообщение
vcl испльзует библиотеки майкросовта и будет работать только под виндовс, а CLX приложение будет работать под любой ОС.
Спасибо, ето я понял и немного погуглил. CLX - ето бибилотека крос-платформенных компонент, в осоновном визуальних и компонент работающих с базами даных. А про СОМ-порты я ничего не нашол.

Возникает, опять же вопрос, посредством выше использованых функций возможно добится результата по Unix?
yatsik77
22.05.2010, 10:08
привет. Разбираюсь с работой Ком порта. Прочитал много статей. Создал свой клас.
Всё работает если одной кнопкой объявлять экземпляр класа записывать в порт и закрывать.
Как сделать чтоб одной кнопкой открывать порт, второй записывать в порт а третей закрывать.
foby
30.07.2010, 08:54
Цитата Сообщение от Зоти Сергей Посмотреть сообщение
Не.. ну елки палки. Я же Вам написал рабочий пример. Там несколько строчек кода.
Никаких Overlapped не надо.

Во вложенном проект с двумя Memo.

Нажали на кнопку, открылся ком порт, из Memo1 отправились данные в ком порт и оттуда же считались и появились в Memo2.
Этот пример как раз будет работать с замкнутыми 2 и 3-ей ножками. Даже переделывать ничего не надо.

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
#define READ_TIMEOUT_TOTAL  1000
#define READ_TIMEOUT        (READ_TIMEOUT_TOTAL/100)
class TSerialConnection
{
 
 
public:
        TDCB DCB;
        HANDLE SerialHandle;
        void __fastcall SendCommand(AnsiString Command);
        AnsiString __fastcall ReceiveCommand();
 
        TSerialConnection(AnsiString comPort);
        ~TSerialConnection(void);
 
};
 
TSerialConnection::TSerialConnection(AnsiString comPort)
{
 
        SerialHandle = CreateFile(comPort.UpperCase().c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
        memset(&DCB, 0, sizeof(DCB));
        DCB.DCBlength = sizeof(DCB);
        GetCommState(SerialHandle, &DCB);
        DCB.BaudRate = CBR_9600;
        DCB.ByteSize = 8;
        DCB.Parity = NOPARITY;
        DCB.StopBits = ONESTOPBIT;
        DCB.fParity = 0;
        DCB.fOutxCtsFlow = 0;
        DCB.fOutxDsrFlow = 0;
        DCB.fOutX = 0;
        DCB.fInX = 0;
        DCB.fErrorChar = 0;
        DCB.fRtsControl = 0;
        SetCommState(SerialHandle, &DCB);
        COMMTIMEOUTS ct;
        ct.ReadIntervalTimeout = 0;
        ct.ReadTotalTimeoutMultiplier = 0;
        ct.ReadTotalTimeoutConstant = READ_TIMEOUT;
        ct.WriteTotalTimeoutMultiplier = 0;
        ct.WriteTotalTimeoutConstant = 0;
        SetCommTimeouts(SerialHandle, &ct);
}
 
//---------------------------------------------------------------------------
TSerialConnection::~TSerialConnection(void)
{
        CloseHandle(SerialHandle);
}
//---------------------------------------------------------------------------
void __fastcall TSerialConnection::SendCommand(AnsiString Command)
{
        PurgeComm(SerialHandle,PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
        DWORD nb;
        if (SerialHandle!=INVALID_HANDLE_VALUE)
        {
 
                DWORD dwBytesWritten;
                int rc;
 
                WriteFile(SerialHandle, Command.c_str(),Command.Length(), &dwBytesWritten, NULL);
 
        }
}
//---------------------------------------------------------------------------
AnsiString __fastcall TSerialConnection::ReceiveCommand()
{
        AnsiString Result;
        bool IsError=true;
        if (SerialHandle!=INVALID_HANDLE_VALUE)
        {
                char buffer[255];
                DWORD dwBytesRead;
                DWORD dwTotal = 0;
                DWORD dwTimeout = 0;
 
                memset(buffer,0,sizeof(buffer));
                do
                {
                        ReadFile(SerialHandle, buffer+dwTotal, sizeof(buffer)-dwTotal, &dwBytesRead, NULL);
                        if (dwBytesRead != 0)
                        {
                                dwTotal += dwBytesRead;
                                if (strchr(buffer, '\n') != NULL)
                                {
                                        IsError=false;
                                        break;
                                }
                        }
                        dwTimeout += READ_TIMEOUT;
                }
                while (dwTimeout < READ_TIMEOUT_TOTAL);
                if(!IsError)
                        Result = buffer;
                else
                        Result = "";
 
        }
        if(Result!="")
            return Result.SubString(1,Result.Pos("\n")-1);
        return Result;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        TSerialConnection * SerialConnection = new TSerialConnection("Com1");
        for(int i=0;i<Memo1->Lines->Count;i++)
        {
                SerialConnection->SendCommand(Memo1->Lines->Strings[i]+"\n");
                Memo2->Lines->Add(SerialConnection->ReceiveCommand());
        }
        delete SerialConnection;
}
//---------------------------------------------------------------------------

А как можно реализовать запись в порт данных в хексе, чтобы совсем без перевода?
Скажем надо записать в порт в таком виде - 26 52 00 00 00 00 00 71 F6 7E
и не получить при этом 32 36 35 32 30 30 30 30 30 30 30 30 30 30 37 31 46 36 37
Спасибо.

Добавлено через 18 часов 18 минут
Цитата Сообщение от foby Посмотреть сообщение
А как можно реализовать запись в порт данных в хексе, чтобы совсем без перевода?
Скажем надо записать в порт в таком виде - 26 52 00 00 00 00 00 71 F6 7E
и не получить при этом 32 36 35 32 30 30 30 30 30 30 30 30 30 30 37 31 46 36 37
Спасибо.
Подскажите, очень надо.
Спасибо.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2010, 08:54
Помогаю со студенческими работами здесь

Не могу открыть порт
Прописал, в бранмауре порты 29688 на входящие и исходящие, прописал в роутере проброс как тут...

Не могу открыть порт
Доброе утро всем. Для работы с ком портом использую библиотеку TrComPort. Но столкнулся с проблемой, уже все варианты какие были...

Не могу открыть COM порт
Необходимо наладить запись и чтение в/из COM порта. Никогда этим не занимался, поэтому после обильного поиска информации примерно понял,...

Не могу открыть COM порт.=(
Не могу открыть COM порт, программирую на VS2012 только неделю и код пишу по книжке, но ошибка мне не понятна(( , вот собственно код: ...

Не могу прокинуть порт 3389
Помогите!!! На роутере не могу прокинуть порт 3389. Может кто поможет и обьяснит может у меня серый IP: 10.68.240.11


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru