0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
|
1 | |
Delphi 7 COM-port11.02.2015, 12:15. Показов 27436. Ответов 30
Метки нет (Все метки)
Здравствуйте! Нужна Ваша помощь!
Я начинающий программист, у меня задача отправить команду в СОМ-порт и получить ответ. Нашел литературу (ссылка - http://www.ssau.ru/files/resou... in_a_v.pdf) и в этой литературы написана все как делать, но в странице 40 написана что надо скопировать файл comport.pas. Я питался найти файл но не нашел. Вопрос такой что это за файл откуда мне найти этот файл. Срочно надо!! Файл с кодами закружен. Delphi7-COM-port.rar Спасибо большое заранее!!! Delphi7-COM-port.rar
0
|
11.02.2015, 12:15 | |
Ответы с готовыми решениями:
30
ARDUINO + COM PORT + DELPHI Работа с UDP протоколом за роутером (Port Restricted Cone NAT и в добавок Random port ) Работа Scilab Serial Port Library (COM port) COM port |
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
11.02.2015, 14:23 | 2 |
В Вашей литературе приведёно руководство для работы с конкретным оборудованием. Исходники я так понимаю от туда же. Собственно там же от куда эти исходники и литература бралась должен быть и этот модуль.
Но это если Вам нужно писать именно для этого устройства. Если Вам нужно вообще с портами работать, то это можно делать либо через Windows API, либо задействовать какую-то готовую объектную обвёртку над API. Например, такая обёртка есть в библиотеке synapse http://synapse.ararat.cz/doku.php/download, модуль synaser.pas. Я правда ею не пользовался, так как у меня самописная. Добавлено через 8 минут Кстати, только что обратил внимание в вашей литературе тоже упоминается эта библиотека, и как раз есть упоминание модуля synaser.pas. Добавлено через 2 минуты Ваш модуль comport.pas это тоже какая-то обёртка над Windows API, только и всего.
3
|
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
|
12.02.2015, 10:30 [ТС] | 3 |
С СОМ -порта хочу отправить на RS-485? что скажите на счет этой библиотеки http://sourceforge.net/projects/comport/. Можете какой нибудь конкретный пример подсказать ?
Спасибо большое заранее !
0
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
12.02.2015, 10:55 | 4 |
Работа с портом шутка не сложная. Это по сути несколько API-шных функций. Поэтому мне не нравится для этой цели устанавливать дополнительные компоненты в среду, а здесь как раз это и нужно. У меня для этого просто один модуль подключается, в котором реализован один класс. Но я вообще не большой любитель установки компонентов в среду и если есть возможность этого не делать, я так и делаю. Поэтому подход synapce мне тоже нравится, там как раз такой же подход используется. Но как известно на вкус и цвет ... поэтому всё это ерунда, если Вам нравится так почему бы и нет.
В работе с портами возможно два режима: синхронный (блокирующий) и асинхронный (неблокирующий). Мне однозначно больше нравится первый. Я работаю только в синхронном режиме, т.к. это сильно упрощает логику программы. С портом всегда работаю во втором потоке, чтобы эта блокировка не сказывалась в работе интерфейса. В synapce тоже используется синхронный режим. Какой режим реализован в той библиотеке я не знаю, не смотрел. При работе с 485 рекомендую использовать аппаратные конверторы с автоматическим переключением направления передачи данных. В этом случае для Вас всё будет прозрачно и одинаково что 485, что 232.
1
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
12.02.2015, 11:53 | 5 |
Пример отправки пакета в COM1 на скорости 9600: ComTest.zip
Сделала правда на synapce, не на вашем компоненте Работу проверил с терминалкой: у меня два порта закальцованых кабелем, на одном была эта программа, на другом терминалка. Программа отправляла, терминалка принимала, всё работало. Сделал на 2009, на 7 скорее всего пути нужно будет прописать к synapse40\source\lib\
2
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
12.02.2015, 11:57 | 6 |
Терминалка: http://www.compt.ru
2
|
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
||||||
12.02.2015, 12:42 [ТС] | 7 | |||||
Здравствуйте! Спасибо что помогаете!!
Обязательно воспользуюсь Вашем советом, просто я новичок и плохо в этом понимаю, вот я кое что сделал используя эту библиотеку http://sourceforge.net/projects/comport/ но выдает ошибку если будет возможность подскажите пожалуйста что здесь не так? не судите строго)
0
|
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
|
12.02.2015, 12:44 [ТС] | 8 |
Вот файлы программы сом-порт.rar
Заранее спасибо !
0
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
12.02.2015, 12:53 | 9 |
И какую ошибку выдаёт?
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
12.02.2015, 13:17 | 10 |
0
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
12.02.2015, 13:24 | 11 |
Глянул исходники компонента.
Для TComPort функция записи такая: function Write(const Buffer; Count: Integer): Integer; Тогда в Вашем примере нужно делать вызов так: ComPort.Write(arrBytes[0],length(arrBytes));
2
|
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
|
12.02.2015, 15:03 [ТС] | 12 |
Спасибо!! вроде компилирует ошибки нет , скажите пожалуйста пока у меня нет возможности проверить программку на RS-485 можно ли как то проверить, т.е. отправить сигнал или код какой то и получить ответ, читал что можно создать два виртуальных портов и на них проверить, можно так сделать? если есть какая нибудь литература подскажите плизз!!
Спасибо большое заранее! вы мне очень помогли \!!
0
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
12.02.2015, 15:36 | 13 |
Вот этого не знаю, как-то не требовалось никогда.
Я для этого использую конвертер USB/RS-232, продаётся в компьютерных магазинах. У меня на компьютере один обычный порт, один такой порт, который на USB. Порты между собой соединены нуль-модемных кабелем. Для тестирования этого как раз достаточно.
1
|
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
||||||
12.02.2015, 16:40 [ТС] | 14 | |||||
Теперь есть возможность проверить программу на конвертер USB/RS-485 и есть модуль i-87068. В программе добавил код чтобы получить ответ от модуля но программа никак не реагирует, компилируется но не отправляет и не получает ответ от модуля, посмотрите пожалуйста код может быть подскажите что то ?
Спасибо большое!! исходники Scada - копия - копия.rar Delphi_I7000.rar
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
12.02.2015, 16:47 | 15 |
0
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
13.02.2015, 06:58 | 16 |
При работе с железом причин почему не работает может быть достаточно много и просто так сразу винить код не стоит. Может не работать программа, может не работать модуль, может быть проблемы в конвертере, может быть проблемы в кабеле. Проверять нужно всё отдельно, т.е. сужать поиски. Я не просто так упомянул про терминалку. Свяжите модуль с терминалкой. Убедитесь что он что-нибудь посылает. Если он работает по запросу, ну так из терминалки и пошлите ему это запрос. Если там всё работает, то тогда нужно связать программу с терминалкой и убедиться, что программа посылает данные. Только после этого имеет смысл проверять всё вместе.
Добавлено через 1 час 3 минуты Обратил внимание: ComPort.Free; нужно заменить: ComPort.Close; Добавлено через 1 минуту Но от этого она не заработает. Нужно сделать то о чём я написал выше. Добавлено через 12 часов 14 минут Да, ещё забыл сказать про настройки, т.к. это вроде как очевидно, но всё-таки, нужно не забыть убедиться что все параметры передачи выставлены корректно (скорость, ...) и соответствуют требованиям модуля.
1
|
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
|
13.02.2015, 08:47 [ТС] | 17 |
Я проверил с помощью DCON-Utility все работает (результат на рис.), отправил код (сигнал) и получил ответ. Но сомневаюсь на счет настройки, когда через этот код Comport.ShowSetupDialog; выбираю параметры сом-порта и нажимаю ОК все выбранные параметры сохраняются? С терминалкой пока еще не проверял. Спасибо заранее!
0
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
13.02.2015, 10:06 | 18 |
По поводу того, сохраняются ли параметры или нет не подскажу. Я говорил уже я сам не использую этот компонент, и не планирую в будущем это делать.
Я думаю имеет смысл попробовать жёстко прописать настройки. В компоненте есть свойства, их и нужно установить на нужные значения: TComPort = class(TCustomComPort) property Port; property BaudRate; property Parity; property StopBits; property DataBits; Ещё полезно будет заюзать мониторы порта (что-то вроде снифера), чтобы посмотреть какие реальные пакеты посылает и принимает та работающая программа и Ваша, чтобы можно было сравнить. Я иногда пользуюсь LGComSpy++, но она вроде не работает на виртуальных портах. Терминалка, про которую я писал, тоже вроде умеет, но у меня самого не зарегистрированная её версия и там этого режима нет, а так вроде была эта функция. С другими подобными программами не работал, не в курсе.
1
|
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 34
|
||||||
13.02.2015, 12:12 [ТС] | 19 | |||||
Решил воспользоваться библиотекой synapse, создал класс унаследованный от TThread, который будет реализовывать параллельный поток опроса от сом порта и отображать ответ модуля в полях "ОТВЕТ" и "История выполненных команд" , но выдает ошибку в MainForm.Receive.Text := m_buffer; ? Что делать скажите пожалуйста очень надо!!! Спасибо большое заранеее!!!!!!!
Сом-порт.rar
0
|
49 / 49 / 7
Регистрация: 23.08.2013
Сообщений: 122
|
|
13.02.2015, 13:05 | 20 |
Так у Вас там код не правильный, т.е. не ошибки какие-то, и именно код банально не дописан. Ссылки на переменную, которой нет и всё такое. Тут и подсказывать вроде как нечего, нужно код довести до хотя бы какого-то рабочего состояния, чтобы компилировался хотя бы
Ну и если Вы всё-таки начали с другого компонента, ну так и использовали бы его. Я сомневаюсь, что дело в компоненте, скорее всего какие-то другие проблемы, тем более у Вас есть на руках работающая программа. Добавлено через 15 минут MainForm - нет (у Вас она Form1), Receive - то же нет Добавлено через 2 минуты Поэтому и ошибки Добавлено через 14 минут Вы попробуйте наладить сначала общение с модулем через какую-нибудь другую программу вроде той терминалки, которую я посоветовал, или через неё саму, а потом уже пишите свою программу, когда точно будите знать какие команды нужно посылать, и что должно приходить. Когда точно убедитесь, что всё работает. Если что я пример свой первый подправлю, чтобы он посылал команды и принимал ответы. Это просто.
2
|
13.02.2015, 13:05 | |
13.02.2015, 13:05 | |
Помогаю со студенческими работами здесь
20
COM port Well-known Port Com port Com port и С++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |