03.03.2009, 10:23 | #31 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Графика
Дык табличка из примера с журналом так и делает... Или вам нужен не пример, а готовое решение?
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
03.03.2009, 22:31 | #32 |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Графика
Делает "как" ? Вот в чем вопрос (с).
Почем я знаю как там в ВБА оно происходит ? |
04.03.2009, 10:04 | #33 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Графика
Дык посмотреть! На что ещё примеры существуют?
Тем более, что приём переменной это формула, а не жуткая программа на ВБА. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
04.03.2009, 14:30 | #34 |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Графика
можно фрагмент увидеть ? Ибо я попытался посмотреть два макроса, что входят в эксель-файл - нифига не нашел алгоритмя "забивания" таблицы построчно.
И еще, мне бы нужно, чтоб данные шли непрерывно, запускаемые, например, по кнопке, а не разовые чтения. |
04.03.2009, 15:13 | #35 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Графика
Дык там по кнопке. Непрерывно. Есть только ограничение на количество "непрерывности".
Таблица заполняется по нажатию кнопки, в свойствах кнопки указан выполняющийся макрос. Он вызывает функцию FillTable. Она страшна на вид только из-за того, что фиксирует ошибки передачи и выводит их на экран. Плюс обеспечивает синхронизацию между переменными, т.к. одна строка состоит из нескольких переменных. Суть функции в тупом копировании нескольких ячеек в таблицу с изменением номера строки. Т.е. построение "текстового тренда". Данные меняются в исходных ячейках самостоятельно. Private Sub FillTable() Dim f As Integer Dim TimeOut As Integer Dim PauseTime, Start TimeOut = 0 Worksheets("Àâàðèè").Cells(6, 3).Value = Worksheets("Àâàðèè").Cells(110, 3).Value ' î÷èñòêà òàáëèöû æóðíàëà ClearTable (99) Worksheets("Àâàðèè").Cells(6, 3).Value = Worksheets("Àâàðèè").Cells(111, 3).Value f = 0 If (Worksheets("Àâàðèè").Range("G24").Value = CBool(1)) Then GoTo norespons If (Worksheets("Àâàðèè").Range("H24").Value = CBool(1)) Then GoTo noserver mychannelwr = DDEInitiate("SERVOPC", "Request3") Set wr = Worksheets("Àâàðèè").Cells(50 + 6, 2) If (Worksheets("Àâàðèè").Range("G24").Value = CBool(1)) Then GoTo norespons If (Worksheets("Àâàðèè").Range("H24").Value = CBool(1)) Then GoTo noserver Call DDEPoke(mychannelwr, "ARC_IN0", wr) PauseTime = 5 Start = Timer ' Set start time. Do While Timer < (Start + PauseTime) DoEvents ' Yield to other processes. Loop For f = 0 To Worksheets("Àâàðèè").Range("H11").Value - 1 Worksheets("Àâàðèè").Cells(f + 6, 3).Value = Worksheets("Àâàðèè").Cells(114, 3).Value If (Worksheets("Àâàðèè").Range("G24").Value = CBool(1)) Then GoTo norespons If (Worksheets("Àâàðèè").Range("H24").Value = CBool(1)) Then GoTo noserver Set wr = Worksheets("Àâàðèè").Cells(f + 6, 2) CB1Cloop: DoEvents If (Worksheets("Àâàðèè").Range("G24").Value = CBool(1)) Then GoTo norespons If (Worksheets("Àâàðèè").Range("H24").Value = CBool(1)) Then GoTo noserver Call DDEPoke(mychannelwr, "ARC_IN0", wr) DoEvents PauseTime = 1 Start = Timer ' Set start time. Do While Timer < (Start + PauseTime) DoEvents ' Yield to other processes. Loop TimeOut = TimeOut + 1 If (TimeOut > 30) Then Exit For If (Worksheets("Àâàðèè").Range("G24").Value = CBool(1)) Then GoTo norespons If (Worksheets("Àâàðèè").Range("H24").Value = CBool(1)) Then GoTo noserver If (Worksheets("Àâàðèè").Range("H8").Value <> 1) Then GoTo CB1Cloop If (Worksheets("Àâàðèè").Range("H10").Value <> 1) Then GoTo CB1Cloop If (Worksheets("Àâàðèè").Range("G6").Value <> Worksheets("Àâàðèè").Cells(f + 6, 2).Value) Then GoTo CB1Cloop TimeOut = 0 If (Worksheets("Àâàðèè").Range("G8").Value = 0) Then Exit For Worksheets("Àâàðèè").Cells(f + 6, 3).Value = Worksheets("Àâàðèè").Cells(109, 3).Value 'ïðîâåðêà íà äîïóñòèìîñòü äàííûõ If (Worksheets("Àâàðèè").Range("G8").Value < 0) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G8").Value > 40) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G9").Value < 0) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G9").Value > 3000) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G10").Value < 0) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G10").Value > 3000) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G11").Value < 0) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G11").Value > 3000) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G12").Value < 0) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G12").Value > 3000) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G13").Value < 0) Then GoTo SkipWrite If (Worksheets("Àâàðèè").Range("G13").Value > 3000) Then GoTo SkipWrite Worksheets("Àâàðèè").Cells(f + 6, 3).Value = Worksheets("Àâàðèè").Cells(Worksheets("Àâàðèè").Ra nge("G8").Value + 120, 3).Value Worksheets("Àâàðèè").Cells(f + 6, 4).Value = TimeSerial(Worksheets("Àâàðèè").Range("G9").Value, Worksheets("Àâàðèè").Range("G10").Value, 0) Worksheets("Àâàðèè").Cells(f + 6, 5).Value = DateSerial(Worksheets("Àâàðèè").Range("G13").Value , Worksheets("Àâàðèè").Range("G12").Value, Worksheets("Àâàðèè").Range("G11").Value) SkipWrite: Next f Worksheets("Àâàðèè").Cells(9, 8).Value = f 'çàïîìèíàåì äîêóäà çàïîëíåíî If (Worksheets("Àâàðèè").Range("G24").Value = CBool(1)) Then GoTo norespons If (Worksheets("Àâàðèè").Range("H24").Value = CBool(1)) Then GoTo noserver DDETerminate mychannelwr If (TimeOut > 30) Then Worksheets("Àâàðèè").Cells(f + 6, 3).Value = Worksheets("Àâàðèè").Cells(112, 3).Value If (TimeOut < 30) Then Worksheets("Àâàðèè").Cells(f + 6, 3).Value = Worksheets("Àâàðèè").Cells(113, 3).Value GoTo endsub norespons: Worksheets("Àâàðèè").Cells(f + 6, 3).Value = Worksheets("Àâàðèè").Cells(115, 3).Value GoTo endsub noserver: Worksheets("Àâàðèè").Cells(f + 6, 3).Value = Worksheets("Àâàðèè").Cells(116, 3).Value endsub: End Sub __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
06.03.2009, 14:42 | #36 |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Графика
вот и пообщались ;(
|
06.03.2009, 17:36 | #37 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Графика
Дык "Суть функции в тупом копировании нескольких ячеек в таблицу с изменением номера строки. Т.е. построение "текстового тренда". Данные меняются в исходных ячейках самостоятельно" (c)
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
21.10.2011, 17:41 | #38 |
Member
Регистрация: Sep 2007
Сообщения: 46
Благодарил(а): 4 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: последовательный аналоговый выход 0-10 V
В проекте понадобилось управление заслонками последовательно, одна открывается, за ней вторая. Раскритикуйте плиз.
|
21.10.2011, 17:54 | #39 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: последовательный аналоговый выход 0-10 V
Цитата:
__________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
21.10.2011, 18:06 | #40 |
Member
Регистрация: Nov 2008
Сообщения: 50
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Различные макросы
хоть и не понимаю всей задачи до конца, но как минимум можно заменить деление на 50 и последующее умножение на 100 простым умножением на 2
|
21.10.2011, 18:19 | #41 |
Member
Регистрация: Sep 2007
Сообщения: 46
Благодарил(а): 4 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Различные макросы
Это я сначала для наглядности в 0-10 V преобразовывал, а потом забыл упростить.
Задача-использовать 1 регулятор для большой заслонки, разделенной на 2 части для более точной регулировке в начале открытия. |
21.10.2011, 18:32 | #42 |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Различные макросы
Вот так гораздо проще и компактнее
__________________ Автомат АК - самый распространенный преобразователь стека в очередь |
21.10.2011, 18:46 | #43 |
Member
Регистрация: Sep 2007
Сообщения: 46
Благодарил(а): 4 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Различные макросы
хммм.... Только сократил до 8 блоков а тут вона чё. Спасибо, и ведь считает также
|
22.10.2011, 01:09 | #44 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Ответ: Различные макросы
или можно до 4-х блоков
|
22.10.2011, 19:24 | #45 |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Различные макросы
Однако в этом варианте входной и выходной диапазоны будут вовсе не 15...1015
__________________ Автомат АК - самый распространенный преобразователь стека в очередь |
22.10.2011, 20:38 | #46 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Ответ: Различные макросы
так ничего не мешает задать нужный диапазон
|
23.10.2011, 11:09 | #47 |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Различные макросы
Ага. Но для смещения до min=15 потребуется пятый FBD
__________________ Автомат АК - самый распространенный преобразователь стека в очередь |
01.07.2012, 10:02 | #48 |
Member
Регистрация: Dec 2008
Сообщения: 31
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Различные макросы
Здравствуйте! Есть у кого нибудь макрос управления кнопкой Пуск/Стоп без фиксации т.е один раз нажал Пуск второй раз нажал Стоп и.т.д. Или подскажите из каких блоков его можно собрать
|
01.07.2012, 12:07 | #49 | |
Senior Member
Регистрация: Jan 2006
Сообщения: 321
Благодарил(а): 5 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Различные макросы
Цитата:
|
|
01.07.2012, 14:03 | #50 |
Member
Регистрация: Dec 2008
Сообщения: 31
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Различные макросы
т.е. меняеш F2 на DIN
|
01.07.2012, 14:41 | #51 | |
Senior Member
Регистрация: Jan 2006
Сообщения: 321
Благодарил(а): 5 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Различные макросы
Цитата:
|
|
01.07.2012, 15:55 | #52 |
Member
Регистрация: Dec 2008
Сообщения: 31
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Различные макросы
Спасибо!
|
18.07.2012, 11:53 | #53 |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Макрос для индикации событий
Макрос для индикации текущих активных событий.
Перебирает последовательно биты в слове с заданным периодом и если бит установлен, то выдает его номер + 1 на вход sel SCREENа. Если ни одного бита нет, то sel = 0 (пустая строка). __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
18.07.2012, 13:58 | #54 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Макрос для индикации событий
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
18.07.2012, 18:19 | #55 | |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Макрос для индикации событий
Цитата:
А у меня поочередно все сообщения. __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
|
18.07.2012, 19:20 | #56 |
Senior Member
Регистрация: Jul 2007
Адрес: Калининград
Сообщения: 422
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Циклограмма, она же секвенсер
Вот такого макроса точно нет в Конструкторе
Простенький пример использования макроса в прицепе. Шаги не обязательно должны быть последовательными: можно делать ветвления, циклы, параллельное выполнение и т.д. Короче, пользуйтесь на здоровье... __________________ Автомат АК - самый распространенный преобразователь стека в очередь |
23.07.2013, 16:58 | #57 |
Новичок
Регистрация: Jun 2007
Адрес: Рязань
Сообщения: 29
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Различные макросы
Попытка сделать журнал для пульта управления.
Идея: Есть приточки на SMH 2010 и пульт на SMH 2010. Они большие, чёрные, с кнопками и нравятся заказчику Основная мысль: Пульт должен максимально возможно повторять экраны приточки (для заказчика проще). В приточке немного перепиленый журнал 2.20. В пульте останки от журнала 2.20 (выкинута память и иже с ней для упрощения синхронизации). Журнал в пульте читает события из журнала в приточке. Есть непонятка насчёт ресурса памяти, но в интернете нашёл, что влияет только запись, чтение на памяти не отражается (или отражается несущественно). Хотелось бы услышать мнения на этот счёт у местных Отцов-корифеев Во вложении два проекта : testПрит - журнал приточки и карта памяти testПульт - журнал пульта |
23.07.2013, 17:24 | #58 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Различные макросы
Цитата:
Остаётся только передать нажатия кнопок в подчинённый контроллер и сделать арбитраж локального/пультового управления. Либо не делать его Не думаю, что одновременно будут пользоваться обоими контроллерами. Ну и отбалансировать производительность, ибо пульт может пригрузить основной контроллер на 20 мсек запросто, а при больной голове и на все 50 мсек. Выделил решение в отдельную тему: http://forum.segnetics.com/showthrea...6634#post16634 Да, чтение не влияет. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
23.07.2013, 17:52 | #59 | |
Новичок
Регистрация: Jun 2007
Адрес: Рязань
Сообщения: 29
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Различные макросы
Цитата:
|
|
23.07.2013, 18:06 | #60 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Различные макросы
Цитата:
А количество блоков представляет собой скорее академический интерес, т.к. контроллер выполняет их менее, чем за 15 мсек при предельных в такой задаче 70-80 мсек. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|