Чтение и запись в COM порт
Запись от popryduhin размещена 11.11.2016 в 09:09
Показов 9337
Комментарии 32
|
Здравствуйте дорогие программисты и «не»! Хочу представить вам на обозрение совсем сырую DLL библиотеку по работе с ком портом. На основе класса TBComPort Почему собственно я хочу это сделать? Мне нужно понять, на правильном ли пути Я? У себя проверял, работает! Написал для удобства использования многократно. Успешно посылаю команды на Arduino и обратно Собственно код для подключения 1. Создаем новое приложение. 2. Подключаем библиотеку.
https://yadi.sk/d/DvN3XAncyNbb5 Код потерпел некоторые изменения, а в частности конструкция
| |||||||||||||||
Размещено в Delphi
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 32
Комментарии
-
Запись от Avazart размещена 11.11.2016 в 12:56
-
Ты меня преследуешь?
Сообщение от Avazart
Тогда вопрос тебе, а если я хочу этот же алгоритм использовать на C#или где нибудь еще?
Дай угадаю, ты ответишь...
На С# уже все есть.
Я написал эту библиотеку и почему то она работает. Методы которые я использовал слегка абсурдные. Мне хочется уточнить, потестировать так сказать в обществе, а не получать все новые и новые вопросы.
Сначала запусти, посмотри, а потом говори или ты троль?Запись от popryduhin размещена 11.11.2016 в 20:42
-
Запись от Avazart размещена 11.11.2016 в 21:18
-
То есть ты хочешь сказать что "ЭТО" не работает?
Нострадамус?
О великий я склоняюсь перед тобой.
Видимо все таки надо, я так и думал что не нужно код выкладывать, а то еще слямзит и будет кричать по всем углам.
Скажу больше, я подключаю к проекту, и успешно передаю и считываю информацию с com порта.
Так что дядя, иди кури...
Полезного более не говоришь.Запись от popryduhin размещена 11.11.2016 в 21:28
-
такие люди как ты создают иллюзию знатоков.
Знаю одного телемастера радио электорнщика, так тот тоже все время, та зачем это, это все хер**ня, послушай сюда и тому подобное.
Спился бедолага...
Запись от popryduhin размещена 11.11.2016 в 21:34
-
Ну начнем с того что код TBComPort в открытом доступе, и вы хоть его и "слямзили" в него не заглядывали.
Кодочитамус и кодоразбирамусь...
Сама идея использовать компонент подобным образом убога.
А что работает?
Банальный вопрос где отлов ошибок?
Я уже не говорю про это убожество:
Напомню компонент событийно-ориентированый...
Подобный быдлокод <...!> кому всрался.
Возможно если бы реакция была другой может был бы смысл объяснять подробнее и думать как помочь...
А так ...Запись от Avazart размещена 11.11.2016 в 21:40
-
Сообщение от Avazart
Действительно, котись, котись колобок...Запись от popryduhin размещена 11.11.2016 в 21:54
-
Вот ответь, что мешает этот компонент засунуть в библиотеку?
да и возможно отлов ошибок будет, хотя они уже отлавливаются в самом классе, уже.Запись от popryduhin размещена 11.11.2016 в 21:57
-
Кривые руки?
1. Ошибки не отлавливаются самим компонентом, обработка ошибок возлагается на пользователя класса для чего есть соответствующее событие.
2. Более того там не одно событие, поэтому делая обвертку стоило подумать как обеспечить работу событий.
3. Компонент уже имеет "синхронизацию" т.е. путем проброса через очередь сообщений фиктивному окну (как я помню)
4. Если хотелось работы без "событий" вероятно просто стоило переписать код с нуля, предусмотрев свою обработку ошибок и работу с таймаутами.Запись от Avazart размещена 11.11.2016 в 22:10
-
Специально залез в классDelphi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
const CM_COMPORT = WM_USER + 1; CEMess: array[1..15] of string = ('Попытка открыть несуществующий COM-порт', 'Порт занят другой программой', 'Ошибка записи в порт', 'Ошибка чтения из порта', 'Недопустимый параметр Async', 'Ошибка функции PurgeComm', 'Не удалось получить статус асинхронной операции', 'Ошибка функции SetCommState', 'Ошибка функции SetCommTimeouts', 'Ошибка функции SetupComm', 'Ошибка функции ClearCommError', 'Ошибка функции GetCommModemStatus', 'Ошибка функции EscapeCommFunction', 'Нельзя менять свойство, пока порт открыт', 'Ошибка обращения к системному реестру');
наверное это где то используется?Запись от popryduhin размещена 11.11.2016 в 22:14
-
или я что то опять кривыми руками не так сделал?Запись от popryduhin размещена 11.11.2016 в 22:15
-
Ок, где в вашем коде намек на обработку исключении?
Допустим пользователь вашего кода вызыват
Но происходит какая-то ошибка, что будет? И как пользователю получить описание этой самой ошибки?Delphi 1
Function COMOpen : boolean; stdcall; External 'comReadSend.dll';
Или вызывает
И что будет происходить:Delphi 1
function ReadComStr : string; stdcall; External 'comReadSend.dll';
1. При ошибке
2. При превышении таймаута.
Неожиданный конец сказки - сказал колобок доедая остатки лисицы.![]:->](//cyberstatic.net/images/smilies/aq.gif)
Запись от Avazart размещена 11.11.2016 в 22:20
-
Вообще суть в чем собственно была.
Я из Китая купил стартовый наборчик ардуино.
Вот и подумал реализовать библиотеку для связи по com порту.
Проектов будет много и каждый раз мне генерировать методы, когда можно просто кинуть файл и с блокнота копирнуть пару десятков строк. помимо общения через com порт еще разные фитчи засунуть.Запись от popryduhin размещена 11.11.2016 в 22:20
-
да пожалуйста, https://yadi.sk/d/tTcWzbo9yRPbX
ни это ли описание
случаемDelphi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 const CM_COMPORT = WM_USER + 1; CEMess: array[1..15] of string = ('Попытка открыть несуществующий COM-порт',
Запись от popryduhin размещена 11.11.2016 в 22:23
-
Ну да .. Разработчик компонента предусмотрел такой случай пробросом исключения.
Где это в вашем коде(интерфейсе)?
Или вы думаете что исключение выброшенное внутри кода DLL на Delphi обработается в C# ?
По нормальному стоило наверное ловить исключения, глушить их и преобразовывать в "коды возврата".
Delphi 1 2 3 4 5 6 7 8 9 10
Function COMOpen : boolean; begin try Result:=FComPort.Open(); Except on E : EComPort do begin FLastErrorDescription:= E.Message; Result:= False; end; end;
Хотя C# не знает String, тут стоит будет тоже подумать как это решить.Delphi 1 2 3 4
Function LastErrorDescription : String; begin Result:= FLastErrorDescription; end;
Запись от Avazart размещена 11.11.2016 в 22:29
-
Одни сарказмы....
Сообщение от Avazart
Запись от popryduhin размещена 11.11.2016 в 22:30
-
Короче понятно все, убийца всех надежд на жизнь.
Не вижу смысла далее вести дискуссию.
Единственное что не правильно в моем коде так этои то что я эту функцию опрашиваю в отдельном потоке, думаю что message можно слать изDelphi 1
ReadComStr
в приложение, а та в свою очередь опрашивать ReadComStrDelphi 1 2 3 4 5 6 7 8 9 10 11
{ TBCommPort } procedure TBCommPort.BComPortRxChar(Sender: TObject; Count: Integer); var s : string; begin BComPort.ReadStr(s, count); ResponseStr := OemToAnsiStr(s) end;
Надеюсь поправить, да и какое дело кому то, что там компонент сидит, компоненты тоже код.Запись от popryduhin размещена 11.11.2016 в 22:39
-
Запись от Avazart размещена 11.11.2016 в 22:45
-
Быдло КОТ на аватарке
Сообщение от Avazart
Запись от popryduhin размещена 11.11.2016 в 22:48
-
Запись от Avazart размещена 11.11.2016 в 22:51



![]:->](http://cyberstatic.net/images/smilies/aq.gif)

