1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Скрипты (или dll) для передачи данных из WinCC 7 в MS SQL

SCADA, серверы, АРМ верхнего уровня, диспетчерские
Ответить

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Скрипты (или dll) для передачи данных из WinCC 7 в MS SQL

Сообщение dragonIMV »

Добрый день.
Есть необходимость часть данных с датчиков сохранять в определенные базы данных.
Я так понимаю это можно сделать с помощью скриптов.
Может подскажите пример скрипта, как можно подключиться к базе данных на MS SQL и записать пару строк в таблицу нужную?
Или пример dll, если кто знает подходящую.

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение dragonIMV »

Впринципе, на VB удалось сделать dll для работы с SQL.
Другой вопрос, как DLL написанную на Visual Basic вызывать в WinCC?
Аватара пользователя

Exactamente
частый гость
частый гость
Сообщения: 409
Зарегистрирован: 20 ноя 2012, 13:45
Имя: :.О.N.Ф
Страна: Россия
Благодарил (а): 3 раза
Поблагодарили: 7 раз

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение Exactamente »

viewtopic.php?f=13&t=5977
:D
Сначала подумал, что я немножко не так свою тему называл.

ODK есть, набор библиотек, в нём db.dll, там же хелп вроде как. #include db.h и функцями из дллки читаете/пишете.
«Сразу видно внимание к каждой мелочи, неиспорченным не осталось ничто».

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение dragonIMV »

Хм, как то раньше ODK не попадался на глаза, сейчас вот нашел для 6 WinCC, качаю.
А для 7 WinCC есть ODK более новый?

LexSL
осмотрелся
осмотрелся
Сообщения: 192
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 65 раз
Поблагодарили: 46 раз

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение LexSL »

dragonIMV писал(а):А для 7 WinCC есть ODK более новый?
ODK он и в Африке ODK, вроде бы не менялся очень давно.
Сам пользуюсь хелпом именно от 6 версии.

По вашему вопросу:
Я так понимаю, Вы хотите текущие значения тегов (напр, GetTagFloat("Tag1"))
вставлять в какую либо базу данных, напр SQL или Access (mdb). C Access проще работать в С скрипте (примеров полно на сименовском форуме).
C SQL немного посложнее - вот есть туториал, как работать на C через ODBC c SQL сервером
В этом случае ODK по-видимому не понадобится.

Второй вариант, это если Вы хотите взять массив (архив) TagLogging за промежуток времени и скинуть его в другую базу...тогда да,
TagLogging в WinCC -> pdertcli.h, функции TLGConnect, TLGEnumArchivs, TLGGetArchivData и проч.
пример тут

Сам бы я сделал следующее: приложение или служба, которая
1. стартует вместе с WinCC,
2. подключается к WinCC (DMConnect),
3. загружает список имен тегов, отвечающих за значения датчиков
4. Подписывается\отписывается на изменение тегов (DMBeginStartVarUpdate, DMEndStartVarUpdate, DMStopAllUpdates)
5. По приходу нового значения записывает в базу данных полученное значение
примерно так.

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение dragonIMV »

Именно с SQL все таки, требование такое у заказчика. Причем уже потом они сами это переводят в базу Access. Ну да переубедить их не вышло, так что в SQL надо.
И выгружается не массово архив какой то, а после каждой производственной операции.
От предыдущего проекта осталась dll, которая это делает, но она выгружает лишь часть тегов, а теперь оборудования куда больше стало. И по этой старой dll никаких исходников разумеется нет. Причем в самой dll прописана и база данных и логин и т.д., что неудобно.

Так что буду "курить" мануалы по ODBC тогда, по вашей ссылке. Уже пробовал сделать, с наскока не вышло на С сделать. На VB вот за 10 минут dll написал, работает. Но к WinCC присобачить никак не смог в итоге. Все таки зря в VB намудрили dll с классами и методами, вместо обычных процедур и функций.

LexSL
осмотрелся
осмотрелся
Сообщения: 192
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 65 раз
Поблагодарили: 46 раз

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение LexSL »

Я, как человек ленивый :-) , делаю чтобы потом не лезть в проект WinCC.
если по ODBC общаться с SQL сервером, то это все равно писать скрипты в WinCC , а в вашем случае даже не знаю, позволят Вам или нет копаться в работающем проекте (останавливать, перезапускать и пр.).
Тем более, при наличии большого количества этих датчиков, Вы все равно будете использовать много вызовов, например GetTagFloat(...), а уже давно замечено, что WinCC не любит "больших" скриптов - начинаются тормоза...
Если владеете в достаточной мере C#, то проблем с написанием приложения или службы не возникнет (лишь только правильно надо "смаршалить" и вызывать функции dmclient.dll). То есть, Вам от заказчика потребуется лишь список имен тегов, отвечающих за значения датчиков, настройки SQL сервера (login, password) и имя таблицы куда скидывать значения (ну еще, формат ее).

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение dragonIMV »

