Добрый день.
Возможно ли получить данные с СОМ-сервера запущенного на одной машине с MasterScadой?
Если да, то как это сделать?
Из инструментов имеется dll библиотека функций для работы с данным сервером, скомпилированная для TraceMode.
Добрый день.
Возможно ли получить данные с СОМ-сервера запущенного на одной машине с MasterScadой?
Если да, то как это сделать?
Из инструментов имеется dll библиотека функций для работы с данным сервером, скомпилированная для TraceMode.
Откуда конкретно нужно получить данные?
Можно попробовать использовать для этой задачи ФБ "Скрипт C#".
Спасибо.
Такое ощущение, что СОМ-сервер самописный.
Вот описание:
Сервер БД СиУ ОД реализован на основе технологии COM (Component Object Model) (CLSID: 36972D4B 3A1F 4346 8BD9 5F2B252E54D4, LocalServer: DataLinkDriver.exe, ProgID: Data Link Driver) и предоставляет следующие программные интерфейсы:
IDataLink (IID: 1EB93CD5 248A 41B4 9D15 E388CB39020B)
Предоставляет данные объектов диспетчеризации; обеспечивает отправку команд диспетчера объектам диспетчеризации, предоставляет информацию о состоянии связи с объектами диспетчеризации и т.д.)
IDebugWindow (IID: 98D266B4 4032 4986 A6E0 4CF20F1F38EB)
Обеспечивает управление окном вывода отладочной информации сервера БД СиУ ОД.
IFunctions (IID: 4313B408 5A5D 4A18 B79F 4A4C720EFAAB)
Обеспечивает преобразование данных, которое сложно или невозможно выполнить средствами SCADA-системы.
Все функции сервера БД СиУ ОД доступны SCADA-системе посредством использования динамически-линкуемой библиотеки «DataLinkDriverProxy.dll», которая предоставляет доступ к интерфейсам сервера БД СиУ ОД посредством экспортируемых функций.
Он постоянно работает на машине и принимает данные с объекта.
Разработчик достает данные из него TraceModой посредством C# с помощью данной библиотеки функций.
Я попробовал подключить данную библиотеку в скрипте и напоролся на ошибку:
Безымянный.JPG
Вы уверены что данная библиотека написана на C#?
Спасибо.
судя по названию функций в ней - да.
unsigned char Initialize
unsigned char DataLink_GetServerConnectionStatus
unsigned char DataLink_GetBackupConnectionStatus
...
void DebugWindow_Show
void DebugWindow_Hide
...
и т.п. в принципе могу её прислать.
Скорее всего это все же не Net библиотека - пришлите ее нам или проверьте сами через Visual Studio
Но даже если она не .Net то можно сделать для нее оболочку. Примеры есть:
http://msdn.microsoft.com/ru-ru/library/c3fd4a20.aspx
Спасибо.
Да, программа написана не .Net.
Вам нужно будет написать оболочку (dll библиотеку) в Visual Studio для обращения к этой библиотеке. А из скрипта уже будете обращаться к этой dll.
Либо напишите ФБ. Документация прилагается к MasterSCADA
Спасибо.
Добрый день.
Опробован способ импорта функций библиотеки.
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
public partial class ФБ : ScriptBase
{
[DllImport(@"c:\DataLinkDriver\DataLinkProxy", SetLastError = true,
EntryPoint = "DebugWindow_Show", CharSet = CharSet.Unicode)]
private static extern void DebugWindow_Show();
[DllImport(@"c:\DataLinkDriver\DataLinkProxy", SetLastError = true,
EntryPoint = "DebugWindow_Hide", CharSet = CharSet.Unicode)]
private static extern void DebugWindow_Hide();
public override void Execute()
{
if (Параметр1 == true) {
DebugWindow_Show();
Параметр2 = true; }
else {
DebugWindow_Hide();
Параметр2 = false;}
}
}
Компиляция прошла успешно. Но при вызове импортированной функции ничего не происходит и прерывается выполнение кода скрипта...
т.е. при изменении Параметра1 не происходит изменение Параметра2...
если убрать вызовы импортированных функций в комментарии, то всё нормально - Параметр2 изменяется согласно Параметру1.
Что я делаю не так?
Попробуйте вызывать DebugWindow_Show() и DebugWindow_Hide() в BeginInvoke.
Пример такой:
RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
{
//ваш код
}));
В секцию using добавьте:
using System.Threading;
Спасибо.