Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
334 / 181 / 68
Регистрация: 18.03.2010
Сообщений: 586
Записей в блоге: 11
1

Visual Basic .NET для HMI NA5 Omron

17.05.2019, 10:10. Показов 1289. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. История такая. Программирую пользовательскую панель для ПЛК omron. Программирование происходит в среде Sysmac Studio, на языке Visual Basic. Ранее этим языком не пользовался, сейчас предпринимаю попытки к его изучению по майкрософтовским сайтам с учебными материалами.
Регулярно возникают затыки с теми или иными конструкциями.
Например:
VB.NET
1
2
3
4
5
    Dim str1 As String = "str1"
    Dim str2 As String = "Str2"
    Dim command_collection As New Collection
    command_collection.Add(str1, "s1")
    command_collection.Add(str2, "s2")
на этот код возникает ошибка
C:\OMRON\Data\Temp\23dcd25a-d378-1604-feeb-19836c9808ca_obj\Main.vb (71,0): error BC30002: Тип "Collection" не определен.

В конечном счете, на текущем этапе мне бы хотелось создать коллекцию из массивов объектов, к которым я бы мог обращаться по строковому индексу. Но проблема возникает уже здесь - практически на голом примере из учебных материалов от майкрософт.

Как я могу сделать описанное выше? Какие материалы мне нужно читать, чтобы теория ложилась на практику?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2019, 10:10
Ответы с готовыми решениями:

Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net ?
Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net

Visual Basic 6 и Visual Basic .NET - в чем различия?
Visual Basic и Visual studio это не одно и тоже? если нет то в чём разница, по мимо оформления?

Visual Basic .Net и Visual Basic 6.0 - В чём разница
В общем возник вопрос: Visual Bisic.Net и Visual Basic - это два разных языка, или же .NET версия...

Для чего нужен Visual Basic.Net?
Здравствуйте. Объясните пожалуйста для какой деятельности нужен Visual Basic и Visual Basic.Net? То...

13
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,658
Записей в блоге: 14
17.05.2019, 10:17 2
Попробуйте
VB.NET
1
Dim command_collection As New Microsoft.VisualBasic.Collection
1
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,517
17.05.2019, 11:04 3
Цитата Сообщение от koorya Посмотреть сообщение
создать коллекцию из массивов объектов, к которым я бы мог обращаться по строковому индексу
Можете попробовать также классы Dictionary, SortedList
VB.NET
1
2
Dim command_collection As New Dictionary(Of String, String)
Dim command_collection As New SortedList
1
334 / 181 / 68
Регистрация: 18.03.2010
Сообщений: 586
Записей в блоге: 11
17.05.2019, 11:14  [ТС] 4
Rius, Ваш ответ частично помог. Мне удалось создать коллекцию. Но коллекция массивов так и не получается. Собственно, с этого я и начинал, что не мог получить ссылку на массив, получал ту же ошибку, что и сейчас.
VB.NET
1
2
3
4
Public Class MY_STRUCT 
    Public Name As String
    Public Number As Integer
End Class
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Dim arr1(3) As MY_STRUCT
    Dim arr2(5) As MY_STRUCT
    Dim arr3(7) As MY_STRUCT
    
    Dim command_collection As New Microsoft.VisualBasic.Collection  
 
    arr1(1).Name = "sensor 1"
    arr1(1).Number = 23
    command_collection.Add(arr1, "'first")
    command_collection.Add(arr2, "'second")
    command_collection.Add(arr3, "'third")
    
'при добавлении строки ниже возникает ошибка
    Label0.Text = command_collection("first")(1).Name
C:\OMRON\Data\Temp\23dcd25a-d378-1604-feeb-19836c9808ca_obj\Main.vb (57,0): error BC30762: Целевая платформа не поддерживает позднее привязывание.

Что означает позднее привязывание? Как с этим быть?
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
17.05.2019, 11:52 5
Вы создаёте класс Public Class MY_STRUCT, причем не описываете конструктор и методы класса, а из названия становится понятно, что хотите иметь структуру.
Попробуйте определить как структуру Public Structure MY_STRUCT.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,658
Записей в блоге: 14
17.05.2019, 12:02 6
VB.NET
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
Module Module1
 
    Public Class MY_STRUCT
        Public Name As String
        Public Number As Integer
    End Class
 
    Sub Main()
        Dim command_collection As New Dictionary(Of String, MY_STRUCT())
 
        Dim arr1(3) As MY_STRUCT
        Dim arr2(5) As MY_STRUCT
 
        arr1(0) = New MY_STRUCT
 
 
        command_collection.Add("first", arr1)
        command_collection.Add("second", arr2)
 
        Dim arr() As MY_STRUCT
 
        If command_collection.TryGetValue("first", arr) Then
            arr(0).Name = "name"
        End If
 
    End Sub
 
End Module
1
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,517
17.05.2019, 12:17 7
Цитата Сообщение от Uswer Посмотреть сообщение
причем не описываете конструктор и методы класса
Это не обязательно
Цитата Сообщение от Uswer Посмотреть сообщение
Попробуйте определить как структуру Public Structure MY_STRUCT.
В данном случае разницы нет
1
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
17.05.2019, 12:27 8
В некоторых случаях структуры эффективнее классов, т.к. не требуется уборщик мусора, а также в плане расходования памяти. В данном применении это немаловажно.
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,517
17.05.2019, 12:28 9
Цитата Сообщение от koorya Посмотреть сообщение
Но коллекция массивов так и не получается.
Она получается, но массивы у вас не заполнены
попробуйте так
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim arr1(3) As MY_STRUCT
 
        Dim command_collection As New Dictionary(Of String, MY_STRUCT())
 
        For i = 0 To arr1.Length - 1
            arr1(i) = New MY_STRUCT With {.Name = "sensor " & i.ToString, .Number = i}
        Next
       
        command_collection.Add("first", arr1)
        Me.Text = command_collection("first")(1).Name
 
    End Sub
