- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Здравствуйте уважаемые форумчане! Помогите решить следующую проблему есть папка "DataBase" в которую раз в сутки поступают файлы "csv" со следующим названием:
- MAG8000_296305H319_2020-02-08 0403
- MAG8000_296305H319_2020-02-26 0701
Задача состоит в том чтоб считывать актуальные данные с этих файлов т.е. с последней датой сохранения. Образец скрипта для считывания данных есть но это не решает проблему. Вопрос: возможно ли написать скрипт который будет открывать файл по отрывку в названий например "MAG8000_296305H319" и по последней дате сохранения? Если это возможно буду рад подсказке. Пытаюсь реализовать все это на WinCC RT Pro 15.1. Внизу предоставил образцы скриптов для реализаций.
Образец скрипта для считывания данных(не работает скорее всего я неправильно написал)
[code]Sub OnClick(ByVal Item)
Dim tagName, tagValue, tagFilename
Dim strFilename, strLine, arrItems
Dim fso, objFile, objTag
Set tagFilename = HMIRuntime.Tags("Filename")
Set fso = CreateObject("Scripting.FileSystemObject")
strFilename = tagFilename.Read
If fso.FileExists(strFilename) Then
'for Control
HMIRuntime.Trace("VB-Script: read file: " & strFilename & vbCrLf)
Set objFile = fso.OpenTextFile(strFilename,1)= "C:\file\MAG8000_296305H319_2020-02-08 0403.csv"
Do
strLine = objFile.ReadLine
arrItems = Split(strLine, ";", -1, 1)
tagName = CStr(arrItems(0))
tagValue = CDbl(arrItems(1))
'for Control
HMIRuntime.Trace(tagName & " Value: " & tagValue & vbCrLf )
Set objTag = HMIRuntime.Tags("tag_1")
objTag.Value = tagValue
objTag.Write
Loop Until objFile.AtEndOfStream
Else
HMIRuntime.Trace("File: " & strFilename &" not found!" & vbCrLf)
End If
objFile.Close
End Sub[/code]
образец скрипта для считывания CSV файлов по названию и дате обновления
[code]Folder = "DataBase"
BeginN = "MAG8000_296305H319"
'————————————————————————————
Set oCol = CreateObject("System.Collections.SortedList")
For Each F In CreateObject("Scripting.FileSystemObject").GetFolder(Folder).Files
If StrComp(Right(F, 4), ".csv", 1) = 0 And InStr(F.Name, BeginN) = 1 Then oCol.Add F.DateCreated, F
Next
CreateObject("Shell.Application").ShellExecute oCol.GetByIndex(oCol.Count - 1)
Set oCol = Nothing[/code]
- MAG8000_296305H319_2020-02-08 0403
- MAG8000_296305H319_2020-02-26 0701
Задача состоит в том чтоб считывать актуальные данные с этих файлов т.е. с последней датой сохранения. Образец скрипта для считывания данных есть но это не решает проблему. Вопрос: возможно ли написать скрипт который будет открывать файл по отрывку в названий например "MAG8000_296305H319" и по последней дате сохранения? Если это возможно буду рад подсказке. Пытаюсь реализовать все это на WinCC RT Pro 15.1. Внизу предоставил образцы скриптов для реализаций.
Образец скрипта для считывания данных(не работает скорее всего я неправильно написал)
[code]Sub OnClick(ByVal Item)
Dim tagName, tagValue, tagFilename
Dim strFilename, strLine, arrItems
Dim fso, objFile, objTag
Set tagFilename = HMIRuntime.Tags("Filename")
Set fso = CreateObject("Scripting.FileSystemObject")
strFilename = tagFilename.Read
If fso.FileExists(strFilename) Then
'for Control
HMIRuntime.Trace("VB-Script: read file: " & strFilename & vbCrLf)
Set objFile = fso.OpenTextFile(strFilename,1)= "C:\file\MAG8000_296305H319_2020-02-08 0403.csv"
Do
strLine = objFile.ReadLine
arrItems = Split(strLine, ";", -1, 1)
tagName = CStr(arrItems(0))
tagValue = CDbl(arrItems(1))
'for Control
HMIRuntime.Trace(tagName & " Value: " & tagValue & vbCrLf )
Set objTag = HMIRuntime.Tags("tag_1")
objTag.Value = tagValue
objTag.Write
Loop Until objFile.AtEndOfStream
Else
HMIRuntime.Trace("File: " & strFilename &" not found!" & vbCrLf)
End If
objFile.Close
End Sub[/code]
образец скрипта для считывания CSV файлов по названию и дате обновления
[code]Folder = "DataBase"
BeginN = "MAG8000_296305H319"
'————————————————————————————
Set oCol = CreateObject("System.Collections.SortedList")
For Each F In CreateObject("Scripting.FileSystemObject").GetFolder(Folder).Files
If StrComp(Right(F, 4), ".csv", 1) = 0 And InStr(F.Name, BeginN) = 1 Then oCol.Add F.DateCreated, F
Next
CreateObject("Shell.Application").ShellExecute oCol.GetByIndex(oCol.Count - 1)
Set oCol = Nothing[/code]
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Надо чтобы все именно автоматически происходило или это для оператора без выхода в проводник?
Если второе то можно вывести список файлов к объекту типа List Box, если первое - посложнее, но думаю возможно.
Можно создать список файлов, взять с них дату последнего изменения (или дату создания), отсортировать по дате и выбрать последний измененный/созданный и таким образом определить последний файл.
Если у вас имена файлов все будут однотипные типа "MAG8000_296305H319_2020-02-08 0403" то дату можно определить взяв дату от 18 до 28 символа
Если второе то можно вывести список файлов к объекту типа List Box, если первое - посложнее, но думаю возможно.
Можно создать список файлов, взять с них дату последнего изменения (или дату создания), отсортировать по дате и выбрать последний измененный/созданный и таким образом определить последний файл.
Если у вас имена файлов все будут однотипные типа "MAG8000_296305H319_2020-02-08 0403" то дату можно определить взяв дату от 18 до 28 символа
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Да, название файла всегда с датой записи данных проблема через какой скрипт это реализовать
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Вы не ответили на мой вопрос
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Получается и то и другое чтоб у оператора была возможность на экране видеть последние записанные в CSV файле показания и при желаний открыть сам файл. У меня есть образец проекта который реализован на WinCC RT Adv. но скрипты этого проекта адаптировать под WinCC RT Pro мне пока что не удалось. Для большей информативности скрин экрана WinCC RT Adv. закреплю под постом. Спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- не первый раз у нас
- Сообщения: 320
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 113 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
В VBS вот так: (в переменной Str путь к последнему измененному файлу)
Код: Выделить всё
FolderPath = "C:\Test\"
Str = vbNullString
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(FolderPath)
Set Files = Folder.Files
For Each File In Files
If File.DateLastModified > PrevFile Then PrevFile = File.DateLastModified: Str = File.Path
Next
MsgBox Str
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Я бы сделал так. Два лист бокса, один для массива имен файлов, другой для массива даты изменения файлов.
При нажатии на кнопку "Сканировать папку" заполняются оба лист бокса и формируется их высота.
Затем в левом листбоксе оператора выбирает нужный ему файл, а понять какой ему нужен он может по имени файла или по дате изменения, и нажимает выбрать файл. Выбрать файл уже возвращает полный путь к файлу. На эту кнопку можно привязать уже тот скрипт который вам нужен.
При нажатии на кнопку "Сканировать папку" заполняются оба лист бокса и формируется их высота.
Затем в левом листбоксе оператора выбирает нужный ему файл, а понять какой ему нужен он может по имени файла или по дате изменения, и нажимает выбрать файл. Выбрать файл уже возвращает полный путь к файлу. На эту кнопку можно привязать уже тот скрипт который вам нужен.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Файлы CSV являются отчетами расходомеров, а расходомеров у нас 108 штук которые раз в сутки отправляют отчет. Получается что оператор по одной лишь маркировке не может определять в какой именно установлен этот расходомер. Сейчас пытаемся получить следующую картину (закреплю ниже).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
В одном файле CSV отчет по всем расходомерам, или один CSV - один расходомер?
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Получается каждый расходомер в случае если меняются данные о расходе раз в день отправляет один файл CSV если данные о расходе воды изменятся на 108 расходомерах то мы получим 108 сsv файлов с датой отправки в названий файла. Если на следующий день данные о расходе поменяются только на 56 расходомерах то мы получим 56 csv файлов. Сама папка выглядит следующим образом (закреплю ниже). Задача из всех файлов выбирать те которые поступили недавно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Раз файлов так много, можно дополнить скрипт условием и выводить только сегодняшние/вчерашние.
А как вы определяете какой файл к какому расходомеру относится?
А как вы определяете какой файл к какому расходомеру относится?
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
У нас есть список где каждый расходомер с индивидуальным номером например: "MAG8000_296305H319" закреплен к определенному колодцу наша, задача по индивидуальному номеру раскидать данные с этих расходомеров на визуализации, чтоб оператор в ручную не искал какой расходомер к какому колодцу относится.Но создание для этого подходящего скрипта все еще в процессе поиска.
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Не легче создать по папке для каждого расходомера, чтобы всё не было вывалено в одной куче, сделать нормальную систему?
Тогда все предельно упросится.
Тогда все предельно упросится.
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Да мы бы с радостью, но суть такова что для этих расходомеров есть свой OPC сервер MAG8000 который собственно принимает и обрабатывает эти данные и сохраняет в одной папке, НО этот OPC сервер наотрез отказывается делиться с данными с любой SCADA системой включая WinCC RT Pro после месяца неудачных попыток было принято решение с помощью скриптов перетягивать данные с CSV файлов.
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Не уверен что все эти костыли костылёвые стоят результата.
Тогда можно написать скрипт который будет перемещать файлы в нужную папку в зависимости от названия файла. А дальше уже будет проще разобраться.
Например взять 18 левых символов от имени файла и если они будут = "MAG8000_301805H319" то переместить в папку ВК-2 итд
Тогда можно написать скрипт который будет перемещать файлы в нужную папку в зависимости от названия файла. А дальше уже будет проще разобраться.
Например взять 18 левых символов от имени файла и если они будут = "MAG8000_301805H319" то переместить в папку ВК-2 итд
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 14 янв 2020, 18:53
- Имя: Раби
- Благодарил (а): 1 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Да ситуация мягко говоря очень неудобная, служба поддержки оставила нас наедине с проблемой приходится выкручиваться как то, но чем больше мы пытаемся найти решение проблемы тем она становится не решаемой.makesstr писал(а): ↑11 июн 2020, 13:35 Не уверен что все эти костыли костылёвые стоят результата.
Тогда можно написать скрипт который будет перемещать файлы в нужную папку в зависимости от названия файла. А дальше уже будет проще разобраться.
Например взять 18 левых символов от имени файла и если они будут = "MAG8000_301805H319" то переместить в папку ВК-2 итд
-
- не первый раз у нас
- Сообщения: 320
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 113 раз
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Так не подойдет?
В переменных Str1 и Str2 пути к последним измененным файлам по первым 18 символам (см. Flow1 и Flow2).
В переменных Str1 и Str2 пути к последним измененным файлам по первым 18 символам (см. Flow1 и Flow2).
Код: Выделить всё
FolderPath = "C:\Test\"
Str = vbNullString
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(FolderPath)
Set Files = Folder.Files
Flow1 = "MAG8000_296305H319"
Flow2 = "MAG8000_296305H320"
For Each File In Files
If (Flow1 = Left(File.Name,18)) and (File.DateLastModified > PrevFile1) Then PrevFile1 = File.DateLastModified: Str1 = File.Path
If (Flow2 = Left(File.Name,18)) and (File.DateLastModified > PrevFile2) Then PrevFile2 = File.DateLastModified: Str2 = File.Path
Next
Str = Str1 & vbCrLf & Str2
MsgBox Str
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Как открыть CSV в WinCC RT Pro 15.1 через VB скрипт
Скрипт для раскидывания по папкам
Dim fso, FilesList, File
Set fso = CreateObject("Scripting.FileSystemObject")
Set FilesList = fso.GetFolder("C:\Users\user\Documents\SpaceRangersHD\Save").Files
For Each File In FilesList
Select Case File
Case "MAG8000_301805H319"
fso.MoveFile File, fso.BuildPath (fso.GetParentFolderName(File),"ВК-2\")
Case "MAG8000_296305H319"
'перенести в другую папку
Case Else
'statementblock_n
End Select
Next
Dim fso, FilesList, File
Set fso = CreateObject("Scripting.FileSystemObject")
Set FilesList = fso.GetFolder("C:\Users\user\Documents\SpaceRangersHD\Save").Files
For Each File In FilesList
Select Case File
Case "MAG8000_301805H319"
fso.MoveFile File, fso.BuildPath (fso.GetParentFolderName(File),"ВК-2\")
Case "MAG8000_296305H319"
'перенести в другую папку
Case Else
'statementblock_n
End Select
Next
WinCC 7.4 SP1 Upd15, Step5.6