Сайт официального представителя Tibbo в РФ
    Правила форума | Поиск
    Имя пользователя (login): Пароль: | Забыли пароль? | Регистрация

    EM2001 контроллер c web-интерфейсом

    Искать в теме
    Автор Сообщение
    EM2001 контроллер c web-интерфейсом
    Добрый день.
    Разрабатываю контроллер для системы контроля и управления доступом на базе EM2001. Возникает много вопросов по ходу программирования, работы EM2001.
    Это не первая моя разработка, предыдущая к сожалению в серийное производство не попала. В первой разработке столкнулся со сбойной работой wiegand на EM1001 при интенсивной работе на другом порту периферийного RS485-OSDP. Решили проблему заменой на EM2001. Устройство было разработано с веб-интерфейсом в виде виртуального пульта управления для контроллеров, работающих по протоколу OSDP.
    В настоящее время пытаюсь запрограммировать EM2001 для решения более амбициозного.
    Однако, разрабатывая веб-интерфейс администратора устройства, ввод данных в динамические таблицы и вывод их с передачей/запросом, хранением во флеш-памяти EM2001, столкнулся с рядом проблем.
    1) Проблема медленного доступа к данным через цепочку get/post xmlhttprequest - sock.gethttprqstring/setdata - fd.getdata/setdata. Достигнутое среднее время срабатывания цепочки у меня составляет на уровне 300 мс (даже при установленном таймауте на get в 1 мс). Т.к. единовременно может быть передано не более 255 байт, а в моём случае в файлы пишу блоками по 7/44 байт построчно, то при существенном количестве записей чтение и запись занимает много времени. Особенно критично выходит при чтении, когда запрашивается целая таблица. А в планах запрашивать таблицы данных по 44байт×10тыс. строк.
    2) Проблема медленной работы веб-сервера EM2001. Проявляется при существенных задержках отклика в сети, в сети интернет. Когда задержка составляет порядка 100-800 мс (допустим на стороне клиента мобильный интернет 2G) и выше, то нередко сервер не отвечает, выводится ошибка в браузере о сбросе соединения сервером. Редкие браузеры могут справиться с этой проблемой, как правило браузеры с предварительной загрузкой на свой сервер и т.п. способны только.

    Если существует более успешные примеры мне бы хотелось о них знать и увидеть пример кода для того, чтобы я смог исправить работу своего приложения. Прошу совета, помощи.
    Re: EM2001 контроллер c web-интерфейсом
    Цитата: Heckfy 23.02.2020 14:43

    2) Проблема медленной работы веб-сервера EM2001. Проявляется при существенных задержках отклика в сети, в сети интернет. Когда задержка составляет порядка 100-800 мс (допустим на стороне клиента мобильный интернет 2G) и выше, то нередко сервер не отвечает, выводится ошибка в браузере о сбросе соединения сервером. Редкие браузеры могут справиться с этой проблемой, как правило браузеры с предварительной загрузкой на свой сервер и т.п. способны только.


    Нашёл свою ошибку в коде, был установлен sock.connectiontout=2.

    В остальном, по первой проблеме веду переписку с техподдержкой tibbo.com (Тайвань). Для решения подобных задач производитель разработал очередной API, называется CODY, с функционалом library 2.1.3. Согласно своего тестирования, для достаточно простой таблицы из 5 полей типа srtring по 64 байта, производитель получил вывод 700 строк таблицы за 8 секунд, о чём мне и сообщил. К сожалению, хотя мне был предоставлен код для тестирования, это подтвердить пока не могу. В TiOS Simulator загрузил для проверки на функциональность динамических таблиц производителя. После перезагрузки страницы с таблицей не всегда все строки выводятся у предоставленного образца, о чём сообщил производителю. Документация на API отсутствует и конфигуратор пока не удалось запустить. Если бы без указанных косяков, то вариант. Хотя для моей более сложной структуры таблицы и где я пытаюсь использовать эффективно флеш-память это сложно назвать вариантом. В настоящее время таблица из 6 полей, составляющих в сумме 44 байта в строке таблицы, в объёме 200 строк у меня выводятся в лучшем случае за 30 сек. Думаю, что задержка происходит в запросе GET клиентской части к серверной, в адрес не загружаемой страницы, где должен исполнятся серверный код. В CODY от производителя вероятно такой проблемы нет, запрос клиента html/javascript к серверу, коду на tibbo basic, записи/чтению таблиц-файлов, хранимых во флеш-памяти, происходит для пользователя CODY вероятно прозрачно.
    Re: EM2001 контроллер c web-интерфейсом
    Я исследовал код образца, предоставленного разработчиком. И нашёл ошибку. Введено слишком маленькое значение sock.txbuffrq. Поэтому выделенного буфера не хватало для корректной передачи и вывода данных.

    И насколько я понял код образца, то проблема его ещё глубже. В коде отсутствует работа с параметром sock.txbuffsize. Но данные загружаются в буфер, в буфер весьма ограниченной оперативной памяти, данные всех записанных строк таблицы согласно кода. Возникает тогда вопрос, а что вообще на выходе получим? Что получим когда данные превысят размер оперативной памяти, для EM2001 это 66 КБайт, не включая расход на остальные данные приложения?
    Как видно на скриншоте, я исправил параметр sock.txbuffrq, и получил корректную передачу и вывод данных. Однако, это половина дела, и в целом не решает проблему. Помимо того, что код образца в настоящем виде пока вряд ли способен выдать данных в таблицу больше, чем предел оперативной памяти устройства. Значение sock.txbuffrq должно в приложении динамически меняться в зависимости от запросов, а то может возникнуть ситуация из статически выставленного большого значения, что памяти не хватит остальному приложению. И как это решить я пока не знаю.

    В настоящее время, основываясь на решении, что в коде образца, с исключением указанных выше ошибок я исправил код своего приложения. И достиг хороших результатов, данные загружаться в таблицу стали гораздо быстрее. Ранее для выгрузки данных я использовал буфер лишь на 223 байт. И на большом количестве запросов, медленности их откликов, я терял много времени. Теперь я увеличил буфер передачи данных до 100*256-33=25567 байт и количество запросов сократилось в 100 раз соответственно. Однако, значение sock.txbuffrq в коде моего приложения выставлено опытным путём, а от него зависит работоспособность всего приложения. И как решить этот конфликт с остальным приложением, получить приемлемое количество сокетов без возникновения ситуации блокирования работы?
    Отредактировано: Heckfy 28.02.2020 19:06
    Re: EM2001 контроллер c web-интерфейсом
    Цитата: Heckfy 28.02.2020 18:17
    Я исследовал код образца, предоставленного разработчиком. И нашёл ошибку....
    Однако, значение sock.txbuffrq в коде моего приложения выставлено опытным путём, а от него зависит работоспособность всего приложения. И как решить этот конфликт с остальным приложением, получить приемлемое количество сокетов без возникновения ситуации блокирования работы?


    Господа, наконец-то совместно с техподдержкой tibbo найдено решение проблемы. Наконец-то, специалистами техподдержки найден код, который исправляет ошибку работы их образца, и он же мне открыл возможность работать с потоком. Мне пришлось и здесь тоже им помогать, допиливать.
    Однако, в случае моего кода работа с потоком и буфером принесла значительный прирост производительности, ровно так, как указано в https://docs.tibbo.com/taiko/sock_url_subst и https://docs.tibbo.com/taiko/sock_http_buff.
    А в случае кода CODY лишь наполовину, указания https://docs.tibbo.com/taiko/sock_http_buff не выполняются. В отношении кода своего образца техподдержка пока расписалась в своём бессилии.
    Ну да ладно, им с этим жить, надеюсь они разберутся с этим и исправят в своём CODY.
    Если говорить о CODY, то в CODY я нашёл немало проблем. Этот инструмент пока желает лучшего, для серьёзных разработок не пригоден. Но для начинающих и для тех, кто пока не готов овладеть TIDE, вполне годится. Но если вы решили его использовать в качестве базы или шаблона для своей разработки, то боюсь, что вас постигнет разочарование.
    Я же продолжаю разработку своего кода. После того, как я увидел решение проблемы с запросом данных, его скоростью, для меня стали очевидны проблемы вывода данных, обработки на стороне клиента. В образце таких проблем нет, поэтому я попытаюсь достигнуть в этом паритет. Тогда у меня будет решение полностью превосходящее CODY.
    Код решающий проблему запроса данных, контролирующий поток, прикладываю. Как и демонстрацию его работы на примере моего кода и кода образца. См. скриншоты.
    Re: EM2001 контроллер c web-интерфейсом
    Паритет достигнут.
    Задача по записи данных на флеш-диск EM2001 в размере 10000 строк таблицы по 44 байта каждой, их запросу со стороны веб-клиента, получению и выводу в виде таблицы, с сортировкой, редактированием, многостраничной навигацией решена.
    Оказалось реально получить за 25-45 секунд, в зависимости от сети передачи данных и производительности веб-клиента, данные в размере 850 КБайт, что в моём случае составляет 10000 строк таблицы.
    В настоящее время мой код способен получить и вывести эти данные в виде таблицы за 2-3 минуты с момента их запроса. Что соответствует техническому заданию. Скриншоты прилагаю.
    Как это удалось?
    После того, как с помощью техподдержки Tibbo Technology получилось разобраться с передачей данных, у меня последовал длительный этап оптимизация кода клиентской части. Динамическая таблица, в которой каждое поле - это поле ввода данных с набором функций, достаточно громоздкая и ресурсозатратная вещь сама по себе. Также потребовалось немало усилий по выбору-тестированию функций для работы с коллекциями htmlelement, в некоторых случаях приходилось доходить до самых азов javascript. В итоге удалось сократить время обработки данных и их вывода в табличном виде в 2 раза, довести до требуемых 2-3 минут. Также многостраничную навигацию удалось сделать достаточно быстрой. И не только навигацию, а также сортировку. Над самым последним, чем бился, это была кроссбраузерность. IE без .net - это целая проблема. В общем код адаптировал и под IE, только вот зря парился, без .net IE - это 10-кратный тормоз. В документации придётся указать, чтобы пользователь избегал применения IE. А также в код вернуть полифилы и т.п., с чем FF и другие браузеры быстрее работают, для IE только оставить анахронизмы. Chrome, Edge, Yandex, Opera - браузеры проглотили нормально анахронизмы под IE, особо не потеряв производительности, а вот FF затормозил на сортировке с анахронизмом вставки элементов по циклу.

    1080X1920px 113Kb

    1080X1920px 82Kb

    648X1152px 96Kb

    648X1152px 88Kb

    1024X639px 122Kb