PDA

Просмотр полной версии : Не отображаются данные из массива структур в таблице данных



1442_a
23.08.2024, 14:37
Всем добрый день! Я пишу некоторые ФБ на C# и в нем формирую выходной массив структур (структуру создала в локальной библиотеке проекта, сам массив структур добавляю как параметр). Проблема в том, что если я привязываю такой массив к таблице данных, то она во время исполнения всегда пустая, даже если в массиве есть данные; в то же время, если я передаю массив структур из ФБ на ST, то все прекрасно работает. Для теста я даже делала так, что массив структур из ФБ на C# я передавала как InOut-параметр в ФБ на ST и далее привязывала его к таблице - и все работало. Подскажите, может, кто-то знает, в чем проблема? Прилагаю скриншоты из режима исполнения.

capzap
23.08.2024, 14:48
логично предположить что на ST блок выполняется в цикле проекта, а на Си только по запросу, который Вы не выполняете

1442_a
25.08.2024, 08:28
Здравствуйте! Спасибо за ответ, не подумала об этом. Скажите, а можно ли тогда сделать так, чтобы программа на C# тоже выполнялась в цикле? Мне прям очень нужен ФБ именно на этом языке, поскольку очень легко и просто реализовать сортировку файлов.

capzap
25.08.2024, 08:44
Я ведь могу быть не прав, не видя всего проекта. Если Вы специалист в шарпе, сделайте вставки writeline и отслеживайте их. Тогда будете знать выполняется Ваш код или нет

melky
25.08.2024, 08:55
Не знаю, как это будет в MS4D непосредственно, например как именно запускается ваш Execute?, но цикл организуется самим приложением C#.
в примитиве это

while (!terminated)
{
Постоянно выполняющаяся ваша программа
}

ну, обернуть в поток нужную часть например для Thread.Sleep(xxx ms);

з.ы. сейчас выеживаюсь с подобным но в другой Scada. Там само ядро вызывает циклически процедуры, и мне нужно запустить свою программу, которая бы не прерывалась по завершению процедур. В общим пока пришел к запуску в потоках своих частей кода, а при вызове в цикле процедур ядра scada проверяю и передаю и забираю переменные.

Вообще задача запуска потоков в MS4D может оказаться не решаемой, так как ядро должно предоставлять возможности сохранять данные о потоках, чтобы в рамках запуска Execute была возможность потом к ним обращаться.

melky
26.08.2024, 10:03
https://support.mps-soft.ru/Help-web/index.html?c_sharp_primer.html

Есть override void Init()
А так же можно задавать переменные за пределами Execute()
Что должно позволить вам запустить свой поток, в котором будет программа в цикле.

И еще можно подключать свои dll, но как там и что дальше непонятно.

1442_a
04.09.2024, 09:21
Всем спасибо за ответы! Не смогла, к сожалению, разобраться с потоками внутри редактора C# MS4D, поэтому нашла более топорное, но работающее решение: создала пустой ФБ на ST с массивом структур (доступ InOut). Передала выходной массив с ФБ на C# в ФБ на ST и с ФБ на ST далее в источник данных таблицы. Заработало.
78439