1
334 / 181 / 68
Регистрация: 18.03.2010
Сообщений: 586
Записей в блоге: 11
17.05.2019, 12:32  [ТС] 10
VB.NET
1
Dim command_collection As New Microsoft.VisualBasic.Collection
C:\OMRON\Data\Temp\23dcd25a-d378-1604-feeb-19836c9808ca_obj\Main.vb (67,0): error BC30762: Целевая платформа не поддерживает позднее привязывание.
VB.NET
1
Dim command_collection As New Microsoft.VisualBasic.Dictionary(Of String, MY_STRUCT())
C:\OMRON\Data\Temp\23dcd25a-d378-1604-feeb-19836c9808ca_obj\Main.vb (48,0): error BC30002: Тип "Microsoft.VisualBasic.Dictionary" не определен.
VB.NET
1
Dim command_collection As New Dictionary(Of String, MY_STRUCT())
C:\OMRON\Data\Temp\23dcd25a-d378-1604-feeb-19836c9808ca_obj\Main.vb (49,0): error BC30002: Тип "Dictionary" не определен.
VB.NET
1
2
Dim command_collection As New SortedList
    command_collection.Item("first")(1).Name = "sens 2"
C:\OMRON\Data\Temp\23dcd25a-d378-1604-feeb-19836c9808ca_obj\Main.vb (67,0): error BC30762: Целевая платформа не поддерживает позднее привязывание.

Добавлено через 2 минуты
Цитата Сообщение от Uswer Посмотреть сообщение
Попробуйте определить как структуру Public Structure MY_STRUCT.
Uswer, попробовал. Получаю ту же ошибку.
Этот код я написал для примера. В реальной программе мне требуется иметь проиндексированный строками список (коллекцию) массивов структур, которые уже созданы до меня глобально.

Справка на сайте майкрософт
Версия .NET Compact Framework, с которой вы работаете, не поддерживает позднее связывание.
Исправление ошибки
Старайтесь не вызывать функции, подпрограммы и свойства в переменной, объявленной как объект.
Не используйте объектную переменную как массив.
Не используйте выражения доступа к членам словаря с объектными переменными.
Здесь говорится, что нельзя использовать объектную переменную как массив. Какой тогда может быть иной способ реализовать описанное мной выше?
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
17.05.2019, 12:33 11
В дополнение я предложил бы автору отказаться от коллекции массивов, а ограничится коллекцией структур MY_STRUCT (классов MY_STRUCT), при необходимости дополнив их параметрами. Но автору виднее, мы конечной задачи не видим.
1
334 / 181 / 68
Регистрация: 18.03.2010
Сообщений: 586
Записей в блоге: 11
17.05.2019, 13:41  [ТС] 12
Отказаться от возможностей языка, конечно, решение проблемы. Видимо, так и придется сделать. Насколько я понял, в этом устройстве какой-то урезанный до примитивов Visual Basic .NET
Всем спасибо за старания
0
334 / 181 / 68
Регистрация: 18.03.2010
Сообщений: 586
Записей в блоге: 11
22.05.2019, 07:53  [ТС] 13
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    Dim command_collection As New Microsoft.VisualBasic.Collection  
 
 
    Dim arr1(3) As MY_STRUCT
    Dim arr2(5) As MY_STRUCT
    Dim arr3(7) As MY_STRUCT
    
    arr1(1) = New MY_STRUCT
    
    
    arr1(1).Name = "sensor 1"
    arr1(1).Number = 23
    command_collection.Add(arr1, "first")
    command_collection.Add(arr2, "second")
    command_collection.Add(arr3, "third")
    
 
    Dim tmp_arr() As MY_STRUCT
    tmp_arr = command_collection.Item("first")
    Label1.Text = tmp_arr(1).Name
    tmp_name(1).Name = "rewrite_sensor"
 
    tmp_name = command_collection.Item("first")
    Label0.Text = tmp_name(1).Name
В таком виде работает. Избегать позднего связывания - означает явно указывать типы объектов. В данном случае явно указали тип объекта, полученного из коллекции, что это массив структур MY_STRUCT.
Выше предлагали подобное решение, но оно не подошло потому что класса Dictionary у меня на платформе не оказалось, хотя идея была верная.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,658
Записей в блоге: 14
22.05.2019, 08:00 14
Цитата Сообщение от koorya Посмотреть сообщение
Выше предлагали подобное решение, но оно не подошло потому что класса Dictionary у меня на платформе не оказалось
System.Collections.Generic.Dictionary входит в mscorlib и существует со времён .Net Framework 2.0. Как его может не быть?..
1
22.05.2019, 08:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2019, 08:00
Помогаю со студенческими работами здесь

Посоветуйте литературу для изучения Visual Basic .NET
Какую литературу по вб посоветуете? В тему не посылать. Не знаю какую выбрать даже. главное чтобы...

Visual Basic.Net и Visual Studio 2013 - в чем разница?
Visual Basic.Net и Visual Studio 2013 - в чем разница? Или это одно и тоже, просто называются по...

Visual Basic .NET vs Visual FoxPro 9.0 в рамках задач реляционной модели данных
Очень хочется обсудить следующую тему. Поставлена задача - написать некоторую программу...

Visual Basic net
Здравствуйте не могу найти как устранить ошибку при на писании кода Dim a() As Single =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru