![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
![]()
Добрый день, подскажите пожалуйста как реализовать добавление событий в String list или быть может, просто в таймер и вызывать их поочередно? Проблема такая - есть два датчика которые подключены к одному ком порту, если обращаться с опросом статуса к одному из них- проблем нет, а если одновременно к двум, соотвествено будет ошибка-есть идея опрашивать их текущий статус по событиям из string lista
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]()
- а какое отношение к com-порту имеет StringList ???
- ну как же там (в StringList) накапливаются результаты опроса. - а кто (какой код, объект) передает туда данные ? - ... - вот там (в том коде, объекте) и надо делать разграничение доступа к com-порту. - но это разные объекты для каждого из портов. - в таком случае к вашим услугам семафоры, критические секции и прочие объекты синхронизации.
программа — запись алгоритма на языке понятном транслятору
|
![]() |
![]() |
![]() |
#3 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]() Цитата:
Шина общая так что опрос датчиков будет по любому последовательный. А глобальный массив будет выступать в качестве буфера или кэша. А остальные части программы уже читают из него. Это ускорит работу кода. Блокировки не нужны Интел гарантирует активность на запись DWord выполненных на границе 4. Собственно компилятор и так выравнивает данные. Единственно если датчик умный и там не просто число а некоторая структура с хронением состояние от которого зависит валидность данных то тут лучше подстраховаться и зделать мьютекс на общий глобальный объект. Или за доккументировать грязное чтение.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Используйте функциональный тип
http://pascalabc.net/downloads/pabcn.../proctype.html Для методов класса в конце типа добвляее of object; Складываете свои события в массив и из него вызываете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#6 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]()
А какие проблемы?
В моих программах работы с железяками любое действие пользователя требующее обращение к железу оформляется как некая структура/класс и заносится в список. Ранее это был TList, затем это стал TObjecList. Далее как только обработано предыдущее обращение к железякам, берется первый элемент из списка и выполняется. |
![]() |
![]() |
![]() |
#7 | |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
![]() Цитата:
1)Нажали кнопку пуск №1 2)Идет опрос датчика №1 Приехал второй клиент 3) Нажимаем кнопку пуск №2 4) Идет опрос датчика №3 Получается что Пуск №2 произойдет только после того как окончится опрос датчика №1 и скинет статус "СТОП", но мне нужно что бы Пуск№2 сработал в не зависимотси от того идет опрос датчика №1 или нет, например если это АЗС - То в момент налива идет опрос колнки№1, и приехал второй клиент, нужно запустить вторую колонку№2 вне зависимости от того заправился на колонке №1 или не заправлился еще |
|
![]() |
![]() |
![]() |
#8 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]() |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 09.06.2009
Сообщений: 151
|
![]()
Запускается таймер 1000 :
Код:
|
![]() |
![]() |
![]() |
#10 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]()
Ну так вот. Заведите для каждой колонки флаг (переменную типа 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 |