Com port как связь программы на delphi с Arduino
- Войдите на сайт для отправки комментариев
Втр, 03/09/2013 - 21:52
Всем доброго времени суток! Ищу компонент/класс/способ мониторинга com порта из программы написанной на Delphi xe3. Программа должна получать данные от arduino мониторя comport. Цель получать данные, например о температуре. Возможно вы посоветуете какой-нибудь другой язык, для написания такой программы. Подключаю через usb.
Не там ищете. На форумах по Delphi найдете много простых (и навороченных тоже) компонентов для работы с COM-портом.
Я для работы с Ардуино из Delphi использую компонент AfComPort. Там все просто:
AfComPort1.ComNumber := N;
AfComPort1.Open;
...
AfComPort1.WriteString(cmd);
...
ans := AfComPort1.ReadString;
...
AfComPort1.Close;
Возможно вы посоветуете какой-нибудь другой язык, для написания такой программы.
Самый подходящий тот, который Вы знаете.
Я на питоне писал. Python 2.7+PyGTK+pyserial
Можно хоть в MSWord на VisualBasic писать или в Matlab - главное понимать какую задачу надо решить при этом.
Добрый вечер. Я - новичок в программировании СОМ порта применительно к Arduino + не электронщик (электрохимик+ имею некоторый опыт программирования в Delphi). Не подскажете где можно найти доходчиво изложенную документацию по управлению Arduino из своего Delphi приложения. Компонент AfComPort я нашел и установил.
Нет такой документации, т.к. нет никакого стандартного способа управления ардуиной из Delphi приложения. Пишется скетч, в котором ардуина читает Serial и парсит полученную информацию. И в зависимости от полученного результата выполняет какие-либо действия. Ардуине всё равно, кто отправляет эту ифнормацию - Delphi приложение или что-то другое. Вам надо читать про работу с Serial, Serial.available() и т.д.
Спасибо за первый совет Jeka_M. Не можете ли вы пояснить - скетч пишется в среде Arduino или в приложении Delphi? Если в среде Arduino то вопросов нет, но тогда нет программного управления им из приложения Delphi. А если скетч пишется в приложении Delphi, то как его потом загрузить в Arduino - простой загрузкой в СОМ порт в виде набора строк? Не можете хоть 1 пример такого кода привести? И как потом запустить этот скетч в Arduino из приложения Delphi? Был бы вам очень признателен за советы!
SAlexander59, в Ардуино и в ПК должны одновременно работать две самосогласованные программы, которые обмениваются между собой данными. Одна программа отсылает данные, другая - принимает. При этом каждая программа может выступать и в роли отправителя и в роли получателя (разумеется, если Вам это нужно). Ну либо наоборот - одна программа может только отправлять данные, а другая - только получать. Обмен данными, как Вы справедливо заметили, происходит через COM-порт. Какого вида будут данные - решать Вам. Это могут быть строки, символы, числа, бинарные данные, смесь того или другого - делайте, как Вам удобнее.
Для пробы рекомендую попытаться написать следующее:
1. Программа на Делфи имеет две подпрограммы:
1.1. Одна подпрограмма по нажатию на кнопку генерирует случайное число, отображает его в одном месте формы и отправляет в COM-порт.
1.2. Вторая подпрограмма слушает COM-порт и по получении числа оторбражает его в другом месте формы.
2. Скетч на Арпдуино:
2.1. Слушает COM-порт. При послуплении на него числа читает его, умножает на 2 и отправляет обратно.
Спасибо за совет andriano!
Я собрал простую схемку и взял из примеров скетч для нее. Схема - простой делитель напряжения. скетч просто читает аналоговое значение, которое формируется на одном из резисторов делителя. оба резистора делителя включены последовательно (между +5 V и GRD), а средняя точка делителя - подключена к аналоговому входу А0 Arduino UNO. Резисторы по 10 ком. Мне не очень понятны следующие вещи:
1. каким образом организовать цикл считки данных, чтобы не потерять ни одного их байта?
2. я просто запускал скетч и он выдавал значения в диапазоне от 506 до 509. мне не очень понятно что это за параметр - падение напряжения или что? в каких он еденицах? Как программно получать эти же данные без потери их целостности в своем Delphi приложении? Я просто создал простой обработчик нажатия кнопки:
procedure TForm1.Button4Click(Sender: TObject);
var
s:string;
begin
s := AfComPort1.ReadString;
Memo2.Lines.Add(s);
end;
при каждом нажатии он выдает серию из разного числа занчений. Иногда урезанных. Не понятно как организовать нормальную считку того, что выдает среда Arduino, но в своем приложении - каковы должны быть параметры цикла считки?
или при организации цикла исходить из скорости обмена данных с портом - я так понимаю это величина - AfComPort1.BaudRate. что оан подразумевает - сколько значений (или бит) в секунду?
1. У ардуины есть буфер куда складывается все принятое, пока не переполнится - потерь не будет. Чтоб не переполнился из лупа достаточно часто надо выгребать данные.
2. 506..509 - это значение с АЦП. Оно в единицах. На одну единицу приходится +5В/1024 вольта, т.е. 506..509 - около 2,5В. Оно похоже на правду. Скачет из за шумов, наводок, ошибок и пр.. Не акцентруйте на том внимание.
В делфи делать прием по нажатию кнопки плохо. Если не нажали, то шо будет? Делайте по таймеру.
В ардуину в луп зашейте типа static byte i; i++; Serial.println(i); delay(100); Это для тестирования удобней.
или при организации цикла исходить из скорости обмена данных с портом - я так понимаю это величина - AfComPort1.BaudRate. что оан подразумевает - сколько значений (или бит) в секунду?
Скорость разумеется одинаковая на обеих устройствах. Начните с 1200. Потом поменяете как захотите. Расчитать тоже можна, но нужно знать обемы передаваемых данных. Не морочтесь пока мыслями о потерях данных. Там все продумано, везде буферы на сотни байт, главное из них считывать достаточно часто.
Я просто создал простой обработчик нажатия кнопки:
procedure TForm1.Button4Click(Sender: TObject);
var
s:string;
begin
s := AfComPort1.ReadString;
Memo2.Lines.Add(s);
end;
при каждом нажатии он выдает серию из разного числа занчений.
Лучше повесьте в AfComPort1 обработчик события DataRecived(Sender: TObject; Count: Integer);
Ну что-то типа такого :
var s:string;
я попробовал сделать так как вы посоветовали Araris. считка данных пошла. НО.... в поле Мемо2 данные выводились не совсем правильно. во в такой форме:
50
8
50
8
50
9
......
то есть данные по выходному напряжению на резисторе разбиты на 2 части. как то это не правильно. я думал, что надо организовывать цикл считки данных с порта опираясь на размер (в байтах) одного показания и скорость считки данных контроллером. в ардуино с этим проблем вроде нет - у него уже организован цикл - loop который знает как считывать эти данные (с какой периодичностью по времени). а вот в моем приложении я не знаю как это сделать в зависимости от указанных величин.
то есть отображаемый в Ардуино сигнал - это напряжение в еденицах, рассчитываемых так как вы сказали? теперь понятно. Вы рекомендуете делать считку данных по таймеру. Но какой интервал времени ставить в таймере? как его рассчитать? Вы говорите, что надо выбирать данные из буфера достаточно часто. а нельзя ли просто программно из своего приложения рассчитать (или определить) время поступления в буфер очередного показания и считывать их таким образом? я так понимаю - каждое показание имеет определенный фиксированный размер и как только объем буфера достиг этого размера - считать очередное значение.
Вы говорите, что выдаваемое ардуино значение измеряется в еденицах, которые рассчитываются так как вы сказали. я захотел перевести эти еденицы в своем приложении в вольты. я исходил из того, что эти еденицы - имеют целочисленный формат данных. код для этого имел вид:
procedure TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer);
var
u:real;
s:string;
begin
try
s := AfComPort1.ReadString;
u:=(5/1024)*StrToInt(s);
Memo2.Lines.Add(FloatToStr(u));
except
end;
end;
но когда попытался запустить программу и получить результаты выскочила ошибка, где говорилось, что StrToInt(s) не может быть рассчитано, так как оно не целочисленное. я поменял StrToInt(s) на StrToFloat(s) - в рассчете на то, что величина действительного формата. и опять выскочила ошибка где говорилось, что эта величина StrToFloat(s) - не действительного формата??? Встает закономерный вопрос - какого формата величина получаемая с порта??? Или я чего то не учел?
может быть както так:
для ардуино
Delphi
Спасибо за подсказку afen я попробовал сделать, то что вы предложили. Почти получилось. Но....
в поле Мемо2 полученные значения частенько разбиты на 2 части. Так
2.48
2
.48
2.4
8
как с этим бороьтся не пойму
но когда попытался запустить программу и получить результаты выскочила ошибка, где говорилось, что StrToInt(s) не может быть рассчитано, так как оно не целочисленное. я поменял StrToInt(s) на StrToFloat(s) - в рассчете на то, что величина действительного формата. и опять выскочила ошибка где говорилось, что эта величина StrToFloat(s) - не действительного формата??? Встает закономерный вопрос - какого формата величина получаемая с порта??? Или я чего то не учел?
StrToInt ругается, потому что приходит float (это видно по строкам , которые появляются в memo), а StrToFloat ругается, - наверное дело в десятичном разделителе (например с порта приходит ".", а в региональных настройках у Вас стоит ",") - тогда попробуте покопать в сторону DecimalSeparator.
Ну а для того что бы получать нормальные строки - добавляйте при отправке (со стороны ардуино) символ-разделитель, признак конца строки и его отлавливайте.
Попробуйте в AfComPort1DataRecived() поставить задержку небольшую ( Sleep(200); Application.ProcessMessages; ) перед AfComPort1.ReadString;
Ну и в скетч, отправляющий данные, тоже желательно
Хотя совет от T.Rook мне больше по душе.
Получил в итоге следующий работающий код Delphi приложения:
sval - глобальная строковая переменная программы
procedure TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer);
var
u:real;
s:string;
begin
try
s := AfComPort1.ReadString;
if s<>'' then
begin
if (Pos(#13#10,s)<>0) then
begin
if (sval='') then
begin
if s<>#13#10 then Memo2.Lines.Add(s)
end
else
begin
if (sval<>'') then
begin
if s<>#13#10 then Memo2.Lines.Add(sval+s);
sval:='';
end
end;
end
else sval:=sval+s;
end;
except
end;
end;
все работает, но выдача идет в Мемо2 через 1 строчку. где то небольшая ошибка в логике
Memo2.Lines.Add(Trim(s)) ?
Спасибо за подсказку negavoid - не знал об этой функции, убирающей пустые пробелы в строке.
Получил в итоге следующий работающий код Delphi приложения:
sval - глобальная строковая переменная программы
procedure TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer);
var
u:real;
s:string;
begin
try
s := AfComPort1.ReadString;
if s<>'' then
begin
if (Pos(#13#10,s)<>0) then
begin
if (sval='') then
begin
if s<>#13#10 then Memo2.Lines.Add(Trim(s));
end
else
begin
if (sval<>'') then
begin
if s<>#13#10 then Memo2.Lines.Add(Trim(sval+s));
sval:='';
end
end;
end
else sval:=sval+s;
end;
except
end;
end;
все работает, выдача идет в каждую строку Мемо2
Соответствующий скетч таков:
void setup() {
analogReference(DEFAULT);
Serial.begin(9600);
}
void loop() {
float volt=5.0/1024*analogRead(A0);
Serial.println(volt);
delay(500);
}
Спасибо за подсказку afen я попробовал сделать, то что вы предложили. Почти получилось. Но....
в поле Мемо2 полученные значения частенько разбиты на 2 части. Так
2.48
2
.48
2.4
8
как с этим бороьтся не пойму
Это потому что ты успеваеш читать буфер быстрее чем приходят данные. Надо поставить признак конца пакета и если данные надо передавать раз в 0,5 сек то сделать так.
afen эта проблема уже решена - посмотрите мое предыдущее сообщение. недостаток полученного решения в том, что данные получаются в виде пакета значений, время получения которого привязано к времени считки пакета. но это решаемая проблема. я ее решу немного доработав код скетча ардуино - включив в результат подстроку с указанием времени получения очередного значения напряжения
afen эта проблема уже решена - посмотрите мое предыдущее сообщение.
Понял, не сразу просек что что символы перевода строки как раз и есть маркер конца пакета
недостаток полученного решения в том, что данные получаются в виде пакета значений, время получения которого привязано к времени считки пакета. но это решаемая проблема. я ее решу немного доработав код скетча ардуино - включив в результат подстроку с указанием времени получения очередного значения напряжения
Зачем тебе это ? У тебя и так все работает в практически в реальном времени и потом ардуине все равно принял кто пакет или нет, то есть после Serial.print ардуина "подергала" ножки Rx, Tx и забыла про твой пакет данных. Если комп принял данные можеш быть уверен что АЦП их получила несколько миллисекунда назад (время преобразования + врема передачи)
Зачем тебе это ? У тебя и так все работает в практически в реальном времени и потом ардуине все равно принял кто пакет или нет, то есть после Serial.print ардуина "подергала" ножки Rx, Tx и забыла про твой пакет данных. Если комп принял данные можеш быть уверен что АЦП их получила несколько миллисекунда назад (время преобразования + врема передачи)
Мне это надо для точной приявязки значений полученного напряжения ко времени проведения эксперимента.
Мне это надо для точной приявязки значений полученного напряжения ко времени проведения эксперимента.
Так и получай время измерения в delphi. Я ж тебе и говорю что реальное время будет отличаться на несколько миллисекунд (время выполнения analogRead + время выполнения Serial.println + время обработки в delphi) врядли выйдеш за пределы 1-2 mc.
Если формировать время измерения в ардуино то надо синхронизировать комп и ардуино как ты будеш это делать ? Программно ? опять же собьешься на несколько мс которые уйдут на обмен данными.
Мне это надо для точной приявязки значений полученного напряжения ко времени проведения эксперимента.
Тогда Вам нужно озаботиться еще и источником точного времени: RTC дают лишь секунды, а millis() работает нерегулярно - приращения по 1 мс чередуются с приращениями по 2 мс.
Здравствуйте. Можете помочь? Посмотрел вашу тему, использовал ваш код, но у меня ничего не происходит. Может кините исходник. Если что вот моя почта djtorian@gmal.com. Буду очень, ну очень благодарным!!!
Здравствуйте. Можете помочь? Посмотрел вашу тему, использовал ваш код, но у меня ничего не происходит. Может кините исходник. Если что вот моя почта djtorian@gmal.com. Буду очень, ну очень благодарным!!!
Если Вы обращались ко мне djtorian, то я отправил вам исходник программы и соответствующий скетч Arduino
После отправки вам исходника пришло сообщение, что письмо не было доставлено. Вы не ошиблись с указанием вашей почты djtorian?
В случае чего и исходник программы и скетч и мой комментарий ко всему этому можно скачать по адресу:
https://yadi.sk/d/GMZ11JCL3J9Rcz
Мне это надо для точной приявязки значений полученного напряжения ко времени проведения эксперимента.
Тогда Вам нужно озаботиться еще и источником точного времени: RTC дают лишь секунды, а millis() работает нерегулярно - приращения по 1 мс чередуются с приращениями по 2 мс.
Я думаю, что можно попробовать использовать для этого Delphi. Насколько понимаю сама среда Arduino не дает возможности точно ослеживать время получения очередного показания. Думаю испорльзовать для этого возможности Delphi приложения считывать значение системного времени компьютера , соответствующего моменту окончания формирования строки очередного показания - то есть как только появился знак завершения строки считывать значение системного времени компьютера и выводить его с полученным от Arduino значением. Я понимаю, что и тут будут огрехи, но это хоть что то.
Я думаю, что можно попробовать использовать для этого Delphi. Насколько понимаю сама среда Arduino не дает возможности точно ослеживать время получения очередного показания. Думаю испорльзовать для этого возможности Delphi приложения считывать значение системного времени компьютера , соответствующего моменту окончания формирования строки очередного показания - то есть как только появился знак завершения строки считывать значение системного времени компьютера и выводить его с полученным от Arduino значением. Я понимаю, что и тут будут огрехи, но это хоть что то.
Ну, вообще-то в ПК с измерением времени существенно хуже, чем в Ардуино. Да и появляется дополнительная задержка на передачу/прием, причем, неконтролируемая из-за того, что Windows не является ОС реального времени.
Ну, вообще-то в ПК с измерением времени существенно хуже, чем в Ардуино. Да и появляется дополнительная задержка на передачу/прием, причем, неконтролируемая из-за того, что Windows не является ОС реального времени.
но ведь в ПК есть встроеные часы, которые вроде бы показывают реальное время, которое отображает тот же самый Windows и его приложения. А в Arduino насколько знаю существуют только функции расчета интервала времени, прошедшего после запуска скетча - насколько я понимаю. Или я не прав и ошибаюсь? я еще очень слабо знаю возможности Arduino
но ведь в ПК есть встроеные часы, которые вроде бы показывают реальное время, которое отображает тот же самый Windows и его приложения
А ещё в ПК есть вытесняющая многозадачность, и та же Windows может отнять у вашей программы управление, а вернуть его, через, скажем 20 или 50 мсек, что составляет весьма дофига и не очень положительно сказывается на измерении временных интервалов (вы же не планировали пользовать мультимедийный высокоточный таймер).
А ещё в ПК есть вытесняющая многозадачность, и та же Windows может отнять у вашей программы управление, а вернуть его, через, скажем 20 или 50 мсек, что составляет весьма дофига и не очень положительно сказывается на измерении временных интервалов (вы же не планировали пользовать мультимедийный высокоточный таймер).
Говоря 20 или 50 мсек вы имели в виду милли или микросекунды negavoid? Хотя думаю это все равно не страшно если считка данных идет с интервалом например 15 секунд и более. Или я ошибаюсь и чего то не учитываю?
Возник другой более серьезный вопрос - можно ли программным путем составлять, компилировать и загружать скетч из своего delphi приложения в Arduino? То что составить нужный скетч в Delphi приложении можно вроде бы сомнения не вызывает. Вопрос в том как скомпилировать и загрузить его в Arduino используя например его стандартное программное обеспечение. Есть ли режим командной строки в программном обеспечении Arduino, который можно было бы использовать для этого? Или есть какая либо другая возможность компиляции и загрузки скетча в Arduino? Кто то пробовал делать нечто подобное?
И еще один серьезный для меня вопрос - кто подскажет - каков ток потребляемый Arduino при его работе от автономного источника питания (батареи "Крона" например) - насколько он велик? Хочется прикинуть - какое время проработает Arduino как просто микроконтроллер, питаемый от стандартной батареи типа Крона?
Мсек - это миллисекунды, 20 мсек = 1/100 секунды. Для микросекунд я бы написал мксек, как принято стандартами.
Это зависит от поставленной задачи. Может быть не страшно, а может оказаться очень критичным.
Полагаю, что довольно многого вы не учитываете. 15 секунд на ПК может оказаться 14.9850001232 секунды, а на следующий раз 15.267543490347, а на следующий 15.0324327641, а если цпу сильно загружены, то и вообще, например, 19.4375683464 секунды. Для борьбы с этим в user-mode существуют такие мультимедийные точные HPET-таймеры, которые таки-обеспечат более-менее приемлемую точность отсчётов. В kernel-mode можно использовать и прерывания. Могут вылезти и другие подводные камни.
Возможно всё, вопрос лишь времени-цены-качества работы. Есть такая поговорка: "Быстро/Дёшево/Качественно - но одновременно только два пункта из трёх" :)
Сходу вижу два варианта. Второй (написание собственного парсера лексем + компилятора + линкера + прошивальщика) отбрасываем сразу :) Первый - поступить так же, как это делает arduino ide, включить в ней полный отладочный вывод и собезъянить последовательность вызова компилятора и линкера.
"режим командной строки", как вы его обозвали, заключается в том, чтобы вызвать самому подсмотренные на предыдущем этапе команды и грамотно обработать их вывод. Так, как это делает сама arduino ide.
Наверное, тот, кто не ценит свою жизнь и время, пытаясь сделать свой вариант того, что уже сделано и работает.
Подскажите, как заставить скрипт верно реагировать на команды из терминала.
По идеи команда от терминала должна выполняться только, если это будет 1, а она выполняет все равно все команды.
Есть хорошая новость Embarcodero выпустила полностью бесплатную версию своего продукта - Delphi Started Edition, которая доступна для бесплатного скачивания по адресу https://www.embarcadero.com/products/delphi/starter
Аналогичный продукт предоставляется для разработчиков на С++
Как указывается на данной страничке (даю упрощенный вариант перевода на русский):
"Приступая к реализации концепции вашего продукта или получения вашего стартапа с земли может быть сложно без начального капитала или дохода от продаж. Экипировка разработчиков с инструментами профессионального уровня может быть дорогостоящей, прежде чем вы будете продавать продукт. Таким образом, версия Delphi Starter Edition разработана и рассчитана на то, чтобы позволить отдельным лицам и стартапам загружать свое видение, пока соответствующие доходы не достигнут 1000 долларов, и в этот момент можно приобрести специальную лицензию Professional Edition.
Итак, если вы являетесь человеком, вы можете использовать Starter Edition для создания приложений для собственного использования и приложений, которые вы можете продать, пока ваши доходы не достигнут 1000 долларов в год. Если вы небольшая компания или организация без дохода (или до 1000 долларов в год), вы также можете использовать версию для начинающих. Когда общий доход вашей компании достигнет 1000 долларов США, или ваша команда расширится до более чем 5 разработчиков, вы можете перейти на неограниченную коммерческую лицензию со специальной лицензией Professional Edition. Дополнительные сведения см. В разделе Часто задаваемые вопросы о версиях для начинающих."
Таким образом появилась возможность легального использования данного программного продукта. Я там зарегистрирован и скачал и установил данную версию продукта. Конечно у нее есть определенные ограничения (см на сайте компании), но в обще то это уже хорошая новость. Проблемка в том, что у нее все таки хотя и большой, но огрниченный список компонентов. и я не нашел там компонентов для работы с СОМ портом. Попробовал использовать подключение модулей для работы с СОМ портом. Пока только немного стало получаться с bcomport, чей модуть (BCPort.pas) я подключил к своему проекту. В итоге получаю перечень СОМ портов ПК в ComboBox. Пока только разбираюсь с этой проблемкой. Может у кого то есть идеи по подключению доп компонентов для работы с СОМ портом на данном IDE? Если есть таковые - поделитесь. Думаю это в наших общих интересах. Вызывают так же интерес слова приведенные выше в информации о данном продукте - "Когда общий доход вашей компании достигнет 1000 долларов США, или ваша команда расширится до более чем 5 разработчиков, вы можете перейти на неограниченную коммерческую лицензию со специальной лицензией Professional Edition. " - таким образом получается, что можно сгруппироватьться в небольшие коллективы (более 5 человек) и получить в свое пользование неограниченную коммерческую лицензию со специальной лицензией Professional Edition. По крайней мере я так понимаю. Что скажете друзья?
Проблемка в том, что у нее все таки хотя и большой, но огрниченный список компонентов. и я не нашел там компонентов для работы с СОМ портом. Попробовал использовать подключение модулей для работы с СОМ портом. Пока только немного стало получаться с bcomport, чей модуть (BCPort.pas) я подключил к своему проекту. В итоге получаю перечень СОМ портов ПК в ComboBox. Пока только разбираюсь с этой проблемкой. Может у кого то есть идеи по подключению доп компонентов для работы с СОМ портом на данном IDE? Если есть таковые - поделитесь.
А своих компонентов для COM порта в Дельфи никогда и не было. Всегда сторонние использовали. Компонентов для работы с ком-портом много разных, надо пробовать
И кстати компоненты не обязательны, можно через API. Компоненты, как правило зависимы от версии виндавса, да и не все на них можно сделать. Некоторые функции у компонентов вообще криво работают. Лет 8 назад искал такие которые хорошо работали бы - не нашел. Работал с портами через апи. Не думаю, что с тех пор в в мертвой среде появились новые компоненты.
Вызывают так же интерес слова приведенные выше в информации о данном продукте - "Когда общий доход вашей компании достигнет 1000 долларов США, или ваша команда расширится до более чем 5 разработчиков, вы можете перейти на неограниченную коммерческую лицензию со специальной лицензией Professional Edition. " - таким образом получается, что можно сгруппироватьться в небольшие коллективы (более 5 человек) и получить в свое пользование неограниченную коммерческую лицензию со специальной лицензией Professional Edition. По крайней мере я так понимаю.
Вы не совсем правильно понимаете. Если ваш доход больше штуки баксов или в вашем коллективе более 5 разработчиков, то вы должны приобрести лицензию professional. Как владельцу Startera вам ее продадут со скидкой. Теперь смотрите в деньгах:
10.2 Professional на одного пользователя стоит 83000 (на 5 пользователей 383000), апгрейд со стартера равен стоимости версии на которую апгрейдишся минус 60% стоимости стартера. Стартер сейчас предлагают бесплатно, а вообще-то он стоил 17000. Можете сами посчитать много ли вам скинут. (цифры с ibase.ru)
Я бы вообще не рекомендовал использовать дельфи для новых проектов, если жестко точно не знать, почему вы хотите именно этого. Как отписавший на нём более 20 лет это говорю. Есть бесплатный Visual Studio Express - си, с# с компонентами, которые точно так же можно радостно накликать мышкой. Всякие эклипсы для джавы. Да хоть Go. Но не дельфи, да ещё и сворованный у Idera. Для меня до сих пор большая загадка, отчего, даже сейчас, в 2017 году, в большинстве школ и вузов экс-СССР (в болгарии ещё) обучают именно на паскале, причём даже ведь и не на дельфи, а старый добрый борланд турбо компилятор там стоит! Ну не тупые ученики, они поймут начала алгоритмов на любом языке. Ну что это за свой, особый такой путь, ну а?
А своих компонентов для COM порта в Дельфи никогда и не было. Всегда сторонние использовали. Компонентов для работы с ком-портом много разных, надо пробовать
Я этим сейчас и занимаюсь. Убил кучу времени, а результата пока ноль. Пробовал, по совету, приведенному на сайте Embarcodero (https://www.embarcadero.com/images/dm/technical-papers/installing-asyncpro-into-delphi-xe-and-c++builder-xe.pdf) установить ASYNCPRO 4.0.7RC4 FOR DELPHI XE, но пока не получается
Вы не совсем правильно понимаете. Если ваш доход больше штуки баксов или в вашем коллективе более 5 разработчиков, то вы должны приобрести лицензию professional. Как владельцу Startera вам ее продадут со скидкой. Теперь смотрите в деньгах:
10.2 Professional на одного пользователя стоит 83000 (на 5 пользователей 383000), апгрейд со стартера равен стоимости версии на которую апгрейдишся минус 60% стоимости стартера. Стартер сейчас предлагают бесплатно, а вообще-то он стоил 17000. Можете сами посчитать много ли вам скинут. (цифры с ibase.ru)
Я не рассчитываю на покупку коммерческой версии. Но если сейчас дают возможность пользоваться хотя бы стартер версией, то почему бы и не попробовать?
И кстати компоненты не обязательны, можно через API. Компоненты, как правило зависимы от версии виндавса, да и не все на них можно сделать. Некоторые функции у компонентов вообще криво работают. Лет 8 назад искал такие которые хорошо работали бы - не нашел. Работал с портами через апи. Не думаю, что с тех пор в в мертвой среде появились новые компоненты.
Я знаю про возможность работы с портами через API. Но к сожалению мои познания в этом слишком скромные. Можете ли вы посоветовать что то (со ссылками) из доходчивого объяснения такого метода работы с СОМ портами на Delphi. Желательно очень подробное доходчивое объяснение с примерами. Если получится, то почему бы и не попробовать?
Да я уже нюансов не помню :(
Я этим сейчас и занимаюсь. Убил кучу времени, а результата пока ноль. Пробовал, по совету, приведенному на сайте Embarcodero (https://www.embarcadero.com/images/dm/technical-papers/installing-asyncpro-into-delphi-xe-and-c++builder-xe.pdf) установить ASYNCPRO 4.0.7RC4 FOR DELPHI XE, но пока не получается
Вот в этой теме arduino usb delphi в последнем сообщении я ссылку на архив с компонентом и примером давал. Посмотрите, может подойдёт
Да я уже нюансов не помню :(
Так Вы этим больше не занимаетесь?
я тоже использовал этот компонент на делфи, все просто и удобно, работал как с ардуинкой так и с SIM800.
только свой протокол писал для обмена данными (в упрощенном варианте)
Дельфой ? А зачем ? Она же померла :( Там обращение к апи от сишных не отличается, ну разве что структуры описать нужно с соответствующими типами данных. Но это все очень просто. Я же к чему в тему влез, что бы вы с компонентами не мучались, а сразу правильным путем пошли. Я помню еще например, что некоторые компоненты не умеют работать с портами больше COM4, некоторые просто перечислением портов не занимаются , какие то не все сигналы корректно отрабатывают, какие то натыкаются на пермишны и не могут с портом работать. В общем я, нормальных компонентов найти не смог, а работать нужно было с двумя стоп-битами.