Вход на форум 
В начало e-Mail

Форум

Ресурсы Rockwell

Product Directory

Essential Components

Literature Library

Knowledge Base

Electronic News&Magazines

Блог

Encompass Program

Product Certification

  
Smart Solutions VDT :: Просмотр темы - VBA присвоить определеное количество тегов
 FAQFAQ   ПоискПоиск   ГруппыГруппы   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

VBA присвоить определеное количество тегов

 
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации
Предыдущая тема :: Следующая тема  
Автор Сообщение
dany
Новичок
Новичок


Зарегистрирован: Oct 11, 2011
Сообщения: 6
Рейтинг: +0/-0

СообщениеДобавлено: Чт 05 Июл, 2012 10:06:00    Заголовок сообщения: VBA присвоить определеное количество тегов Ответить с цитатой

ситуация следующая изначально считываю значения из Exscel в Array K(p) (значений 300)затем прсваиваю эти значения из K(p) тегам при этом хочу присвоить ровHо столько солько захочет оператор (всегда от 0 и до...max. 300) проблема именно в том что я присваиваю значения всем,а как сказать например если 3 то только от 0 до двух остольное не делай Question

gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0coil_number") = K(0)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv1coil_number") = K(1)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv2coil_number") = K(2)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv3coil_number") = K(3)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv4coil_number") = K(4)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv5coil_number") = K(5)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv6coil_number") = K(6)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv7coil_number") = K(7)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv8coil_number") = K(Cool
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv9coil_number") = K(9)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv10coil_number") = K(10)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Eraser
Эксперт
Эксперт


Зарегистрирован: Oct 05, 2005
Сообщения: 106
Рейтинг: +8/-0
Откуда: Харьков

СообщениеДобавлено: Пн 09 Июл, 2012 6:36:51    Заголовок сообщения: Ответить с цитатой

что мешает в сначала посчитать считанные значения из excel, а затем в цикле, от 0 до "количество элементов в массиве из excel", присваивать нужное количество?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dany
Новичок
Новичок


Зарегистрирован: Oct 11, 2011
Сообщения: 6
Рейтинг: +0/-0

СообщениеДобавлено: Пн 09 Июл, 2012 7:34:00    Заголовок сообщения: Ответить с цитатой

большое спасибо за ответ, я скоре всего не до конца описал проблему. из Excell считываю толко то что нужно т.е от 0 до 2 .

For lokK = 0 To Val
K(lokK) = mySheet.Cells(lokK + 23, K).Value

проблема в коммуникации, ведь в контроллер будут записаны все теги от 0 до 10. т.е от 0 до 2 со значениями а потом все с 0, но они будут записаны, пока это 10 тегов нет проблем а кода 1000.продлится вся передача минуты 3. поэтому и хочу в контроллер предать только теги со значениями.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Пн 09 Июл, 2012 8:32:03    Заголовок сообщения: Ответить с цитатой

А кто мешает написать програму так, чтобы записывать в контроллер только то количество тэгов, которое необходимо?
_________________
Обращайтесь к профессионалам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dany
Новичок
Новичок


Зарегистрирован: Oct 11, 2011
Сообщения: 6
Рейтинг: +0/-0

СообщениеДобавлено: Пн 09 Июл, 2012 17:57:43    Заголовок сообщения: Ответить с цитатой

в принципе не хватает знаний Visual Basic опробовал все что знал (непошло потому что глобальные теги невозможно обрабатывать как Array) и решил обратится за помощью к вам > специалистам< может кто знает простое и элнгантное решени проблемKи
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Eraser
Эксперт
Эксперт


Зарегистрирован: Oct 05, 2005
Сообщения: 106
Рейтинг: +8/-0
Откуда: Харьков

СообщениеДобавлено: Вт 10 Июл, 2012 7:39:02    Заголовок сообщения: Ответить с цитатой

может я опять не так понял задачу, но что мешает при считывании из excel считать только те тэги, что имеют отличные от 0 значения?

P.S. очень сумбурное описание задачи, мало что понятно
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dany
Новичок
Новичок


Зарегистрирован: Oct 11, 2011
Сообщения: 6
Рейтинг: +0/-0

СообщениеДобавлено: Вт 10 Июл, 2012 8:26:40    Заголовок сообщения: Ответить с цитатой

я и считываю только те клетки в таблице которые со значениями, проблема дальше в присвоении этих значений глобалным тегм

gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0coil_number") = K(0) это выражение прописывает тег как в RS VIEW так и в контроллере.
задача чтоб в контроллер были прописаны например:
в первом случае 2 первых тега из возможных 10
во втором 4 первых тега из возможных 10
а в третьем все 10 из 10

вот код проги, может тоже внесет какую то ясность

