Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.20.57] |
|
Страницы: (6) 1 2 [3] 4 5 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
ну попробуй после TrComPortBreak добавить TrComPortPurge
Можно еще попробовать добавить небольшие паузы. |
Сообщ.
#32
,
|
|
|
А чему должен быть равен второй параметр TrComPortPurge?
Перед закрытием порта я делаю Sleep(1000); - вроде бы COM-порт стал открываться, но это теперь тяжело оттестить. Не могли бы вы сказать, что дают такие паузы? (вроде бы поток должен закрываться без пауз) А то теперь увеличилось время выполнения программы, и уверенность в правильности ее работы поубавилась. |
Сообщ.
#33
,
|
|
|
Цитата Pauly @ Комбинация значений TrComPortFlushFlagsА чему должен быть равен второй параметр TrComPortPurge? Цитата Pauly @ Они дают системе дополнительное время на выполнение необходимых действий по закрытию порта. Напрмер на то, чтобы выплюнуть остатки в буфере передачи. Не могли бы вы сказать, что дают такие паузы? |
Сообщ.
#34
,
|
|
|
Не пойму,где в примере ошибки, поменял здесь TPpbComPortParameters params =... на PTrComPortParameters, при компиляции выдает первую ошибку здесь-
CBR_9600, // 9600 бод Вот код полностью: #include "TrComPort.h" INT PortId; INT result; BYTE wr_data[] = {1,2,3,4,5,6}; BYTE rd_buffer[16]; PortId = TrComPortOpen(0);// COM1 if( TRCOM_SUCCEEDED(PortId) ) { // порт открыт - устанавливаем параметры соединения PTrComPortParameters params = {tcpmpBaudRate|tcpmpDefaultTimeout|tcpmpByteSize|tcpmpStopBits|tcpmpCheckParity|tcpmpParity|tcpmpEnableRtsControl|tcpmpEnableDtrControl, CBR_9600, // 9600 бод 5000, // по умолчанию тайм-аут 5 с. 8, // 8 бит ONESTOPBIT, // 1 стоп-бит 0, // без проверки четности NOPARITY, // без бита четности RTS_CONTROL_DISABLE,// изначально RTS-off DTR_CONTROL_ENABLE};// изначально DTR-on result = TrComPortSetConfig(PortId,¶ms); if( TRCOM_SUCCEEDED(result) ) { // параметры заданы - устанавливаем управляющие сигналы(DTR-on, RTS-off) result = TrComPortSetControl(PortId, pcpscfSetDtr|pcpscfClearRts); if( TRCOM_SUCCEEDED(result) ) { // управляющие согналы установлены - передаем и принимаем данные // передаем 6 байт, принимаем 1 байт, тайм-аут - 1 с. result = TrComPortWriteAndRead(PortId, wr_data, 6, rd_buffer, 1, 1000); if( TRCOM_SUCCEEDED(result) ) { // что-нибудь делаем далее } } } // т.к. порт больше не нужен, закрываем его result = TrComPortClose(PortId); } |
Сообщ.
#35
,
|
|
|
Должно быть не PTrComPortParameters, а TrComPortParameters
|
Сообщ.
#36
,
|
|
|
Еще была ошибка здесь- result = TrComPortSetControl(PortId, pcpscfSetDtr|pcpscfClearRts); , нужно- tcpscfSetDtr|tcpscfClearRts...
Но все равно ошибки выдает-такие: [Linker Error] Unresolved external 'TrComPortOpen' referenced from D:\COMPORT\COMPORT.OBJ [Linker Error] Unresolved external 'TrComPortSetConfig' referenced from D:\COMPORT\COMPORT.OBJ [Linker Error] Unresolved external 'TrComPortSetControl' referenced from D:\COMPORT\COMPORT.OBJ [Linker Error] Unresolved external 'TrComPortWriteAndRead' referenced from D:\COMPORT\COMPORT.OBJ [Linker Error] Unresolved external 'TrComPortClose' referenced from D:\COMPORT\COMPORT.OBJ Не подскажете, в чем дело ? |
Сообщ.
#37
,
|
|
|
Библиотеку надо к проекту подключить
|
Сообщ.
#38
,
|
|
|
Подскажите, как подключить dll к проекту-я совсем начинающий, пробовал через add to proekt - такие же ошибки, пробовал добавлять lib файлы- тоже ошибка,но другая.
|
Сообщ.
#39
,
|
|
|
Add to project -> расширение ".LIB", выбрать TrComPort_BCB.lib, нажать Ok
P.S. Интересно, я один такой устаревший - сначала читаю литературу, потом делаю. |
Сообщ.
#40
,
|
|
|
Вот спасибо,заработало, я пробовал подключать оба lib-а, а надо оказывается только этот.
|
Сообщ.
#41
,
|
|
|
С этим компонентом разобрался, сейчас мучаю модем Моторолы, который по USB соединен к компу, драйвером создается виртуальный порт СОМ3. По АТ командам все работает нормально, когда вот так-
#include <vcl.h> #pragma hdrstop #include "COMPORT.h" #include "TrComPort.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { int PortId; int result; char end[] = {"at+ckpd=\"e\"\r"}; // завершить вызов char nabor_nomera[] = {"at+ckpd=\"89123456789\"|at+ckpd=\"s\"\r"}; // набрать номер и звонить char zvonit[] = {"at+ckpd=\"s\"\r"}; // звонить(зеленая кнопка телефона) PortId = TrComPortOpen(2); // COM3 if( TRCOM_SUCCEEDED(PortId) ) { // порт открыт - устанавливаем параметры соединения TrComPortParameters params = {tcpmpBaudRate|tcpmpDefaultTimeout|tcpmpByteSize|tcpmpStopBits|tcpmpCheckParity|tcpmpParity|tcpmpEnableRtsControl|tcpmpEnableDtrControl, CBR_9600, // 9600 бод 5000, // по умолчанию тайм-аут 5 с. 8, // 8 бит ONESTOPBIT, // 1 стоп-бит 0, // без проверки четности NOPARITY, // без бита четности RTS_CONTROL_DISABLE,// изначально RTS-off DTR_CONTROL_ENABLE};// изначально DTR-on result = TrComPortSetConfig(PortId,¶ms); result = TrComPortSetControl(PortId, tcpscfSetDtr|tcpscfClearRts); TrComPortWriteArray(PortId, end, 20, 1000); // Прервать вызов TrComPortWriteArray(PortId, nabor_nomera, 35, 1000); // Набрать номер Sleep(1000); // пробовал с паузой и без TrComPortWriteArray(PortId, zvonit, 15, 1000); Sleep(3000); // пауза TrComPortWriteArray(PortId, end, 20, 1000); // Прервать вызов } } } Когда устанавливаю на форму таймер, чтобы пробовать делать дозвон через определенное время, и переменные выношу за кавычки формы и кусок кода вставляю в обработчик таймера, то уже все работает неправильно- уже набор номера не работает. Знаю это к этой теме не относится, скорее к азам программирования, но т.к. вопрос связан с этим компонентом-задаю здесь. Вот нерабочий код- #pragma hdrstop #include "COMPORT.h" #include "TrComPort.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int PortId; int result; char end[] = {"at+ckpd=\"e\"\r"}; // завершить вызов char nabor_nomera[] = {"at+ckpd=\"89123456789\"|at+ckpd=\"s\"\r"}; // набрать номер и звонить char zvonit[] = {"at+ckpd=\"s\"\r"}; // звонить(зеленая кнопка телефона) //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { PortId = TrComPortOpen(2); // COM3 if( TRCOM_SUCCEEDED(PortId) ) { // порт открыт - устанавливаем параметры соединения TrComPortParameters params = {tcpmpBaudRate|tcpmpDefaultTimeout| tcpmpByteSize|tcpmpStopBits|tcpmpCheckParity|tcpmpParity|tcpmpEnableRtsControl|tcpmpEnableDtrControl, CBR_9600, // 9600 бод 5000, // по умолчанию тайм-аут 5 с. 8, // 8 бит ONESTOPBIT, // 1 стоп-бит 0, // без проверки четности NOPARITY, // без бита четности RTS_CONTROL_DISABLE,// изначально RTS-off DTR_CONTROL_ENABLE};// изначально DTR-on result = TrComPortSetConfig(PortId,¶ms); result = TrComPortSetControl(PortId, tcpscfSetDtr|tcpscfClearRts); Timer1->Interval=10000; Timer1->Enabled=true; } void __fastcall TForm1::Timer1Timer(TObject *Sender) { TrComPortWriteArray(PortId, end, 20, 1000); // Прервать вызов TrComPortWriteArray(PortId, nabor_nomera, 35, 1000); // Набрать номер Sleep(1000); // пауза TrComPortWriteArray(PortId, zvonit, 15, 1000); Sleep(3000); // пауза TrComPortWriteArray(PortId, end, 20, 1000); // Прервать вызов } Прошу обьяснить, что здесь не так. |
Сообщ.
#42
,
|
|
|
к проблеме это скорее всего не относится, но правильнее писать
TrComPortWriteArray(PortId, end, sizeof(end)-1, 1000); Добавлено А вообще - модем вообще-то должен отвечать на команды. Вот ответы и надо смотреть. |
Сообщ.
#43
,
|
|
|
Да нет,относится,сделал так-и заработало,еще раз огромное спасибо!
|
Сообщ.
#44
,
|
|
|
В моем примере выше,где char nabor nomera, как можно внутрь кавычек АТ команды, вместо номера телефона поставить переменную?
|
Сообщ.
#45
,
|
|
|
sprintf юный падован использовать должен.
|