Ну с учетом что кучу всего в WinCC я и добавляю, то в коде WinCC любые скрипты могу делать. Тем более это для новой линии, которая ещё не запущена (и даже не собрана).
А С# как раз и не знаю))) Сейчас вот столкнулся и приходится с скриптами иметь дело.
В самой то WinCC по её работе скрипты переделывать то научился и мелкие писать с нуля, а вот что то сложное пока туго идет.


По поводу тегов сами. Все теги (их не так много будет даже, 20 тегов и 10-20 расчетных параметров) и так собираются в 1 скрипте. Нужно для вывода графика и ещё некоторых вещей там.
Считывать дополнительно не буду сами теги.
Мне в этот существующий скрипт лишь надо добавить, чтобы в нужную таблицу SQL послал.
И по количеству, это от 100 до 2000 срабатываний в сутки. В среднем 300-400 за день раз скрипт работает там.

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение dragonIMV »

Пробовал сделать с помощью db.dll.
Сначала пробовал использовать DBExConnect, где указывал имя базы, логин, пароль.
При этом WinCC не могла подключиться к SQL. В логах SQL выходила все время ошибка: Error: 18456. Severity: 14. State 38.
Как я понял это ошибка значит, что логин и пароль верные, но к базе все равно доступ по какой то причине не дается.

Ну да ладно, стал использовать DBConnect. Ошибку перестало выдавать.
Далее делаю DBOpen. Провозился несколько часов, прежде чем вышло. Оказывается если в С++ или VB я выбирал таблицу dbo.Block и все работает, то тут надо было просто название таблицы "Block" делать.

А вот дальше ничего. Попытка выполнить любой скрипт с помощью DBExecuteDirect_hdb (либо DBExecuteDirect_hdsn но уже не открывая таблицу) заканчивается пустой ошибкой.

Т.е. код:

Код: Выделить всё

memset (&DBErrors, 0, sizeof(CMN_ERROR));
if (DBOpen(hDSN, &hDB, "Block", 0, &DBErrors))
{
   StrSQL = "INSERT INTO dbo.Block VALUES (10, 123.123)";  //данная строка легко выполняется через С++ иди Visual Basic
        // так же пробовал через просто Block делать или NameBase.dbo.Block
   memset (&DBErrors, 0, sizeof(CMN_ERROR));
   ret = DBExecuteDirect_hdb(hDB, StrSQL, &DBErrors);
   if (FALSE==ret)
   {
      printf("\r\nError=%s", DBErrors.szErrorText);
   }
   //далее закрываем таблицу
   ....
}
На экран выводит при этом просто Error, без описания ошибки.

Подскажите, куда копать дальше, что я сделал не так?

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение dragonIMV »

Так. Продолжаю мучится учится.
В этот раз на VB скрипт написал.
Использовал Set conn = CreateObject("ADODB.Connection") с Provider=SQLOLEDB

При этом валилась ошибка при попытке использовать CreateObject("ADODB.Recorset") (почитал, ошибка частая, для Windows 7 моей)
Так что сделать просто conn.Execute(StrSQL)

Т.е. напрямую запрос SQL посылал без Recorset.
И, аллилуйя, наконец до SQL хоть что то долетело из WinCC.

Но все же мне хочется добить ситуацию которую описывал выше с db.dll, если кто сможет помочь. Так как основной скрипт у меня на C в WinCC и именно в нем надо было вызывать передачу данных сторонней SQL. А теперь скрипт С меняет тег особый и по изменению этого тега запускается скрипт на VB (и повторно считывает нужные теги и рассчитывает параметры разные). В принципе для объемов и частоты выгрузки этого, думаю, достаточно будет. Но все равно как то "криво" сделано в итоге, не нравится мне это.

LexSL
осмотрелся
осмотрелся
Сообщения: 192
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 65 раз
Поблагодарили: 46 раз

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение LexSL »

ODKDatabase.chm -
This API interface gives you access to databases, including direct access to the databases of WinCC.
То есть db.h и функции в ней для работы со своей собственной базой данных WinCC...нету там таблицы с именем Block )))
не пытайтесь с помощью db.dll записать данные в другую базу - не для этого она )))

А вот решение на VB: ADODB.Connection, RecordSet-ы - вполне рабочее, почему нет? "если работает - не трогай" )

Автор темы
dragonIMV
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 18 окт 2014, 18:20
Имя: Иванов Михаил Викторович
Страна: Россия
город/регион: Екатеринбург

Re: Скрипты (или dll) для передачи данных из WinCC 7 в MS SQ

Сообщение dragonIMV »

Да, кстати, я тоже уже увидел что это для баз WinCC лишь. Тогда поищу способ на С через ADODB тоже, чтоб уж все скрипты на одном языке были.
Ответить

Вернуться в «Верхний уровень автоматизации (отображение)»