|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
|
Опции темы | Поиск в этой теме |
13.06.2019, 11:32 | #1 |
Member
Регистрация: Jun 2015
Сообщения: 46
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Запись аварийных событий
Добрый день. У меня тут сложилась задачка по отображению аварийных событий, и что-то никак не могу ее решить.
Суть такова: есть четыре байта информации которые характеризуют тип аварии (два старших байта, напр. уровень жидкости, температура и т.д.). Младших два байта характеризуют степень аварии, то есть например цифра 1 - выше верхнего предела, 2 - ниже нижнего предела, 5- предупреждение, 7 - датчик не исправен и т.д. Таким образом у меня есть комбинации примерно на 300 событий. Причем старшие два байта пронумерованы не по порядку, то есть бывают типы аварий которые могут быть обозначены цифрой например 3001, или 4909, а всего типов аварий порядка 100. Вопрос: как мне их отобразить в текстовом виде на TRIM5 ? |
13.06.2019, 11:51 | #2 | |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 173
Благодарил(а): 242 раз(а)
Поблагодарили:
166 раз(а) в 158 сообщениях
|
Ответ: Запись аварийных событий
Цитата:
|
|
13.06.2019, 12:26 | #3 |
Member
Регистрация: Jun 2015
Сообщения: 46
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Запись аварийных событий
Вот правильно вы говорите, нужен какой-то перекодировщик, но что бы его нарисовать, кроме как использовать элемент сравнения значений я пока придумать не могу. Вторая проблема, в SMlogix нет возможности работать со строками, только с числами, и это оказалось большой проблемой для моей задачи.
Поэтому возникает вопрос, кто как решает задачи с выводом аварийных сообщений? |
13.06.2019, 12:46 | #4 | |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 341
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Запись аварийных событий
Цитата:
По задаче, я так понимаю она вам кажется объемной и хочется ее упростить. Мне это видится как, вам сначала надо собрать дешифратор для одной аварии(у одной аварии несколько состояний=несколько разных аварий.), потом копипаст дешифратора на количество аварий и набивать журнал в смарте. |
|
13.06.2019, 12:54 | #5 | ||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Запись аварийных событий
Цитата:
Индексное обращение к строкам в SMLogix есть. Проблема в данном случае надумана. Цитата:
Например, вы упоминаете сравнения, как основной элемент раскодирования. Нет проблем, это рабочий вариант. Примерно как тащить волоком тонну кирпичей вместо того, чтобы загрузить их на тележку. В вашем случае макрос HI(long) выделит уровень жидкости или что там у вас, макрос LO(long) выделит код сообщения. Уже минус 65535 сравнений. Далее нужно проанализировать ваши коды сообщений. Если программист был достаточно опытен, то типы сообщений разделены на битовые маски и тогда ни одного сравнения вам вообще не понадобится. Если программер, который придумывал эти сообщения, любит решать задачи в лоб, то мимо 300 сравнений вам не пройти, можно лишь оптимизировать это количество. Что возвращает нас к необходимости анализа всех кодов сообщений. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
||
13.06.2019, 13:43 | #6 | |
Member
Регистрация: Jun 2015
Сообщения: 46
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Запись аварийных событий
Цитата:
Просто вдруг (ну может же такое быть) есть такой блок в SMART-е который мог бы просто сделать какое-то соответствие конкретной цифре - конкретную строку (фразу). В SMARTе есть нечто подобное, если задать тип переменной "перечисление". Одно только проблемно, что они задаются последовательно. Еще пробовал использовать в SMARTе "журнал событий", в SMlogix 1,27 больше 60 событий начинает ловить глюк и просто вылетает. Может в SMlogix 1,28 как-то лучше стало с "журналом событий" я не пробовал, сейчас как раз думаю попробовать..... но событий тогда придется все-равно прописывать под 300 шт. |
|
13.06.2019, 13:47 | #7 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Запись аварийных событий
Например обычный вывод текста.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
13.06.2019, 14:10 | #8 |
Member
Регистрация: Jun 2015
Сообщения: 46
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Запись аварийных событий
Но там цифры все только последовательные, невозможно например задать текст под номером 4003, потому что этот блок вмещает не более 255 строк. Кроме того, хорошо бы это еще и запомнить как-то, а это я как понимаю можно сделать запись только в "журнале событий". А в будущем (это я так чисто теоретически) могут появиться элементы-блоки с типом char, что бы можно было просто оперировать строками.
я вот например встретил такую замечательную программку "FLprog", это тоже FBD программирование но для ARDUINO. Есть конечно там и свои минусы, но один из огромнейших плюсов в том, что на ряду с типами bool, int, long, float так же легко используются блоки с типом char. И там этой проблемы как-бы даже не возникло, просто берешь значение char соответствие из старших байт + char соответствие из младших байт = char итоговая строка. И все просто как день. |
13.06.2019, 14:14 | #9 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Запись аварийных событий
Цитата:
Нудноватая работа, но для 2Gi и более современных контроллеров ненапряжная. А копипаст ускорит процесс. Я бы сделал универсальный макрос с 10-20 входами, который на выходе даёт число - номер сообщения. И далее всё это дело копипастил, складывая выходы этих макросов. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
13.06.2019, 14:44 | #10 | |
Member
Регистрация: Jun 2015
Сообщения: 46
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Запись аварийных событий
Цитата:
|
|
13.06.2019, 17:17 | #11 | |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 173
Благодарил(а): 242 раз(а)
Поблагодарили:
166 раз(а) в 158 сообщениях
|
Ответ: Запись аварийных событий
Цитата:
задача решается по-индусски: влоб. СМР(int) выход А=В отдаем в журнал событий, там пишем все что надо. первый вариант. второй: тот же компаратор, но выход А=В управляет видимостью текстового блока в смарте третий: .. и т.д. |
|
17.06.2019, 14:46 | #12 |
Member
Регистрация: Jun 2015
Сообщения: 46
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Запись аварийных событий
Вот итог дешифратора аварий.
Теперь осталось все это в текстовом виде вбить в SMART в экран "ЖУРНАЛ СОБЫТИЙ", и если он от такого количества не загнётся, то ждет меня завтра удача...... Ну а если загнется, то пока не знаю что и делать дальше. |
17.06.2019, 14:57 | #13 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Запись аварийных событий
Это было проверить проще всего. Нажимаете кнопку "+" в СМАрт, набиваете нужное количество событий и грузите в контроллер. На этом вся проверка.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
17.06.2019, 16:15 | #14 |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 341
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Запись аварийных событий
Если вдруг загнется, можно сделать несколько журналов.
|