Доступ к .NET сборкам в Vijeo Citect 2015

Логирование

Часто во время конфигурирования и тестирования своего кода на C# возникают различные ошибки, например, свойства могут возвращать некорректные значения, могут передаваться некорректные аргументы методам или же могут возникать непредвиденные исключения.

Для устранения подобных типов ошибок в Vijeo Citect 2015 можно включить логирование, которое будет перехватывать все вызовы cicode функций для работы с .NET сборками. Включить логирование можно путем установки ряда параметров в файле "citect.ini". Рекомендуется чтобы эти параметры были установлены только во время конфигурирования и тестирования проекта, а не на работающей системе.

[Debug]
CategoryFilterMode = 0
CategoryFilter = ManagedUtil
SeverityFilterMode = 0
SeverityFilter = Critical, Error, Information, Verbose, Warning
Priority = 30

После конфигурирования этих параметров, в файл "tracelog.dat", расположенном в директории логов проекта Vijeo Citect 2015, будет записываться подробная информация о каждом вызове cicode функции связанной с вызовами .NET сборок.

Необработанные исключения

Когда происходит исключение в .NET сборке, исключение перехватывается Vijeo Citect 2015 и генерируется аппаратный аларм "Invalid Argument passed (Передан неправильный аргумент)".

Доступ к .NET сборкам в Vijeo Citect 2015. Аппаратный аларм "Invalid Argument passed (Передан неправильный аргумент)"
Рис. 8. Аппаратный аларм "Invalid Argument passed ("Передан неправильный аргумент")
 

В файле "tracelog.dat" также будет содержаться полезная информация для понимания причин возникновения исключения:

... ManagedUtil DllProxyManager::CreateProxyTasks dllPath=C:\Program Files (x86)\Schneider Electric\Vijeo Citect 7.50\Bin\CrashTest.dll className=CrashTest hProxy=0
... ManagedUtil DllProxy::DLLProxy method=Crash ex=System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: This exception should not cause runtime to crash
... ManagedUtil at CrashTest.CrashTest.Crash()
... ManagedUtil --- End of inner exception stack trace ---
... ManagedUtil at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
... ManagedUtil at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
... ManagedUtil at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
... ManagedUtil at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
... ManagedUtil at SE.<strong>SCADA</strong>.ManagedUtil.DllProxy.MethodCall(String method, List`1 argList, Int16& error)
... ManagedUtil DllProxyManager::MethodCallTasks hProxy=0 method=Crash result=

Неподдерживаемые типы данных

Результат вызова методов или чтения свойств, которые возвращают неподдерживаемый в Vijeo Citect тип данных, можно также увидеть в файле "tracelog.dat", например, если произошла попытка прочитать минимальное значение для типа Long в C# путем вызова метода "Long.Min()", то в ответ метод вернет значение -9223372036854775808, а т.к. в C# тип Long является 64-битным, а тип INT в cicode 32-битный, то это значение из C# не может быть передано в переменную cicode типа INT, но это значение можно увидеть в файле "tracelog.dat":

… ManagedUtil DllProxyManager::CreateProxyTasks dllPath=C:\ProgramData\Schneider Electric\Vijeo Citect 7.50\User\DotNetDataTypes\DotNetDataTypeTests.dll
className=DotNetDataTypeTests hProxy=17
… ManagedUtil DllProxyManager::GetProxyPropertyTasks hProxy=17 propertyName=LongMin result=-9223372036854775808

Заключение

Vijeo Citect 2015 получил возможность доступа к Microsoft .NET Framework, т.е. получил легкий способ передачи данных в/из внешних информационных систем. Microsoft .NET Framework - это мощная и хорошо документированная программная платформа, позволяющая решать практически любые задачи, и более того, огромное количество решений самых разных задач на этой платформе может быть найдено в сети Интернет, а это означает, что решения комплексных задач при создании систем диспетчеризации на Vijeo Citect 2015 может быть достигнуто намного легче и быстрее.

Например, существуют веб-службы, которые предоставляет публичную информацию о погоде, цены на электроэнергию или которые позволяют пользователям отправлять СМС через СМС шлюзы. Проведя небольшую исследовательскую работу и написав небольшое количество кода на C#, эти веб-службы могут быстро стать прототипами и быть интегрированными в решения на базе Vijeo Citect 2015.

Страницы

Теги: