Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.97.189] |
|
Страницы: (6) 1 [2] 3 4 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|||
|
Вот этого я сделать не могу.
Коммерческая разработка. |
Сообщ.
#17
,
|
|
|
Могу подкинуть сорс класса реализующего работу с СОМ-портом. Класс правда для Visual С, но думаю идею он раскрыть сможет.
Я его юзаю постоянно. Буду вопросы - пиши. Прикреплённый файлSerialPort.zip (6.67 Кбайт, скачиваний: 1595) |
Сообщ.
#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 еще до конца не сработал? В чем ошибка в моих действиях? Заранее благодарен, Павел. |