партнерский раздел
ФорумЭксплуатацияСлучайная блокировка турникета при выходе сотрудников с фабрики

Эксплуатация » Случайная блокировка турникета при выходе сотрудников с фабрики

Добрый день. В настоящий момент есть необходимость написать сценарии.Задача такая
Необходимо организовать принцип выборочной блокировки турникета для выходящих сотрудников в конце рабочего дня. Или так   может сделать чтобы блокировались через каждые 30 40 секунд, сценарии будем запускать в конце рабочего дня. Имеется 4 турникета. Может у кого было подобное задание от руководства, опыта в написании скриптов к сожалению не имею. Поделитесь опытом пожалуйста.Спасибо за внимание.

6 лет 10 месяцев назад

avatar
Не совсем понятно ТЗ. Напишите конкретнее, что вы хотите реализовать. Самое простое, это блокировка вручную, если у вас есть на проходной специальный сотрудник какой-нибудь. Можно блокировать через определенное кол-во времени, как вы написали, можно блокировать людей с определенной фамилией или именем. Вариантов много, нужна конкретная задача. Ну и версию Ориона напишите.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Вариант с кнопкой отпадает, нужно это реализовать на программном уровне. Версия Ориона 1.12 выпуск 2, Задача такова В 17:00 люди выходят с фабрики имеются 4 турникета  нужно сделать произвольную блокировку прохода для досмотра данного сотрудника охраной. Или как вариант пусть турникеты блокироуются к примеру каждые 30 секунд. 

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

Вот что пришло на ум: в сценарии пишется условие, в котором анализируется текущее время. Допустим если текущее кол-во секунд не чётное, то блокируем доступ, если чётное, то не блокируем. Блокируем допустим на 1 сек. Также, что бы сценарий отрабатывал автоматом, ставим проверку по времени, допустим что-бы работал только с 17-30 до 18-00. Дальше этот сценарий привязываем к событию Идентификатор хозоргана (вроде) считывателя.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

5 ответов

Насчет блокировки так сказать по расписанию, например вам необходимо это делать с 17:30 до 18:00, создаете окно для запуска сценариев, там шаг одна минута,17:31...18:00 в итоге 30 интервалов на каждый день, в самом сценарии используете шаги, заблокировать считыватель(указать считыватели), (ядро) пауза(указать время блокировки), разблокировать считыватель(указать считыватели). Далее на вкладке расписание, указываете сценарий и окно запуска, получаете что с 17:31 до 18:00 каждую минуту будет запускаться сценарий, который блокирует считыватели, ждет необходимое время и разблокирует, на каждый турникет можно указать свой сценарий и окно запуска. Все это можно сделать стандартными средствами. Правда я не знаю как поведет себя АРМ и оборудование при таком частом запуске сценариев.

6 лет 10 месяцев назад

avatar
Не, так не пойдет, так как нужно блокировать не все проходы, в конкретный промежуток времени, а именно проход конкретного человека. А то получится так: считыватель заблокируется на 10 сек, и в течении этих десяти секунд никто не сможет пройти через турникет. Придётся досматривать всех )))
Проще блокировать, допустим, каждого 10 проходящего, либо вообще рандомно. Не помню, есть рандом в Орионе.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Ну заблокируйте считку на 1 сек, и не каждую минуту и не каждый турникет, окна посмотрие как создаются, можно в разные дни разные турникеты блокировать, коснулся, блок, на досмотр, остальные проходят. Насчет рандома, надо думать, на это больше времени надо. Написал пока что сразу на ум пришло.

Тремасов Константин Александрович 6 лет 10 месяцев назад

Хорошо, блокировка на 1 сек., потом перерыв 30 сек. А если поток выходящих не большой. Тогда шанс попасть в промежуток в 1 сек. будет минимальный.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Эт когда такое было чтоб с фабрики по звонку в конце смены был минмальный поток то?)))

Тремасов Константин Александрович 6 лет 10 месяцев назад

Ну эт я пытаюсь предусмотреть все возможные варианты развития событий ))

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Поток людей на выход приличный примерно 300-400 человек. Рандомная блокировка отличный вариант но догадываюсь что реализовать достаточно сложно. А кто подскажет как сделать блокировку каждого 10 человека. Если ничего не получиться будем делать блокировку по расписанию на несколько секунд турникета.

6 лет 10 месяцев назад

avatar
А блокировать выходящих на нечетных секундах, как я выше предложил, не подойдет? Не обязательно именно на нечетных. Можно сделать проверку и ловить скажем тех, кто выходит на 3, 5 и 8 секундах на конце.
А для блокировки каждого десятого - создаётся файл, при каждом проходе в него записывается число с инкрементом 1, т. е. первый прошёл, записалось 1, воторой прошел, записалось два и т. д. На 10 считыватель блокируется, а число в файле обнуляется, и всё начинается заново.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

А как мне написать скрипт На Блокировку каждого 10 го человека при выходе.  У вас есть пример чтобы понять куда копать.

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Сценарий
Переменные

Перем Событие1;
Перем Считыватель1;

НачалоСценария

Событие1 = ПолучитьСобытие();
Если Не ПустоеЗначение(Событие1) Тогда
Если Не ПустоеЗначение(Событие1.Элемент()) Тогда
Считыватель1 = Событие1.Элемент();
КонецЕсли;
Если Не ПустоеЗначение(Считыватель1.Тег()) Тогда
Считыватель1.ПоместитьВТег(Число(Считыватель1.Тег())+1);
Иначе
Считыватель1.ПоместитьВТег("1");
КонецЕсли;
Если Число(Считыватель1.Тег())==9 тогда
Считыватель1.ЗаблокироватьДоступ();
Задержка(3000);
Считыватель1.ВосстановитьДоступ();
Считыватель1.ПоместитьВТег("0");
КонецЕсли;
КонецЕсли;
КонецСценария

