1. Нет, прошу занимать сидячие места до конца этого чудесного трипа 2. Если в одном месте не жжот, лучше не переходить. Ничего нового полезного не заметил, а то что реально были полезно, зачем то вырезали или сделали неудобным
Тема очень важная, благодарю!! Подскажите пожалуйста, как лучше решать следующую задачу. Нужно каждый день сохранять файл с данными по каждой переменной с периодом в 1 сек. Решение "в лоб" - это каждый день создавать новый CSV-файл и каждую секунду в него записывать новые данные. Насколько это решение правильное если на производстве 20 контроллеров, и в каждом по 50 тэгов?
Добрый день. Пытаюсь написать генератор отчетов , но wincc 7.5 при написании скрипта не понимает функцию workbook, соответственно не создает файлы(папки создались на ура). Не могли бы вы подсказать куда рыть? Может что то нужно доустанавливать? Excel стоит 2007 sp3. У вас пример для wincc advanced а у меня professional вроде должно работать но увы.
За видео жЫрный лайк! Автор, модифицируй скрипнт, пожалуйста, чтобы в течение суток каждый час в новую строку значение тэга писал. А начиная с новых суток - новый файл
это будет примерно так: Dim objExcel, objWorkbook, objSheet Dim strTemplatePath, strOutputPath Dim objFSO Dim strValue Dim objShell Dim dtLastRun Dim dtNow ' Установите пути к файлам Excel и к выходным файлам strTemplatePath = "C:\Путь\К\Шаблонному\Файлу.xlsx" strOutputPath = "C:\Путь\К\Выходному\Каталогу\" ' Создайте объекты Excel и FileSystemObject Set objExcel = CreateObject("Excel.Application") Set objFSO = CreateObject("Scripting.FileSystemObject") ' Проверка наличия шаблонного файла If objFSO.FileExists(strTemplatePath) Then ' Получаем атрибуты времени записи файла Set objFile = objFSO.GetFile(strTemplatePath) dtLastRun = objFile.DateLastModified ' Открываем шаблонный файл Set objWorkbook = objExcel.Workbooks.Open(strTemplatePath) Set objSheet = objWorkbook.Sheets(1) ' Получаем текущую дату и время dtNow = Now ' Проверка, прошло ли более 1 часа с последнего запуска If DateDiff("h", dtLastRun, dtNow) >= 1 Then ' Записываем значение в новый столбец strValue = "Значение" ' Замените это на ваше значение objSheet.Cells(1, objSheet.UsedRange.Columns.Count + 1).Value = strValue ' Сохраняем изменения в шаблонном файле objWorkbook.Save ' Обновляем атрибуты времени записи файла objFile.DateLastModified = dtNow ' Закрываем Excel objExcel.Quit Set objExcel = Nothing End If ' Проверка, прошел ли день If DateDiff("d", dtLastRun, dtNow) >= 1 Then ' Создаем новый файл для следующего дня Set objShell = CreateObject("WScript.Shell") objShell.Run "cmd /c copy """ & strTemplatePath & """ """ & strOutputPath & "Файл_" & Year(dtNow) & Month(dtNow) & Day(dtNow) & ".xlsx""", 0, True ' Закрываем Excel и освобождаем ресурсы objExcel.Quit Set objExcel = Nothing End If Else WScript.Echo "Шаблонный файл не найден." End If ' Освобождаем ресурсы Set objFSO = Nothing Set objSheet = Nothing Set objWorkbook = Nothing Set objExcel = Nothing Set objShell = Nothing
Замечания. Конечно, у каждого свой почерк кода и читабельность, но... 1) Dim...As, иначе жрётся память. Без "As" VB генерит "As Variant" (24 байта). И объединяйте: Dim filename, path As String. 2) 26:00 - Select...Case. Или Month(Now()) &"_"& MonthName(Now()). 3) 30:02 - конкатенация IIf(Minute(Now())
Спасибо за замечание) я все это прекрасно понимаю, и если бы подобных скриптов была добрая сотня, то это было бы критично, а так фиг с ним) я вообще слабо умею в оптимизацию. Любитель нагородить десятиэтажного кода😅 нужна практика, а я такое пишу от случая к случаю раз в полгода)
Привет из 2023 Автору спасибо за видео Можно заменить if месяцы заменить циклом For monthNumber = 1 To 12 FS.CreateFolder "D:\TiaPort\" & Year(Now()) & "\" & MonthName(monthNumber, False) monthNumber = ++monthNumber Next MonthName ( monthNumber - номер месяца, False - длинное или короткое название месяца 1- Янв, 1 - Январь)
Может не в тему, но тоже про отчёты: кто нибудь видел библиотеку для s7-1200/1500 которая может писать в sql кириллицу? Везде валяется стандартная сименовская, которая пишет только стандартные символы
В симуляторе работает, спору нет. Но сделал на hmi и выдаёт ошибку. Не подскажите как быть? Error ActiveX component can't create object "scripting.filesystemobject" In script create in line 59?
@@ДмитрийМолев-ч1г ну так конечно это не будет работать. Это скрипт для ПК, а не для панели. Как вы вообще собирались адаптировать этот скрипт для панели, я не понимаю
Потому что FileSystemObject это ActiveX компонент OS Windows. Если на HMI будет установлена винда, то все бы заработало. А там скорее всего стоит что-то Linux подобное, либо урезанная винда, в которой нет этой библиотеки.
@@portalview3028 тогда будет создан новый файл. Я, конечно, уже разобрался как сделать - надо файл создавать только при var=0, а в остальных случаях - дописывать. Иначе каждый раз новый файл будет
А почему не создать массив с названиями месяцев и обращаться туда по индексу, который формирует системная переменная? А ошибка с закрытием excel связана с тем, что экземпляра Excel не было, поэтому ExcelApp был равен null. Сооственно, у него нельзя вызвать методы, тк объекта не существует
Спасибо большое за этот ролик! Если бы он вышел в ноябре, то моя жизнь была бы на много проще))
Великолепно подал материалл. Этот способ не только будет в wincc работать но и в других скадах.
Спасибо вам большое за проделанный труд.
Спасибо. Познавательное и интересное видео!!!
Огонь!
Ты настоящий сигма альфа гигачад с мясистой попой и здоровенным болтом! Спасибо за видео!
Вот это годный ролик за это лайк
Ну вот) Полная годность. Сразу ясно с кем имеешь дело)
Пара вопросов:
1. С кортов встаём?
2. Нормально 11я винда зашла? Нервоза не много?
1. Нет, прошу занимать сидячие места до конца этого чудесного трипа
2. Если в одном месте не жжот, лучше не переходить. Ничего нового полезного не заметил, а то что реально были полезно, зачем то вырезали или сделали неудобным
@@portalview3028 Ну у маек так и заведено) Спрятать какую нибудь панель за тридевять своих ср...ных плиток)
Добрый день! Подскажите пожалуйста, а на WinCC Advanced этот скрипт будет работать,
Большое спасибо за видео. Есть ли отдельный документ у Siemens по скриптам или общий учебник по VBScript лучше полистать?
А я вот что-то не помню даже. По-моему что-то у сименса есть. Как минимум по wincc документация, там и про скрипты есть инфа
А как сделать то же самое, только записывать архивные значения тегов с меткой времени? то есть, тянуть архивные данные из базы SQL?
Тема очень важная, благодарю!!
Подскажите пожалуйста, как лучше решать следующую задачу.
Нужно каждый день сохранять файл с данными по каждой переменной с периодом в 1 сек.
Решение "в лоб" - это каждый день создавать новый CSV-файл и каждую секунду в него записывать новые данные. Насколько это решение правильное если на производстве 20 контроллеров, и в каждом по 50 тэгов?
Добрый день. Пытаюсь написать генератор отчетов , но wincc 7.5 при написании скрипта не понимает функцию workbook, соответственно не создает файлы(папки создались на ура). Не могли бы вы подсказать куда рыть? Может что то нужно доустанавливать? Excel стоит 2007 sp3. У вас пример для wincc advanced а у меня professional вроде должно работать но увы.
За видео жЫрный лайк! Автор, модифицируй скрипнт, пожалуйста, чтобы в течение суток каждый час в новую строку значение тэга писал. А начиная с новых суток - новый файл
это будет примерно так:
Dim objExcel, objWorkbook, objSheet
Dim strTemplatePath, strOutputPath
Dim objFSO
Dim strValue
Dim objShell
Dim dtLastRun
Dim dtNow
' Установите пути к файлам Excel и к выходным файлам
strTemplatePath = "C:\Путь\К\Шаблонному\Файлу.xlsx"
strOutputPath = "C:\Путь\К\Выходному\Каталогу\"
' Создайте объекты Excel и FileSystemObject
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Проверка наличия шаблонного файла
If objFSO.FileExists(strTemplatePath) Then
' Получаем атрибуты времени записи файла
Set objFile = objFSO.GetFile(strTemplatePath)
dtLastRun = objFile.DateLastModified
' Открываем шаблонный файл
Set objWorkbook = objExcel.Workbooks.Open(strTemplatePath)
Set objSheet = objWorkbook.Sheets(1)
' Получаем текущую дату и время
dtNow = Now
' Проверка, прошло ли более 1 часа с последнего запуска
If DateDiff("h", dtLastRun, dtNow) >= 1 Then
' Записываем значение в новый столбец
strValue = "Значение" ' Замените это на ваше значение
objSheet.Cells(1, objSheet.UsedRange.Columns.Count + 1).Value = strValue
' Сохраняем изменения в шаблонном файле
objWorkbook.Save
' Обновляем атрибуты времени записи файла
objFile.DateLastModified = dtNow
' Закрываем Excel
objExcel.Quit
Set objExcel = Nothing
End If
' Проверка, прошел ли день
If DateDiff("d", dtLastRun, dtNow) >= 1 Then
' Создаем новый файл для следующего дня
Set objShell = CreateObject("WScript.Shell")
objShell.Run "cmd /c copy """ & strTemplatePath & """ """ & strOutputPath & "Файл_" & Year(dtNow) & Month(dtNow) & Day(dtNow) & ".xlsx""", 0, True
' Закрываем Excel и освобождаем ресурсы
objExcel.Quit
Set objExcel = Nothing
End If
Else
WScript.Echo "Шаблонный файл не найден."
End If
' Освобождаем ресурсы
Set objFSO = Nothing
Set objSheet = Nothing
Set objWorkbook = Nothing
Set objExcel = Nothing
Set objShell = Nothing
Автору респект! Как открыть по скрипту папку с отчетом в проводнике Windows?
Погуглите how to open a folder with vbs. Примеров куча
Замечания. Конечно, у каждого свой почерк кода и читабельность, но...
1) Dim...As, иначе жрётся память. Без "As" VB генерит "As Variant" (24 байта).
И объединяйте: Dim filename, path As String.
2) 26:00 - Select...Case. Или Month(Now()) &"_"& MonthName(Now()).
3) 30:02 - конкатенация IIf(Minute(Now())
Спасибо за замечание) я все это прекрасно понимаю, и если бы подобных скриптов была добрая сотня, то это было бы критично, а так фиг с ним) я вообще слабо умею в оптимизацию. Любитель нагородить десятиэтажного кода😅 нужна практика, а я такое пишу от случая к случаю раз в полгода)
Привет из 2023
Автору спасибо за видео
Можно заменить if месяцы заменить циклом
For monthNumber = 1 To 12
FS.CreateFolder "D:\TiaPort\" & Year(Now()) & "\" & MonthName(monthNumber, False)
monthNumber = ++monthNumber
Next
MonthName ( monthNumber - номер месяца, False - длинное или короткое название месяца 1- Янв, 1 - Январь)
Может не в тему, но тоже про отчёты: кто нибудь видел библиотеку для s7-1200/1500 которая может писать в sql кириллицу? Везде валяется стандартная сименовская, которая пишет только стандартные символы
В симуляторе работает, спору нет. Но сделал на hmi и выдаёт ошибку. Не подскажите как быть? Error ActiveX component can't create object "scripting.filesystemobject" In script create in line 59?
Что значит сделали на HMI?
@@portalview3028 ну в смысле записал программу на плк и панель и с панели он мне эту ошибку пишет когда пытаюсь сохранить
@@ДмитрийМолев-ч1г ну так конечно это не будет работать. Это скрипт для ПК, а не для панели. Как вы вообще собирались адаптировать этот скрипт для панели, я не понимаю
@@portalview3028 опыта нет, не знал. Думал, что заработает. А возможно что то подобное написать для панели?
Потому что FileSystemObject это ActiveX компонент OS Windows. Если на HMI будет установлена винда, то все бы заработало. А там скорее всего стоит что-то Linux подобное, либо урезанная винда, в которой нет этой библиотеки.
Если у кого есть мануал по wincc runtime, скиньте ссылочку.
Автору лайк и подписка, но не раскрыта тема генерации отчётов за сутки с часовым интервалом
Ну это все настраивается там же, в scheduled tasks. Настраиваете, чтобы скрипт вызывался каждый час и все
@@portalview3028 тогда будет создан новый файл. Я, конечно, уже разобрался как сделать - надо файл создавать только при var=0, а в остальных случаях - дописывать. Иначе каждый раз новый файл будет
А почему не создать массив с названиями месяцев и обращаться туда по индексу, который формирует системная переменная? А ошибка с закрытием excel связана с тем, что экземпляра Excel не было, поэтому ExcelApp был равен null. Сооственно, у него нельзя вызвать методы, тк объекта не существует
Вы можете создать массив, я не запрещал)