|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.09.2021, 07:22 | #1 |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
Список событий в StringList
Добрый день, подскажите пожалуйста как реализовать добавление событий в String list или быть может, просто в таймер и вызывать их поочередно? Проблема такая - есть два датчика которые подключены к одному ком порту, если обращаться с опросом статуса к одному из них- проблем нет, а если одновременно к двум, соотвествено будет ошибка-есть идея опрашивать их текущий статус по событиям из string lista
|
01.09.2021, 09:14 | #2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
- а какое отношение к com-порту имеет StringList ???
- ну как же там (в StringList) накапливаются результаты опроса. - а кто (какой код, объект) передает туда данные ? - ... - вот там (в том коде, объекте) и надо делать разграничение доступа к com-порту. - но это разные объекты для каждого из портов. - в таком случае к вашим услугам семафоры, критические секции и прочие объекты синхронизации.
программа — запись алгоритма на языке понятном транслятору
|
01.09.2021, 12:31 | #3 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Шина общая так что опрос датчиков будет по любому последовательный. А глобальный массив будет выступать в качестве буфера или кэша. А остальные части программы уже читают из него. Это ускорит работу кода. Блокировки не нужны Интел гарантирует активность на запись DWord выполненных на границе 4. Собственно компилятор и так выравнивает данные. Единственно если датчик умный и там не просто число а некоторая структура с хронением состояние от которого зависит валидность данных то тут лучше подстраховаться и зделать мьютекс на общий глобальный объект. Или за доккументировать грязное чтение.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
01.09.2021, 13:32 | #4 | |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
Цитата:
|
|
01.09.2021, 20:49 | #5 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Используйте функциональный тип
http://pascalabc.net/downloads/pabcn.../proctype.html Для методов класса в конце типа добвляее of object; Складываете свои события в массив и из него вызываете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
02.09.2021, 02:40 | #6 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
А какие проблемы?
В моих программах работы с железяками любое действие пользователя требующее обращение к железу оформляется как некая структура/класс и заносится в список. Ранее это был TList, затем это стал TObjecList. Далее как только обработано предыдущее обращение к железякам, берется первый элемент из списка и выполняется. |
02.09.2021, 10:13 | #7 | |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
Цитата:
1)Нажали кнопку пуск №1 2)Идет опрос датчика №1 Приехал второй клиент 3) Нажимаем кнопку пуск №2 4) Идет опрос датчика №3 Получается что Пуск №2 произойдет только после того как окончится опрос датчика №1 и скинет статус "СТОП", но мне нужно что бы Пуск№2 сработал в не зависимотси от того идет опрос датчика №1 или нет, например если это АЗС - То в момент налива идет опрос колнки№1, и приехал второй клиент, нужно запустить вторую колонку№2 вне зависимости от того заправился на колонке №1 или не заправлился еще |
|
02.09.2021, 18:48 | #8 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
|
03.09.2021, 17:56 | #9 |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
Запускается таймер 1000 :
Код:
|
03.09.2021, 18:32 | #10 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
Ну так вот. Заведите для каждой колонки флаг (переменную типа Boolean) и взводите его после запуска соответствующей колонки. А в процедуре таймера проверяйте эти флаги и посылайте по очереди команды для тех колонок, у которых этот флаг установлен. Сбрасывайте флаги по окончании залива соответствующей колонки.
Как вариант. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
StringList | nefakt | Общие вопросы Delphi | 14 | 05.02.2014 19:55 |
Поиск и удаление строк в StringList из другово stringlist | SmoK777 | Общие вопросы Delphi | 3 | 06.08.2012 08:21 |
Stringlist | record222 | Общие вопросы Delphi | 1 | 26.06.2012 17:35 |
StringList | adr | Общие вопросы Delphi | 0 | 05.11.2010 18:43 |
stringlist | grater83 | Общие вопросы Delphi | 2 | 21.09.2009 14:26 |