Проверил на демонстраторе, вроде блокирует.
Если число(Считыватель1.тег())==9 // 9 это количество проходов, т.е. после 9 прохода считка по которой выходят блокируется на время: Задержка(3000); значение в скобках это время в миллисекундах, на которое производиться блокировка.
Привязывается к событию "Проход" на нужных считывателях.
Работает только при включенном АРМ, после перезагрузки проходы не сохраняются, отсчет начинается заново.
Конечно возможны ошибки, пробуйте, если возникнут, пишите буду править. 
 

6 лет 10 месяцев назад

avatar
Спасибо Константин за скрипт. На работу приеду буду пробовать.

 

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

В 1.12 этот сценарий не будет работать, так как функция ПолучитьСобытие была введена в версии 1.20.
Тут надо считыватель находить по ИД. Как найти ИД, я хз, только опытным путем: создать сценарий с нужным ситывателем в конструкторе, а потом посмотреть код сценария, там будет виден ИД.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Мне кажется нужно привязывать к событию Идентификация хозоргана, а не проход, так как если привязать к событию проход, то будет заблокирован проход следующему человеку, если он попытается пройти в течении задержки (в данном случае 3 сек.). Если привязывать к событию Идентификация хозоргана, то теоретически будет блокироваться доступ текущему человеку. Но надо пробовать.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Ну это уже как хотите, пробуйте с нужными событиями, это не проблема. По поводу, ИД считки, переделаю, сейчас на выезде.

Тремасов Константин Александрович 6 лет 10 месяцев назад

Сценарий
Переменные

Перем Считыватели1;
Перем Считыватель1;

НачалоСценария

Считыватели1 = СоздатьОбъект( "Считыватели" );
Считыватель1 = Считыватели1.ПолучитьПоИД(139);
Если Не ПустоеЗначение(Считыватель1.Тег()) Тогда
Считыватель1.ПоместитьВТег(Число(Считыватель1.Тег())+1);
Иначе
Считыватель1.ПоместитьВТег("1");
КонецЕсли;
Если Число(Считыватель1.Тег())==9 Тогда
Считыватель1.ЗаблокироватьДоступ();
Задержка(3000);
Считыватель1.ВосстановитьДоступ();
Считыватель1.ПоместитьВТег("0");
КонецЕсли;

КонецСценария

Считыватель1 = Считыватели1.ПолучитьПоИД(139); // В скобках указать пользовательский номер считывателя. При таком раскладе, надо создать 4 сценария, для четырех считывателей и в каждом указать пользовательский номер в скобках, каждый привязать к удобному событию.

Тремасов Константин Александрович 6 лет 10 месяцев назад

Константин здравствуйте, пробовал запускать ваш сценарии, через конструктор скрипта нашёл номер ИД считывателя. Но блокировки не происходит считки. Можете если есть возможность у себя протестировать скрипт на блок?

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

Проверю, но не сегодня, возможно есть различия в командах между 1.12 и 1.20.2. у вас в журнале идут события "запуск сценария" и после 10 раза "доступ заблокирован"?

Тремасов Константин Александрович 6 лет 10 месяцев назад

Спасибо. Да в журнале побития иду что доступ предоставлен но на 10 раз не блокируется считка.(((

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

События "Доступ предоставлен" в логах мало, надо ещё и Запуск сценария там увидеть ;) сценарий то привязали к событию на нужном считывателе (ИД которого в самом сценарии указали)?

Волков Андрей 6 лет 10 месяцев назад

Вячеслав, к какому событию считывателя привязываете сценарий?

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Вячеслав. К Доступ предоставлен.

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

У меня сценарий работает. Вы перезагружали ОЗ после привязки сценария к считывателю?

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

И попробуйте увеличить время ожидания скажем до 5 сек. или даже до 10, чтобы уж точно убедиться, происходит блокировка или нет.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Еще можете в конце сценария добавить вот такую строчку

КонецЕсли;
Сообщить(Считыватель1.Тег(), 1);
КонецСценария

И в ядре опроса на вкладке сценариев смотреть, меняются у вас значения в Теге.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Вячеслав вы сценарий пробуйте Котоый Константин написал? А у вас какая версия Ориона ? 

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

Да, сценарий который написал Константин, второй который. Первый не будет работать на 1.12
Я вообще запускал его на 1.10 действующей.
ОЗ перезагружали? Строчку в код добавляли, как я говорил, смотрели, что происходит после этого в ядре опроса в сценариях? Если всё верно отрабатывает, должны появляться цифры, после каждого предоставления доступа, от 1 до 8, и так по кругу.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Сценарий вручную вбивали или копировали текст с форума? Если вручную, кидайте сюда листинг, возможно какая-то ошибка закралась.

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Сценарии копировал с форума. 

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

1.12

6 лет 10 месяцев назад

avatar
Спасибо всем большое за представленные идеи , за помощь.. Константин спасибо за скрипт, Разобрались дописали Вячеслав вашу строчку подвязали сценарии к считывателю. И вот оно счастье. Ещё раз спасибо огромное.

Лобачев Вячеслав Викторович 6 лет 10 месяцев назад

Ну если всё заработало, то эту строчку можете удалить. Это в качестве отладочного инструмента. 

Ростовцев Вячеслав Викторович 6 лет 10 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Ну походу пока я отдуплился, тут все порешали)

6 лет 10 месяцев назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

5298 раз

ЗАДАН

6 лет 10 месяцев назад

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.