Код:
Sub read_2()
    Dim myExcel As Excel.Application
    Dim myWorkbook As Excel.Workbook
    Dim mySheet As Excel.Worksheet
    Dim L As Integer
    Dim VL(0 To 300) As Variant
     L = 12
     
     Dim Z
    Z = gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Common_disc_count") - 1

    On Error GoTo exit_handler
   
    Set myExcel = New Excel.Application
    Set myWorkbook = myExcel.Workbooks.Open("E:\TEST.xls")
    Set mySheet = myWorkbook.Sheets("Tab")
   
   
    For lokL = 0 To Z
VL(lokL) = mySheet.Cells(lokL + 23, L).Value
Next lokL

gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0inverted") = VL(0)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv1inverted") = VL(1)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv2inverted") = VL(2)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv3inverted") = VL(3)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv4inverted") = VL(4)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv5inverted") = VL(5)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv6inverted") = VL(6)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv7inverted") = VL(7)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv8inverted") = VL(8)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv9inverted") = VL(9)

exit_handler:
On Error Resume Next:
    myWorkbook.Close
    myExcel.Quit
    Set mySheet = Nothing
    Set myWorkbook = Nothing
    Set myExcel = Nothing
   
   
    End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SpellBinder
Частый гость
Частый гость


Зарегистрирован: Dec 10, 2006
Сообщения: 20
Рейтинг: +0/-1

СообщениеДобавлено: Вт 10 Июл, 2012 12:41:55    Заголовок сообщения: Ответить с цитатой

dany писал(а):
проблема в коммуникации, ведь в контроллер будут записаны все теги от 0 до 10. т.е от 0 до 2 со значениями а потом все с 0, но они будут записаны, пока это 10 тегов нет проблем а кода 1000.продлится вся передача минуты 3. поэтому и хочу в контроллер предать только теги со значениями.


1) Уточните: Из RSView вызывается код для обмена?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SpellBinder
Частый гость
Частый гость


Зарегистрирован: Dec 10, 2006
Сообщения: 20
Рейтинг: +0/-1

СообщениеДобавлено: Вт 10 Июл, 2012 12:45:20    Заголовок сообщения: Ответить с цитатой

dany писал(а):
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0coil_number") = K(0) это выражение прописывает тег как в RS VIEW так и в контроллере.
[/code]


Нужно организовать обмен из Excel в контроллер, используйте DDE обмен и через RSLinx.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Eraser
Эксперт
Эксперт


Зарегистрирован: Oct 05, 2005
Сообщения: 106
Рейтинг: +8/-0
Откуда: Харьков

СообщениеДобавлено: Вт 10 Июл, 2012 13:23:50    Заголовок сообщения: Ответить с цитатой

может так:
Код:
For lokL = 0 To Z

'Здесь проверяйте, есть ли значение в той ячейке, которую вы собираетесь считать
if mySheet.Cells(lokL + 23, L).Value <> 0  'или какое там вам нужно условие

then VL(lokL) = mySheet.Cells(lokL + 23, L).Value

endif

Next lokL


так у вас в массиве будет только непустые значения, ну а затем уже присваиваете.

НО, если вам нужно что бы каждый элемент массива был точно на своем обычном месте, то тогда проверку можно делать перед присваиванием, и при этом старые значения не потеряются:
Код:
if VL(0) <>0 then gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0inverted") = VL(0)
endif



а вообще присваивание тоже можно и нужно делать в цикле

Код:
for i =0 to 9
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv"+Cstr(i)+"inverted") = VL(i)
next i
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dany
Новичок
Новичок


Зарегистрирован: Oct 11, 2011
Сообщения: 6
Рейтинг: +0/-0

СообщениеДобавлено: Вт 10 Июл, 2012 20:17:55    Заголовок сообщения: Ответить с цитатой

SpellBinder
В настоящий момент код вызывается из RS View хотя с DDE попробовать конечно можно, но времяни маловато, если у вас есть желание описать, то я был бы очень признателен. или ссылочку Shocked


Eraser
Вам отдельное спасибо за код

Код:

gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv"+Cstr(i)+"inverted") = VL(i)

именно это я и искал
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Eraser
Эксперт
Эксперт


Зарегистрирован: Oct 05, 2005
Сообщения: 106
Рейтинг: +8/-0
Откуда: Харьков

СообщениеДобавлено: Ср 11 Июл, 2012 6:41:32    Заголовок сообщения: Ответить с цитатой

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


Зарегистрирован: Dec 10, 2006
Сообщения: 20
Рейтинг: +0/-1

СообщениеДобавлено: Ср 11 Июл, 2012 14:33:18    Заголовок сообщения: Ответить с цитатой

dany писал(а):
хотя с DDE попробовать конечно можно, но времяни маловато, именно это я и искал


См. в личке
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации Часовой пояс: GMT + 1
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

Powered by phpBB © 2001, 2005 phpBB Group
Яндекс цитирования

Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany
Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de
Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна.
Открытие страницы: 0.129 секунды
/n