powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
15 сообщений из 15, страница 1 из 1
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067182
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет, мастера эксперты и люди с многолетним стажем, посоветуйте что-нибудь!!! имеется OPC сервер и БД postgres, за счёт них я написал костыль - шлюз, который считывает данные из OPC и пишет их в базу, если читать значений не много, правлю код и хорошо. вообщем мне это надоело, постоянно править код, да и запросы пошли, считать например 500 адресов тегов с OPC и записать в БД, сидеть писать строчки не охота. нашёл в инете такой костыль по динамическому созданию переменных:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
string variableName = "file001";
 
var asmName = new System.Reflection.AssemblyName("tmp.dll");
 
System.Reflection.Emit.AssemblyBuilder asmBuilder =
    AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, 
        System.Reflection.Emit.AssemblyBuilderAccess.Run);
 
System.Reflection.Emit.ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule(asmName.Name);
 
System.Reflection.Emit.TypeBuilder typeBuilder = modBuilder.DefineType("MyClass",
    System.Reflection.TypeAttributes.Class | System.Reflection.TypeAttributes.Public,
    typeof(object));
 
typeBuilder.DefineField(variableName, typeof(int), System.Reflection.FieldAttributes.Public);
 
Type type = typeBuilder.CreateType();
var myObj = Activator.CreateInstance(type, null);
 
// Теперь у нас есть объект myObj, в котором есть public-переменная с именем file001,
// но так как реального типа этого объекта мы не знаем, то напрямую не можем обратиться
// к этой переменной, потому делаем так:
 
// Записываем значение 10 в переменную:
myObj.GetType().GetField(variableName).SetValue(myObj, 10);
 
// Выводим значение 10 из переменной на консоль:
Console.WriteLine(myObj.GetType().GetField(variableName).GetValue(myObj));


вроде бы оно, циклом создаю нужное мне кол-во переменных со значениями, ВОПРОС! как теперь мне динамически их писать в БД?
есть такая мысль, например создали 500 пер-х и тут же в строке для вставки в бд как то бъявить 500 полей и 500 переменных и на таймер пихнуть
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067186
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888,

а че ОПС сам не пишет в Постгри?
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067189
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos, к сожалению нет
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067199
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888,

да создай какой нить ини файл с типами и наименованиями тегов (а то и хсд модель номальную)
создай внутри дикшинари и заполни всей этой байдой (датасет)
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067206
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos, файл у меня есть правда txt там адреса из опс и перемен-ее для чтения и записи в бд, вот по этому файлу я и создаю методом выше переменные...
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067213
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888,

а зачем тебе создавать "переменные"?
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067214
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя есть наименования тегов
ты их читаешь из сервера по имени (у тебя ж они есть)в какой то массив (дикшинари)
а оттуда в БД
или я что то не понимаю?
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067222
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos, сервера опс разные, фаствелл да там по имени, а если simaticNet он вообще не видит ни одного адреса пока сам не объявишь...я в файле определяю только тип соединения адресное пространства блока данных. и имя объекта для этого адреса и в проге уже привожу к нужному мне типу, а работа потоков описана в длл-ке, куда мне не хочется лезть
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067229
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888я в файле определяю только тип соединения адресное пространства блока данных. и имя объекта для этого адреса и в проге уже привожу к нужному мне типу
ну дык опиши и типы, и имена полей в этом файле ( 18226872 )
программа ничего о конкретных полях, серверах, адресах ничего и знать не должна
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39067230
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888,

ок, значит обязательно надо объявить переменную с заданным именем и типом
ну надо так надо
хотя откуда 100% уверенность в том , что Не надо:) но доказывать не буду, себе дороже :)
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39071631
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообщем всё переделал рефлексию убрал вообще, в итоге формирую в строке такой запрос:
Код: c#
1.
string ololo="INSERT INTO vvod1(v1ubc_vrh) VALUES ('0');"  


вот только в VALUES хотелось бы увидеть такой формат: VALUES ('"+cl.ReadInt("int",out err).ToString()+"')
можно вообще так строку сформировать?или м.б есть другой подход?
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39071823
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stringbuilder посмотри
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39071840
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One, да, как раз его юзаю)
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39071903
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stringbuilder не помогает...
...
Рейтинг: 0 / 0
динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
    #39071945
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888 м.б есть другой подход?

есть, использовать запросы с параметрами
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / динамическое создание переменных, присвоение значений из OPC и запись по таймеру в БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]