Я хотел бы создавать переменные во время выполнения приложения или при вызове изнутри. Ситуация для этого требования заключается в том, что я читаю данные с разных устройств по всему сайту, и в настоящее время это жестко закодировано в приложении. Я хотел бы создать приложение, которое загружает список из базы данных требуемых переменных и создает и назначает их по мере необходимости.VB.NET Динамически создавая переменные во время выполнения
Я использую пакет драйверов INGEAR для чтения данных, мне потребуется объявить несколько ПЛК, и для каждого из этих ПЛК мне нужно будет объявить несколько групп сканирования, и каждая группа ScanGroup будет иметь несколько тегов для нее. Затем прочитанные данные будут записаны в базу данных для каждого чтения.
Заявляя каждый из этого во время разработки (с приложением образца InGear обеспечивает) является
' *****************************
' * Initialize Controller class
Public MyPLC As New Controller
' ******************************
' * Initialize TagGroup class
Public scanGroup As New TagGroup
' ******************************
' * un-initialized Tag class
Dim WithEvents newTag As Tag
Используя «WithEvents» они в состоянии создать тег динамически, но не 100% уверен в том, как это работает и как реализовать это дальше.
Когда они добавляют тег, когда приложение работает, они делают что-то вместе:
newTag = New Tag(MyPLC, _tagName.Text)
, а также
AddHandler newTag.Changed, AddressOf newTag_Changed
Что я предполагаю, что используется для захвата изменения (и вызвать из нить)
Есть ли кто-нибудь, кто может дать мне рекомендации:
- Как я могу объявить мой ПЛК во время выполнения из списка/массива/структур
- Как я могу Объявляю scangroups для каждого ПЛКА во время выполнения (они известны как там будет набор для каждого PLC)
- Как Могу ли я добавить теги во время выполнения.
Я предполагаю, что пример идет по правильному пути, но не был на 100% уверен, что каждый элемент пытается достичь. Если кто-то хочет получить более подробную информацию о приложении/образце, пожалуйста, дайте мне знать.
ДОПОЛНИТЕЛЬНЫЕ
Так работает через этот код, я буду считать, что в моей базе данных у меня есть 3 таблицы.
PLC Table - PLC_ID, PLC Name, PLC_IPaddress
SCAN Group - GROUP_ID, Group_Name, Group_Time
TAGS - TAG_ID, PLC_ID, GROUP_ID, Tag_Value
Переменные:
Dim ALLPLCs As New Dictionary(Of String, Controller)
Dim ScanGroups As New Dictionary(Of String, TagGroup)
Dim AllTags As New Dictionary(Of String, Tag)
Создание "контролеры" будет достаточно просто с помощью:
For Each row In PLCTable.Rows
ALLPLCs.Add(row("PLC_ID"), New Controller(row("PLC_IP"), 1000))
Next
Создание своих групп ниже, но начинают беспокоиться о отслеживания элементов. Это позволит создать его с именем, как «1_1», «2_4» с первым номером является PLC_ID и второе GROUP_ID
For Each row In ScanGroupTable.Rows
For Each thePLC In ALLPLCs
Dim tg As New TagGroup
tg.Controller = thePLC.Value
tg.ScanningMode = TagGroup.SCANMODE.ReadOnly
tg.Interval = Convert.ToInt16(row("GROUP_TIME"))
ScanGroups.Add(thePLC.Key & row("GROUP_ID"), tg) 'Add the 1 second scangroup
Next
Next
Теперь следующий вопрос, как добавить свои теги в словарь для каждого PLC_ID и GROUP_ID. Любое руководство по этому вопросу?При создании статического тега я делал бы что-то по строкам ниже, но как это сделать правильно, выбирая правильный PLC и Scangroup?
Dim tg As New Tag
tg.Controller = "CONTROLLER"
tg.Name = "TAG_NAME"
ScanGroups.Add(tg)
После этого система scangroups автоматически выполняет потоки для обновления на своем интервале. В примере проекта, при добавлении тега динамически, использование следующее:
AddHandler newTag.Changed, AddressOf newTag_Changed
Здесь я немного застрял. Как добавить обработчик для каждого из тегов во время выполнения и откорректировать их изменения
Вы действительно должны показать нам интерфейсы, с которыми вы работаете, и формат данных, которые вы загружаете, что сделало бы этот вопрос намного лучше. – Enigmativity
Привет @Enigmativity, Не знаете, какие интерфейсы вы имеете в виду. Рад предоставить любую информацию, относящуюся к этому. На этом этапе типы данных i будут получать от каждого тега, может быть String, Integer или Float –
. Интерфейсом будут типы классов и подписи методов и свойств, которые они поддерживают, и являются «IDisposable» и т. Д. Именно то, что должно быть в коде для «Public Interface IController», например. Достаточно для того, чтобы кто-то запрограммировал код, чтобы дать вам ответ. – Enigmativity