
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Страницы: (6) 1 [2] 3 4 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|||
|
Вот этого я сделать не могу.
![]() Коммерческая разработка. ![]() |
![]() |
|
|
Могу подкинуть сорс класса реализующего работу с СОМ-портом. Класс правда для Visual С, но думаю идею он раскрыть сможет.
Я его юзаю постоянно. Буду вопросы - пиши. Прикреплённый файл ![]() |
Сообщ.
#18
,
|
|
|
Как быть если требуется пользовать MODBUS-ASCII. Я вот смотрю обучно строчку побайтово передают и радуются :-) а мне-то нужно передать именно что строчку из шестнадцатиричных чисел. Как быть? Да и к тому же, 16-ти ричные числа двух-символьные... или это никак не влияет?
Благодарю. |
Сообщ.
#19
,
|
|
|
Цитата Cergiy @ А у этой строчки посчитать количество потребных для передачи байтов нельзя?а мне-то нужно передать именно что строчку из шестнадцатиричных чисел. Как быть? Цитата Cergiy @ см. выше Да и к тому же, 16-ти ричные числа двух-символьные... или это никак не влияет? |
Сообщ.
#20
,
|
|
|
trainer я сейчас спрошу нечто глупое, а я должен переводить эту строчку в какой-то иной формат(из строкового) чтобы передавать? то есть как осуществить передачу символов, а не чисел? Или я уже слишком вечером туплю?
|
Сообщ.
#21
,
|
|
|
Цитата Cergiy @ Очень похоже, что да.Или я уже слишком вечером туплю? Цитата Cergiy @ По этому поводу ничего сказать не могу. Спецификации Modbus под рукой нет.а я должен переводить эту строчку в какой-то иной формат(из строкового) чтобы передавать? Цитата Cergiy @ Так или иначе, а передается набор байтов. то есть как осуществить передачу символов, а не чисел? |
Сообщ.
#22
,
|
|
|
To trainer
Спасибо за библиотеку TrComPort ![]() Работает существенно быстрее, чем ComPortLib. Вы писали, что можете выложить более свежую версию.(Я скачал от 2003г) Если не затруднит, буду весьма признателен. Вопрос для общего развития. Если я просто подключаю Вашу библиотеку к проекту, все замечательно. Решил сам сделать библиотеку из Вашей DLL. ![]() ![]() impdef.exe -h TrComPort.def TrComPort.dll implib.exe -c -f TrComPort_BCB.lib TrComPort.def Библиотека получается меньше, почти вся заполнена нулями и ,естественно, ничего не работает. В чем я неправ? Поиск обшарил почти весь, включая FAQ |
Сообщ.
#23
,
|
|
|
Здравствуйте coach.
![]() У меня возникли вопросы по вашей программе TrComPort. У меня в распоряжении прибор МВУ-8, который работает по протоколу ModBus RTU, адрес 16. Я передаю в функцию TrComPortWriteArray следующее сообщение: 0x10 - адрес, 0x10 - команда, 0x00, 0x00 - нач. адрес регистра, 0x00, 0x01 - количество регистров, 0x02 - количество байт, 0x10, 0x00 - значение, CRC_Low, CRC_High. У меня оно отрабатывает, т.е. result=0, но состояние выхода прибора не изменяет. В чем может быть проблема? И мне интересен следующий вопрос: Чтение с прибора, как я понял, тоже выполняется функцией TrComPortWriteArray. Но куда записываются прочитанные значения? Буду очень признателен, С уважением, Павел. ![]() |
Сообщ.
#24
,
|
|
|
там вообще-то в комментариях написано, что делает каждая функция. Чтение массива байт выполняет TrComPortReadArray
Цитата Pauly @ А прибор не должен квитировать команду? Если должен - надо прочитать его ответ, наверняка он должен возвращать код ошибки в случае отказа выполнять команду. У меня оно отрабатывает, т.е. result=0, но состояние выхода прибора не изменяет. В чем может быть проблема? |
Сообщ.
#25
,
|
|
|
Для чтения у меня есть сообщение в котором задается команда 0x03 вместо 0x10. Это сообщение нужно подавать параметром rd_buffer в TrComPortReadArray?
Когда я читаю ответ прибора функцией TrComPortWriteAndRead, то result=-10, а rd_buffer пустой. |
Сообщ.
#26
,
|
|
|
-10 - это значит прочитать запрошенное количество байт не удалось, истек тайм-аут. Либо размер ответа меньше, чем затребовано к прочтению, либо прибор вовсе не ответил.
Цитата Pauly @ Надо передать команду функцией TrComPortWriteArray и прочитать ответ функцией TrComPortReadArray. Или воспользоваться функцией 2-в-1 TrComPortWriteAndRead Для чтения у меня есть сообщение в котором задается команда 0x03 вместо 0x10. Это сообщение нужно подавать параметром rd_buffer в TrComPortReadArray? |
Сообщ.
#27
,
|
|
|
Я не уверен, что он этот прибор должен слать ответ, по крайней мере у меня нет формата приема данных. Я выставлял всякие размеры ответа, ошибка остается. Связь с прибором устанавливается и по другому протоколу обмен удается.
У другого прибора есть и посылка, и прием, для него я использую TrComPortWriteAndRead, но у меня нет его на руках, поэтому я решил проверить работоспособность на МВУ. |
Сообщ.
#28
,
|
|
|
Здравствуйте trainer. Помогите пожалуйста в следующем вопросе: Я считываю параметры прибора в потоке(Thread). В главной программе я останавливаю поток(Terminate), закрываю COM-порт и потом заново пытаюсь открыть COM-порт, а у меня выдается ошибка -2. Как я понимаю, в процесс остановки потока у меня может происходить обращение к COM-порту и он закрывается некорректно. Для решения этого я использую функцию TrComPortBreak, однако она ничего не дает. Не могли бы вы подсказать, что нужно сделать для корректного закрытия порта?
|
Сообщ.
#29
,
|
|
|
Terminate вообще-то не останавливает поток, а просит его завершиться.
TrComPortBreak надо вызывать из основного потока. Цитата Pauly @ Это сильно вряд ли. Порт либо закроется, либо нет. Как я понимаю, в процесс остановки потока у меня может происходить обращение к COM-порту и он закрывается некорректно. |
Сообщ.
#30
,
|
|
|
При закрытии формы выполняется следующий код:
result = TrComPortBreak(PortId); FirstProcess->Terminate(); //поток, где выполняется чтение/запись по ModBus result = TrComPortClose(PortId); PortId = TrComPortOpen(5); При закрытии порта ошибки действительно нет, а вот при открытии возникает -2, причем не всегда. Если я запускаю программу еще раз, то порт открывается нормально. Может быть порт не открывается из-за того, что дочерний поток закрывается, а TrComPortWriteAndRead еще до конца не сработал? В чем ошибка в моих действиях? Заранее благодарен, Павел. |