<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Круто!!!
Один вопрос — чем обусловлены ведущие символы нижнего подчеркивания в именах методов?
(2)Скорее всего привычкой))
Неужели ARDUINO не справиться с простейшими задачами? Может быть 1С полезнее использовать для конфигурирования логики и запись результата в память ARDUINO?
Иначе если после включения обогревателя зависнет 1С сервер, будет жарко.
Либо добавить простейшую логику защиты от зависания сервера. Обогреватель включается максимум на пол часа. Если за это время не получен ответ от сервера, переводим в состояние по умолчанию, заданное ранее в 1С, рекомендуется состояние по умолчанию — «выключен».
(2) хотел выделить процедуры которые являются комбинациями, чтобы набрав «К._» в подсказке появился их список, не знаю почему выбрал именно этот символ «_» 🙂
(4) Справится, но для этого нужно писать код для ардуины, а я хочу приобщить тех кто может писать только на 1С 🙂
Зависания и потеря связи предусмотрена, есть команда К.АвтоСброс(НомерПорта, ВремяВСекундах), вызвав её в МК включится таймер и если по прошествии указанного времени МК снова не получит эту команду то перезагрузится сбросив состояние всех пинов. В случае если причино стало зависание COM порта то можно перезапустить агент сервера К.ПерезапуститьАгентСервера1С, а если причина в ошибках ОС то перезагрузить сервер К.ПерезагрузитьСервер1С … конечно если зависнет сам сервер то решать проблему нужно чем-то стороннем.
прочитав эту публикациюPwC спрогнозировала экономический эффект от внедрения IoT в России
т.е. умный дом теперь требует купить серверную лицензию 1С? Или мерзни как нищеброд. Вендор аплодирует )
Серверная 1С требует еще и сервер БД, даже фришный, но все равно ресурсы ест — как из пушки по воробьям.
(8) размер базы несколько мегабайт, подойдёт скуль экспресс он бесплатный. У меня всё на мини ПК работает ( флешка 30 гиг, проц 1.4*4 вроде, 2 гига ОЗУ)
(9)
Но сервер 1С платный.
(6)
Пусть лучше освоят для разнообразия другие языки и технологии….
(9)
… и вот это вот всё для того, чтобы включать вентилятор?
Господа, вы слишком много кушать.
(11)
Например, родной русский для выдачи команд сыну.
(12)
Ну почему всё? Ещё 1С сервер и СУБД 🙂 Управлять вентиляторами это вам не сыну команды отдавать! Тут серьёзно всё…
(12) Я бы сказал жиром пука…те
Не, мне, конечно, понравилось все это (в плане темы), но, господа! XXI-й век на дворе, стоимость «райспбери пиай» дешевле не только микросервера (я так понял, что 1С микросервер на 5 клиентов за 15 косарей выпустила именно для подобного шаманства), но и чуть ли не учебной 1С-ки. И в линухе не нужны эти все драйвера и компоненты для работы с COM-портом, эмулируемым кривыми виндовыми дровами — там уже есть порт-файл, в который ты на том же PHP/Python/C++/Go/куче всего другого можешь писать и из которого можешь читать. Это не говоря о том, что на «райспбери» (или «оранже» и прочих) девайсе ты можешь GPIO дергать вообще хоть из шелла. Кароч, за напоминание — спасибо, а за 1С в качестве управлятеля — чисто поржать.
(16) и много ли программист 1C накодит на PHP/Python/C++/Go/ ? для тех кто зная только 1С хочет что-то сделать малинка не альтернатива. Дёргать GPIO вообще опасно, 15мА превысишь и нет малинки….. и насчёт файла, ну и в винде можно писать/читать напрямую в порт «\.Com8» …
(16) да главное оттащить прога от регистра бухгалтерии, если у него душа лежит к робототехнике
он сам С++/пайтон в руки возьмет, потыкавшись с 1С
«Умный дом на 1С» даже звучит страшно )))
Спасибо за комментарии. Ржал…. Настроение подняли с утра…
(6) Как вариант применения 1С, прямо скажу, для меня было неожиданно 🙂 Классный изврат, порадовал 🙂
Но вот практического применения я пока увидеть не могу. Очень дорого. К всеобщему счастью, стоимость ардуины мега в китае около 400 руб, web расширения к ней того же порядка, силовые модули тоже рублей по 100 на контакт. Все, получаем веб сервер для управления. Да придется немного посмотреть уроков и почитать. Но извините меня, объем знаний для начального программирования ардуины ничтожно мал, по сравнению с применением той же БСП. Я сомневаюсь, что даже начинающий 1С-ник будет испытывать какие-либо проблемы при изучении. А вот для тех, «кто может писать только на 1С» думаю области управления устройствами лежат за пределами их интересов…
Повторюсь, спасибо за интересную идею применения, осталось только придумать область применения.
Хотя у меня уже есть вариант — управление светом на рабочем месте бухгалтера путем проведения документа «расход электроэнергии» 🙂
ждем ЦУП на 1С =)
и желательно на клюшках.
(6) Как чистый эксперимент интересно, но не для реального использования. Был опыт разработки связки 1с и ардуино для испытательной системы.
На первом месте должна быть надежность системы. При выходе из строя отдельных частей системы, или потери связи одного устройства с другим.
Ардуина должна рулить сама, а 1с только дает команды на смену режимов.
Повисла ночью у вас 1с-ка или винда или роутер и все система ушла в цикличный рестарт и сброс пинов.
Тогда надо поставить еще 1 ардуину, которая будет проверять каждое из устройств и в случае зависания ребутить комп, роутер и тд. 🙂
Года 3 назад выиграл у методиста бутылку текилы, за реализацию получения и записи в регистр сведений температуры с датчика ds18b20. А по теме, конечно интересная идея, но вот опускать низкий уровень в 1С мне кажется не правильно(но сама реализация интересна), я бы реализовал саму систему на ардуино, а вот управление системой на 1С.
(21) Практическая цель — возможность сделать какое-то устройство без изучения материала по ардуине. Сравнивать с какими-то специально разработанными для этого платформами не корректно. Но тут есть 2 преимущества которые являются очень весомыми для 1Сника:
1.Пишем на языке 1С
2. Доступны все фичи платформы.
В ленивом режиме пишу нечто подобное, но с некоторым отличием:
1. 1С только как центр управления
2. Исполнительными устройствами являются MegaD 2561
(17) если программист не сможет что-то запилить на питоне, на котором дети 12-летние пишут вполне приличные приложения, то это, во-первых, ни разу не программист и даже в 1С ему делать нечего.
А по поводу 15мА, то это Ваше личное непонимание того, как все работает. У народа до 0,5А на выходе напруга. Но ежу понятно, что двигателем крутить надо через драйвер (это микросхема такая, а не то, что кто-то подумал). А для чтения данных с GPIO другие методы.
(27)
Это сила тока 😉
(28) Все всё искричество в ОМАХ меряют! 🙂
(27) 16 мА это тех характеристики, а не моё личное мнение.
(30) Суть GPIO — прочитать уровень, установить уровень. Они двух вариантов: цифровой — высокий/низкий и аналоговый — это некий каскадный ЦАП (энное количество бит по количеству резисторов в каскаже). Дальше есть ШИМ — широтно-импульсная модуляция сигнала для управления скоростью вращения двигателя (ясно, что через линию управления драйвера), угла поворота или интенсивности свечения светодиода (можно и для иных моментов — генератор прямоугольного звукового сигнала на зуммерах, например). Все. Там мощи не надо. GPIO — это, считай, нога цифровая/аналоговая ардуинки — не более. То же самое для малины, апельсины и прочих девайсов (апельсинку зиро H2+ можно у кетайцев с 256 метрами и 4-мя ядрами 1,2Ггц купить за 700 рублей с учетом доставки).
Так вот, на ногах максимальная сила тока — до 0,5А = 500мА (от источника питания зависит в принципе, от ноги, от девайса). Напряжение — 5/3 вольта (в зависимости от девайса и ноги). Дальше все нетрудно посчитать, закон Ома в этих ваших интернетах описан в достаточном количестве источников. Подбираете правильный резистор и огребаете профит в виде данных с датчика, верчения пропеллером или поворота камеры на угол альфа.
И все это на питоне или даже bash-е. Для извращенцев на последние малины ставится Windows IoT.
(31) Зачем вы всё это пишите? А на счёт МК у которого через GPIO можно пропустить 0.5 Ампера, поделитесь ссылочкой пожалуйста.
(32) а все зависит от того, зачем Вы пишите это:
То, что бред написан — это полбеды. Беда в том, что кто-то этот бред прочитает и подумает, что GPIO дергать вообще нельзя.
(33)
Не культурный человек , да и с названием раздела ошиблись
(34) да вы батенька
судя по тому, что вы не поняли его, он явно не
Вывод 5 вольт это 5 вольт от преобразователя напряжения, а GPIO это выводы АЦП
Для домашнего применения (выключить вентилятор) дороговато с учетом всех лицензий.
Для управлением ТСЖ, правда, не для включения вентилятора, а для похожих систем со включением- выключением электричества по подъездам можно переработать систему.
(36)
Уже придумали датчики освещённости и датчики движения. Без всяких 1С и ардуин работает.
(35)
Ну расскажите нам, просветите, так сказать, темноту…
(38) Сергей я посмотрел ваши публикации и у меня складывается впечатление, что ваш аккаунт взломали и сейчас тут другой человек. По ссылке написано что 0.3А можно взять с 5 вольтовых пинов питания, логика на малинке 3.3 вольта и на GPIO не может быть 5, я работал с малинкой и прекрасно знаю её характеристики. И то, что нельзя использовать GPIO — написали вы, я же говорил что их опасно использовать потому что есть риск спалить МК т.к. они напрямую завязаны на АЦП. И если ток ( пусть даже для поддержания логического напряжения) будет больше нормы, а это 16мА а не как не 300 то будет беда.
(39) хорошо, допустим ошибся я и перепутал выходы питания и ноги gpio — ошибся, умнее стал.
Но меня смутило именно то, что Ваш ответ звучал как «использовать gpio» нельзя. И тут уже вопрос сам всплывает: а как информацию сдатчиков считывать? У Вас есть вариант, как это сделать без gpio? Глупость на глупость = ничья.
(40) я подключал ардуино нано и использовал её, а на малинке была веб морда, код писал на пхп….. по сути сейчас сделал тоже самое но с мини пк, а код на 1С. Но основная причина использования ардуины была как раз в том, что на малинке логика 3.3 вольта.
Горячая тема, для автоматизации небольших производств, я у себя на «подвластном» мне производстве окон уже заменил пару контроллеров на ардуино, и получаю тем самым, через com порт информацию о сделанных операциях станком (человеком), далее идет загрузка данных в 1с…
Реально освободил одно рабочее место кладовщика (или мастера)…, бонусом вижу когда идёт максимальная выработка по часам…, и много попутной информации…
Так же и я страдаю этим безумием ардуино ))), но уже есть реальные результаты….
(42) Присоединяйтесь к проекту )) Сделайте модуль управления светом или климатом 🙂 я сейчас делаю модуль управления зарядом АКБ от солнечных панелей.
(43)Ближе к новому году, буду внедрять модбас в 1с, есть интерес у клиентов поуправлять БРУ (бетоно-растворный узел), правда не через ардуину, а напрямик ПЛК, с выгрузкой всего в 1С, минуя всякие АСУТП…
У меня с оконными производствами уже 2 положительных внедрения, народ в экстазе)))…
А по поводу умного дома я согласен с вышесказанным, что это немного изврат, но для тренировки полезно )))
(44)
ПЛК это не часть АСУТП?
Предположим, вам надо отвезти тёще мешок картошки. Как вы это сделаете?
Правильно!
Вы возьмёте танк, привяжете к нему садовую тачку, в тачку положите мешок картошки и поедите.
Причем, смотрите какое универсальное решение, если надо отправить внуков к бабушке, то к танку привязывается детская коляска и оп-ля, получается вариант пассажирской перевозки.
Вообще, танк, это очень полезная штука в хозяйстве, например, на пушке можно сушить бельё.
Хотя, сплошь и рядом в типовых конфигурациях встречается такой подход.
Например, вчера наши бухгалтера решили сделать типовую операцию (БГУ 2.0). Бухгалтера у нас творческие, пытливые люди. Они почитали ИТС, посмотрели на другие типовые операции и изваяли операцию. Запустили. Проводки не формируются и программа молчит как партизан. Всё нормально, хотя не понятно почему нет никаких сообщений.
Зовут меня. Мне становится интересно и я запускаю отладку. Лезу по программе и дохожу до создания Процессора компоновки данных.
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
Это чо? Это для создания каждой записи Журнала проводок вызывается СКД?
Даа-а!
Простые решения это не наш метод!
«Нормальные герои всегда идут в обход» (С)
плюсанул как вещь которая должна дать подумать…
идеологически 1с с com на уровне надежного драйвера работать не может, а всякие буферизации приводят к частичной потери данных…. говорю это как человек писавший под ардуинку спец софт для отладки сетевого обмена (даже разработал свой собственный сетевой протокол поверх RS485). по этому сабж интересен «поиграть», но абсолютно не пригоден для рельного использования.
ну и скетч под ардуинку — то же не идеал 🙂
(48) Проблема с ком портом действительно серьёзная, в случае зависания приходится перезапускать службу сервера :(, в общий модуль внёс процедуру для этого. «ну и скетч под ардуинку — то же не идеал» ну так присоединяйтесь )) доведём его до идеала :))
Однозначно плюс
(11) Я за! Тема интересная, вот только практической необходимости, пока что, нету.
Оживлю тему. Автору респект и уважуха. И еще больше интересных идей по скрещиванию ужа и ежа. На самом деле, не смотря на критику «бывалых» эмбедеров, есть уверенность что платформу 1С можно использовать в управлении производственными процессами не только на уровне бумаг, но и на уровне пром. оборудования. Разумеется, жесткий реалтайм не получится, но пробовать на медленно текущих производственных процессах уже можно. Вопрос, какую лепту внесет 1С в комплексный показатель надежности всей системы в целом. И конечно же стоимость такого решения под вопросом. Но, с другой стороны… стоимость всей совокупности промышленных контроллеров, участвующих в производственном процессе иногда бывает просто заоблачной. Достаточно, для примера, поинтересоваться у КИПовцев на каком нибудь современном мясокомбинате или сахарном заводе. И нельзя сказать что пром.оборудование супернадежно как на космическом корабле и безгеморройно для обслуживания персоналом. Так что у платформы 1С, и по цене , по качеству и по надежности — есть перспектива. Просто надо сосредоточится на шине CAN. Датчики и исполнительные механизмы на ардуинках (и т.п.) вешать на эту шину, а 1С контролируя эти датчики, в индивидуальных фоновых заданиях, решает задачи (ПИД например), выставляет управляющие воздействия и визуализирует состояние и события на производственной линии. Кстати, поэкспериментирую на досуге на своем самогонном аппарате :). Лиха беда начало… так можно и до крекинг-процессов дорасти.
У меня вопрос к автору статьи. Статью еще не прочитал, но обязательно прочитаю статьи автора. Возможно в публикациях автора уже есть ответы на мои вопросы. Я решил сначала задать вопрос.
Как организовать работу мобильного приложения 1С в среде Android с платами Arduino? Arduino управляет шаговым двигателем. Скажите пожалуйста как это сделать в 2-х словах. Я только начал изучать данный вопрос. Какие программные средства, программные объект? Какие аппаратные средства? я так понимаю через USB?
(54) Используя эту конфигурацию возможно управлять с телефона шаговым двигателем подключенного к ардуине которая подключена к локальной сети в которой находится сервер 1С. Возможности управления контроллером подключенным к клиенту 1С в этой конфигурации нет