Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.75.227] |
|
Страницы: (6) « Первая ... 2 3 [4] 5 6 все ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
trainer
procedure TForm1.Button7Click(Sender: TObject); var PortId: Integer; res: Integer; wr_data: array[1..8] of Byte; rd_buffer: array[1..8] of Byte; begin PortId := TrComPortOpen(0); (* COM1 *) if TRCOM_SUCCEEDED(PortId) then // порт открыт - устанавливаем параметры соединения TrComPortParameters(tcpmpBaudRate or tcpmpDefaultTimeout or tcpmpByteSize or tcpmpStopBits or tcpmpCheckParity or tcpmpParity or tcpmpEnableRtsControl or tcpmpEnableDtrControl, //[B]на этой строчке выдаёт ошибку((( натолкните плз на мысль...[/B] CBR_9600, (* 9600 бод *) 5000, (* по умолчанию тайм-аут 5 с. *) 8, (* 8 бит *) ONESTOPBIT, (* 1 стоп-бит *) 0, (* без проверки четности *) NOPARITY, (* без бита четности *) RTS_CONTROL_DISABLE,(* изначально RTS-off *) DTR_CONTROL_ENABLE);(* изначально DTR-on *) res := TrComPortSetConfig(PortId,params); if TRCOM_SUCCEEDED(res) then begin (* параметры заданы - устанавливаем управляющие сигналы(DTR-on, RTS-off) *) res := TrComPortSetControl(PortId, TRCOM_CTRL(tcpccSet,tcpccClear)); if TRCOM_SUCCEEDED(result) then begin (* управляющие согналы установлены - передаем и принимаем данные передаем 6 байт, принимаем 1 байт, тайм-аут - 1 с. *) res := TrComPortWriteAndRead(PortId, wr_data, 6, rd_buffer, 1, 1000); if TRCOM_SUCCEEDED(result) then begin (* что-нибудь делаем далее *) end; end; end; (* т.к. порт больше не нужен, закрываем его *) result = TrComPortClose(PortId); end; |
Сообщ.
#47
,
|
|
|
Не паскалист я. Неправильно там вроде написано.
Либо const params : TrComPortParameters = (DesiredParams: tcpmpBaudRate or tcpmpDefaultTimeout or tcpmpByteSize or tcpmpStopBits or tcpmpCheckParity or tcpmpParity or tcpmpEnableRtsControl or tcpmpEnableDtrControl, BaudRate: CBR_9600, (* 9600 бод *) DefaultTimeout: 5000, (* по умолчанию тайм-аут 5 с. *) ByteSize: 8, (* 8 бит *) StopBits: ONESTOPBIT, (* 1 стоп-бит *) CheckParity: 0, (* без проверки четности *) Parity: NOPARITY, (* без бита четности *) RtsControl: RTS_CONTROL_DISABLE,(* изначально RTS-off *) DtrControl: DTR_CONTROL_ENABLE);(* изначально DTR-on *) var PortId: Integer; res: Integer; wr_data: array[1..8] of Byte; rd_buffer: array[1..8] of Byte; begin PortId := TrComPortOpen(0); (* COM1 *) if TRCOM_SUCCEEDED(PortId) then // порт открыт - устанавливаем параметры соединения res := TrComPortSetConfig(PortId,params); if TRCOM_SUCCEEDED(res) then begin (* параметры заданы - устанавливаем управляющие сигналы(DTR-on, RTS-off) *) res := TrComPortSetControl(PortId, TRCOM_CTRL(tcpccSet,tcpccClear)); if TRCOM_SUCCEEDED(result) then begin (* управляющие согналы установлены - передаем и принимаем данные передаем 6 байт, принимаем 1 байт, тайм-аут - 1 с. *) res := TrComPortWriteAndRead(PortId, wr_data, 6, rd_buffer, 1, 1000); if TRCOM_SUCCEEDED(result) then begin (* что-нибудь делаем далее *) end; end; end; (* т.к. порт больше не нужен, закрываем его *) result = TrComPortClose(PortId); end; var PortId: Integer; res: Integer; wr_data: array[1..8] of Byte; rd_buffer: array[1..8] of Byte; params : TrComPortParameters; begin PortId := TrComPortOpen(0); (* COM1 *) if TRCOM_SUCCEEDED(PortId) then // порт открыт - устанавливаем параметры соединения with params do begin DesiredParams := tcpmpBaudRate or tcpmpDefaultTimeout or tcpmpByteSize or tcpmpStopBits or tcpmpCheckParity or tcpmpParity or tcpmpEnableRtsControl or tcpmpEnableDtrControl, BaudRate := CBR_9600, (* 9600 бод *) DefaultTimeout := 5000, (* по умолчанию тайм-аут 5 с. *) ByteSize := 8, (* 8 бит *) StopBits := ONESTOPBIT, (* 1 стоп-бит *) CheckParity := 0, (* без проверки четности *) Parity := NOPARITY, (* без бита четности *) RtsControl := RTS_CONTROL_DISABLE,(* изначально RTS-off *) DtrControl := DTR_CONTROL_ENABLE);(* изначально DTR-on *) end; res := TrComPortSetConfig(PortId,params); if TRCOM_SUCCEEDED(res) then begin (* параметры заданы - устанавливаем управляющие сигналы(DTR-on, RTS-off) *) res := TrComPortSetControl(PortId, TRCOM_CTRL(tcpccSet,tcpccClear)); if TRCOM_SUCCEEDED(result) then begin (* управляющие согналы установлены - передаем и принимаем данные передаем 6 байт, принимаем 1 байт, тайм-аут - 1 с. *) res := TrComPortWriteAndRead(PortId, wr_data, 6, rd_buffer, 1, 1000); if TRCOM_SUCCEEDED(result) then begin (* что-нибудь делаем далее *) end; end; end; (* т.к. порт больше не нужен, закрываем его *) result = TrComPortClose(PortId); end; |
Сообщ.
#48
,
|
|
|
trainer.
Очень прошу помочь. Получаю данные с СОМ порта моей терминальной программой (делфи, компонент соmm32) вот в таком виде: яяя/00016661<0 >6==;83<<49;:8 3><0;1>?4388>< 2:000000003; Что нужно мне сделать, может нужна функция или процедура, чтобы конвертировать в читабельный формат. После обработки должно быть Temp=-7.21, PD=0.024, Davl=0.376, Rasx=273.845; |
Сообщ.
#49
,
|
|
|
"Я не волшебник, я только учусь..." (c) не-помню-откуда.
Бери описание протокола обмена и смотри. |
Сообщ.
#50
,
|
|
|
Trainer, подскажите, если вместо обыкновенного компонента соmm32 я буду использовать modbus компонент, чтонибуть изменит.
|
Сообщ.
#51
,
|
|
|
Если ты будешь при чтении использовать очки, поможет это тебе читать китайские тексты?
|
Сообщ.
#52
,
|
|
|
Помогите новичку! Использую TrComPort, взял пример из ReadMe.txt. Как я понял он считывает 1 байт и на этом завершает работу. А как считать все данные, поступившие на порт? Я пишу программу для работы со сканером штрих-кодов и мне нужно, чтобы каждый раз, когда сканером читают штрих-код, он целиком попадал в программу, а там дальше с ним велась дальнейшая работа. Подскажите пожалуйста как это сделать.
|
Сообщ.
#53
,
|
|
|
Цитата Ex0RCi$t @ Воспользоваться функцией чтения. Логично? А как считать все данные, поступившие на порт? |
Сообщ.
#54
,
|
|
|
Логично
Видимо TrComPortReadArray(INT portid, LPVOID buffer, DWORD length, LONG timeout) ? А параметр length у неё должен быть равен тому, что вернёт TrComPortGetQueue()? |
Сообщ.
#55
,
|
|
|
да.
Добавлено Можно просто читать побайтно, пока не появится заданный символ |
Сообщ.
#56
,
|
|
|
Есть отличная библиотека на C для modbus мастера: www.modbus.org. Может быть скомпилированна под Windows и Linux. Здесь читал её небольшое описание по-русски с примерами: http://robot-develop.org/archives/1042.
|
Сообщ.
#57
,
|
|
|
Цитата dmitry90 @ Есть отличная библиотека на C для modbus мастера: www.modbus.org. Может быть скомпилированна под Windows и Linux. Здесь читал её небольшое описание по-русски с примерами: http://robot-develop.org/archives/1042. Помогите, пожалуйста, новичку! Необходимо по протоколу Модбас через ком-порт считывать и записывать данные в приборы ОВЕН. Не могу понять, что нужно делать с этим http://www.libmodbus.org/download/. Если можно по пунктам. Большое спасибо Добавлено Всё это делаю в Borland C++ Builder 6 |
Сообщ.
#58
,
|
|
|
Цитата dmitry90 @ Есть отличная библиотека на C для modbus мастера: www.modbus.org. Может быть скомпилированна под Windows и Linux. Здесь читал её небольшое описание по-русски с примерами: http://robot-develop.org/archives/1042. Спасибо за ссылку, посмотрел собрал LIB из библиотеки, подключил к проекту примера, собрал, все нормально. Но при работе не открывается порт. Правда коробочки с ModBus и устройств у меня пока нет, учусь плавать на сухую. Может поэтому проблемы? Вообщк е хотелось бы поюзать готовый рабочий проект с использованием библиотеки. Может вы могли бы дать ссылочку, или код? Работаю под VS 2010, C++. |
Сообщ.
#59
,
|
|
|
Цитата Но при работе не открывается порт. Правда коробочки с ModBus и устройств у меня пока нет НУ если нет железа то и не откроется порт, так как его нету. |
Сообщ.
#60
,
|
|
|
Цитата Dem_max @ Цитата Но при работе не открывается порт. Правда коробочки с ModBus и устройств у меня пока нет НУ если нет железа то и не откроется порт, так как его нету. Есть проблема с компиляцией библиотеки ModBus. Не находится описание типа ssize_t. Я покопался в MSDN и нашел LONG_PTR. В хедере добавил typedef LONG_PTR ssize_t И все откомпилировалось и запустилось. Вопрос, правильно ли я сделал? Вообще то такого в проверенных библиотеках не должно быть. Может я скачал кривую библиотеку из инета? Если у кого то такого не было, кинте ссылочку на правльные исходники библиотеки. Буду очень признателен. |