Показано с 1 по 10 из 783

Тема: Обсуждение макросов для OWEN Logic

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Поделюсь макросом, помогающим экспортировать сетевые переменные из ПР205 в пенель оператора Weintek.

    Макрос не совсем закончен, не совсем идеален, но резко сокращает время создания проекта в EasyBuilder для Овен ПР205.

    У меня пока нет времени на его доводку, приведу то, что готово - может быть идея вдохновит на более законченные решения. Мне советовали использовать другой скриптовый язык - PowerShell, но со свободным временем для изучения пока туго...

    Итак, поехали!

    OL для сетевых Slave переменных имеет возможность экспорта тегов в файл формата csv в кодировке UTF-8.
    Easy Builder для тегов также имеет возможность импорта и экспорта тегов файлом csv в кодировке UTF-8.

    Файл OL содержит почти все необходимые данные для импорта в Easy Builder, нужно только переставить поля, заменить названия типов данных, добавить название устройства, под именем которого данная ПР описана в проекте Easy Builder. Что без проблем выполняется в Exel (MS Office) или Calc (LibreOffice) - вручную, долго.

    Скрипт (пакетный файл - bat или cmd) отлаживался для ПР205. Для других ПР не уточнял, если последовательность первых 5 полей совпадает, то и для них возможно применить.

    OL_PR205_to_Weintek.bat:

    Код:
    @chcp 1251>nul
    
    @rem Размещение утилиты - потокового редактора sed
    @set sed_exe="c:\Program Files\binutils\ssed.exe"
    @rem set sed_exe="c:\Program Files\binutils\sed\bin\sed.exe"
    
    @rem Название исходного файла с экспортируемыми из Owen Logic тегами
    @set source="ТестовыйПроект_Сетевые, Slave.csv"
    @rem Название итогового файла с тегами для Easy Builder (Weintek)
    @set "target=result.csv"
    @rem Название устройства, уже описанного в системных параметрах проекта Easy Builder
    @rem Лучше на латинице, т.к.
    @set "device_name=Owen_PR205"
    
    @rem Временный файл
    @set "tmp_file=temp.$$1"
    @rem Регулярное выражение для выделения полей в csv экспортируемых тегов
    @set "field=([^;]*)[;]"
    
    @rem Названия типов данных в кодировке UTF-8
    @set "Owen_Unsigned_16=\xD0\xA6\xD0\xB5\xD0\xBB\xD0\xBE\xD1\x87\xD0\xB8\xD1\x81\xD0\xBB\xD0\xB5\xD0\xBD\xD0\xBD\xD0\xBE\xD0\xB5"
    @set Owen_Float_32=\xD0\xA1\x20\xD0\xBF\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xB0\xD1\x8E\xD1\x89\xD0\xB5\xD0\xB9\x20\xD0\xB7\xD0\xB0\xD0\xBF\xD1\x8F\xD1\x82\xD0\xBE\xD0\xB9
    @set "Weintek_Unsigned_16=16-bit Unsigned"
    @set "Weintek_Float_32=32-bit Float"
    
    @rem Удалить заголовок (напечатать c 2 по последнюю строку)
    @%sed_exe% -n "2,$p" %source%>%tmp_file%
    @rem Переставить поля
    @%sed_exe% -n -r "s/%field%%field%%field%%field%%field%.*/\1\,%device_name%\,3x\,\3\,\"\5\"\,\2/p" %tmp_file%>%target%
    @rem Заменить тип регистра "Целочисленная" на "16-bit Unsigned"
    @rem Заменить тип регистра "С плавающей запятой" на "32-bit Float"
    @%sed_exe% -r "s/%Owen_Unsigned_16%$/%Weintek_Unsigned_16%/" %target%>%tmp_file%
    @%sed_exe% -r "s/%Owen_Float_32%$/%Weintek_Float_32%/" %tmp_file%>%target%
    
    @del %tmp_file%


    Используются утилиты из UNIX: sed или ssed - обе работают одинаково в данном случае.
    https://sourceforge.net/projects/gnuwin32/files/
    https://sed.sourceforge.io
    Их установка - просто распаковка в какой-нибудь каталог. В случае gnuwin32 скачать и распаковать sed-4.2.1-dep.zip и sed-4.2.1-bin.zip
    Утилиты пакета binutils очень распространены и чаще всего уже установлены с каким-нибудь пакетом программирования: WinAVR, Visual Studio и другими. Но при их отсутствии - легко скачиваются и устанавливаются.

    Для работы нужно в скрипте уточнить:
    - полный путь к sed (или ssed)
    - название файла экспорта переменных из OL
    - название итогового файла для Easy Builder
    - после завершения работы скрипта нужно в текстовом редакторе открыть итоговый файл и заменить дефолтное название устройства "Owen_PR205" на то, которое задано в проекте EasyBuilder, иначе импорт будет невозможен.

    Отдельное действие с названием устройства получилось из-за того, что не разобрался с кодировками.
    Но и так, хорошо получилось - много быстрее, чем перенос руками.

    В результате работы:
    из файла экспорта OL 'ТестовыйПроект_Сетевые, Slave.csv':
    Код:
    Имя переменной;Тип переменной;Адрес регистра;Значение по умолчанию;Комментарий;Имя параметра;Минимальное значение;Максимальное значение;Видимость;Путь к параметру;Формат отображения данных;Редактирование по сети;Архивировать значение
    n_Var1;Целочисленное;16384;50;Первая целочисленная переменная;Целочисленная переменная №1;0;99;Видим;Целые;Десятичный (Dec);Разрешено;Нет
    n_Var2;Целочисленное;16385;150;Вторая целочисленная переменная;Целочисленная переменная №2;100;199;Видим;Целые;Десятичный (Dec);Разрешено;Нет
    r_Var3;С плавающей запятой;16386;250;Первая вещественная переменная;Вещественная переменная №1;200;299;Видим;Вещественные;Десятичный (Dec);Разрешено;Нет
    r_Var4;С плавающей запятой;16388;350;Вторая вещественная переменная;Вещественная переменная №2;300;399;Видим;Вещественные;Десятичный (Dec);Разрешено;Нет


    Получаю
    result.csv:
    Код:
    n_Var1,Owen_PR205,3x,16384,"Первая целочисленная переменная",16-bit Unsigned
    n_Var2,Owen_PR205,3x,16385,"Вторая целочисленная переменная",16-bit Unsigned
    r_Var3,Owen_PR205,3x,16386,"Первая вещественная переменная",32-bit Float
    r_Var4,Owen_PR205,3x,16388,"Вторая вещественная переменная",32-bit Float


    После замены в Блокноте второго поля "Owen_PR205" на название устройства из "системных параметров" получаю готовый файл импорта.
    Импорт в Easy Builder настраивается двумя опциями:
    - удалить старые теги (нужно снять выбор, т.к. иначе удалятся и необходимые системные теги)
    - заменить существующие теги на новые (установить выбор и заменять, обновлять теги).

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,648

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Поделюсь макросом, помогающим экспортировать сетевые переменные из ПР205 в пенель оператора Weintek.
    возможно есть по проще вариант и кроссплатформенный, на питоне
    Код:
    import pandas as pd
    import numpy as np
    
    fnamesrc = 'Slave.csv'
    fnamedst = 'result.csv'
    spisok = {'Целые':'16-bit Unsigned','Вещественные':'32-bit Float'}
    
    def load_ds(fnamesrc,fnamedst):
        df = pd.read_csv(fnamesrc, delimiter=';')
        stuff0 = df[['Имя переменной']].to_numpy()
        stuff3 = df[['Адрес регистра']].to_numpy()
        stuff4 = df[['Комментарий']].to_numpy()
        stuff5 = df[['Путь к параметру']].to_numpy()
        stuff1 = np.full(len(stuff0),'Owen_PR205')
        stuff2 = np.full(len(stuff0),'3x')
        frames =  [pd.DataFrame(stuff0), pd.DataFrame(stuff1), pd.DataFrame(stuff2), pd.DataFrame(stuff3),pd.DataFrame(stuff4),pd.DataFrame(stuff5).rename(columns = {0:'type'})]
        adf = pd.concat(frames, join = 'inner', axis = 1)
        adf['type'] = adf['type'].map(spisok)
        adf.to_csv(fnamedst, header = False, index = False)
    
    load_ds(fnamesrc,fnamedst)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Похожие темы

  1. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Среда программирования OWEN Logic
    Ответов: 404
    Последнее сообщение: 25.08.2020, 15:17
  2. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Программируемые реле
    Ответов: 401
    Последнее сообщение: 28.07.2016, 19:46
  3. ПО OWEN Logic !!!
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 3
    Последнее сообщение: 11.10.2011, 15:33
  4. OWEN Logic 1.2.0.14b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 40
    Последнее сообщение: 21.02.2011, 14:16
  5. OWEN Logic 1.1.0.11b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 58
    Последнее сообщение: 12.10.2010, 20:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •