<?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='\
Это нормальное, жизнеспособное направление, однако web-сервер & wi-fi на контроллере, надо-бы заменить, скажем шиной CAN. Ну и конечно, нормально прорабатывать схемотехнику, тогда о:
можно будет практически забыть.
(1)Под web-сервером, я имею ввиду любое устройство, собранное на микроконтроллере, канал связи и протокол передачи могут быть самыми разными. Тут всё зависит от человека, реализующего эту схему, кто в чем разобрался. Просто модули web-серверов наиболее простые в освоении и 1С позволяет, достаточно простую интеграцию, с такими устройствами. Мне хватило нескольких недель, что бы разобраться, с нуля и до стабильно работающего устройства, и цена вопроса (затраты, на железки) порядка 2-3 т.р.. И у меня схема работы сложилась достаточно стандартная — я делаю пробую, отрабатываю решение, а дальше идет профессиональная команда автоматчиков, и удачные решения реализуются, с помощью стандартной автоматизации. Тут еще одна фишка, после меня много не спрашивают (денег), т.к. реализовать уже то что работает, гораздо проще…
Просто модули web-серверов наиболее простые в освоении и 1С позволяет, достаточно простую интеграцию, с такими устройствами
Оборотная сторона — надёжность канала связи и системы в целом, тем более, что Вы не светодиодами мигаете, а средства промышленной автоматики разрабатываете.
Ну и надеюсь, что Вы не используете 1С для отправки низкоуровневых команд управления, критичных по времени etc.
(3)А что 1С это система реального времени или SCADA какая нибудь? в микроконтроллерах можно запоминать определенный «кусок» информации в SD карту, и когда будет очередной запрос в ту ли другую сторону передавать или принимать информацию…
И еще один большой плюс — с 1С как раз не надо поддерживать постоянную связь, связь асинхронная, и даже WiFi показал достаточную стабильность, если например раз 2-3 минуты пересбрасывать (сторожевой таймер) модули WiFi, и еще через некоторое время перезагружать сам микроконтроллер. Есть 3 реальные системы в работе у которых uptime уже составил более пол года, больше всё равно не надо…
Надежность этих систем, в моих случаях, подтверждена на 100%, самая первая система работает уже четыре года, и причем на участке, где была внедрена, освободилось 2 человека. Экономию посчитать не сложно, без учета брака, который за последние годы снизился до очень маленьких показателей…
А в общем Вы задаете вопросы по «железу» и окружению, которые решаются достаточно просто и быстро, не работают одни настройки — поменяли, не работает оборудование так ка планировалось — заменили, все происходит достаточно быстро и дешево, в отличии от классического подхода, ведь суммы которые необходимы в этом случае составляют менее 10 т.р.
Когда сделали систему — Проект -> ТЗ -> Закупка оборудования -> Программирование -> Реализация и в итоге, что то не предусмотрели, у меня такое «сплошь и рядом», а изменить что то просто уже не возможно или просто дорого.
Я как раз и пытаюсь донести, что часто легче изготовить прототип (смотрим выше руководитель часто не знает что хочет, кроме доп. прибыли конечно), посмотреть как работает, сколько будет экономии, от внедрения проекта, а затем уже составить нормальное ТЗ и реализовать на стандартной автоматике, которую будет легко поддерживать и обслуживать, или как вариант сделать встроенную свою систему, для поддержки которой, конечно нужны более продвинутые специалисты.
А по поводу низкоуровневых команд надо подумать))), пока в голову приходит идея включать дяде Феде свет на токарном станке, или будильник, что бы не спали )))
(4)
что 1С это система реального времени или SCADA какая нибудь?/QUOTE]
Ну так я это и имел ввиду. В качестве SCADA ещё может быть, но весь низкоуровневых рантайм на контроллерах.
[IS-QUOTE]
И еще один большой плюс — с 1С как раз не надо поддерживать постоянную связь, связь асинхронная, и даже WiFi показал достаточную стабильность, если например раз 2-3 минуты пересбрасывать (сторожевой таймер) модули WiFi, и еще через некоторое время перезагружать сам микроконтроллер. Есть 3 реальные системы в работе у которых uptime уже составил более пол года, больше всё равно не надо…
Между 1с и контроллерами возможно не надо, а между контроллерами если их больше 1 надо :). И судя по сторожевым таймерам, перезагрузкам контроллеров etc. WiFi в исполнении ардуино — не лучший транспорт.
Конечно все определяется задачами и возможными последствиями. Одно дело, если сигнал не дойдёт и светодиод продолжит гореть и совсем другое, если нагревательный элемент, скажем котла продолжит нагрев, не получив информацию от датчика.
И собственно я не спорю с Вами относительно преимуществ, они определённо есть, я лишь пытаюсь донести мысль, что надо изначально по возможности пользоваться промышленными стандартами при разработке промышленных решений.
(5)В ответ могу сказать, что я совсем не собираюсь управлять чем то из 1С. В 1С я предпочитаю просто считать деньги, смотреть отчеты, сохранять другую полезную информацию. Я просто, с помощью микроконтроллера, собираю информацию со станков в 1С, и очень редко передаю что то обратно.
Согласен, что с помощью промышленных стандартов, всё надежнее и проще в исполнении, но дороже (в моем случае), и дольше по времени. И эти факторы для меня являются определяющими.
Про перезагрузку WiFi хотел уточнить (не было возможности исправить), если нет связи 2-3 минуты, то перезагруз, просто частенько на участке ведутся сварочные работы, да и промышленное питание оставляет желать лучшего, модули WiFI использую WFPR200(М), для ОВЕН ПР200 или для UART, в общем достаточно стабильная штука…
И про ардуино то же писал, что там нет стабильности, и пишу на Си, в AtmelStudio 7, используя готовые шилды от Ардуино или других производителей, с микроконтроллерами AVR. Конечно посматриваю в сторону STM, но функционала 8 битных микроконтроллеров, для меня больше чем достаточно, т.к. в микроконтроллере реализовать ModBus-slave(master) и web-сервер по проводу на AVR-ках проще простого…
(6)
Тогда вопросов нет, можно и WiFi или что-то еще.
«Ещё очень характерная причина, сложностей внедрения автоматизации таких производств — отсутствие соответствующего образования у руководителей, т.к. устраивают на ключевые должности родственников и знакомых, в последнюю очередь обращая внимание на образование и дальнейшее обучение.»
Об этом пишет в своей книге «Лестница в небо» товарищ Хазин, препарируя
сущность власти.
Да, на ключевых должностях родственники и знакомые…
Родственники и т.п. очень скоро пииводят либо к краху либо к их разгону. Но к нашей теме не о носится. Тема интересная,но все таки проще оперировать тем же С/С+× в связке через ,например внешние компоненты, с 1с.
(0) реализация красивая, а можете озвучить задачу? что получаете от контроллера, что и зачем обрабатываете в 1С? какой бизнес-процесс автоматизировали? как вышло , что двух человек освободили от некой работы?
5+.
Если не секрет, на каком железе выполнен механизм перемещения рольганга/упора на штапикорезе ? бюджет реализации ? исходя из практики эксплуатации , что то нужно исправлять ?