Segnetics

Вернуться   Segnetics > Форум Segnetics > SMLogix

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.06.2019, 11:32   #1
vohodonoo
Member
 
Регистрация: Jun 2015
Сообщения: 35
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Запись аварийных событий

Добрый день. У меня тут сложилась задачка по отображению аварийных событий, и что-то никак не могу ее решить.
Суть такова: есть четыре байта информации которые характеризуют тип аварии (два старших байта, напр. уровень жидкости, температура и т.д.). Младших два байта характеризуют степень аварии, то есть например цифра 1 - выше верхнего предела, 2 - ниже нижнего предела, 5- предупреждение, 7 - датчик не исправен и т.д. Таким образом у меня есть комбинации примерно на 300 событий.

Причем старшие два байта пронумерованы не по порядку, то есть бывают типы аварий которые могут быть обозначены цифрой например 3001, или 4909, а всего типов аварий порядка 100.

Вопрос: как мне их отобразить в текстовом виде на TRIM5 ?
vohodonoo вне форума   Ответить с цитированием
Старый 13.06.2019, 11:51   #2
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 1 912
Благодарил(а): 19 раз(а)
Поблагодарили: 6 раз(а) в 6 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата
Сообщение от vohodonoo Посмотреть сообщение
Добрый день. У меня тут сложилась задачка по отображению аварийных событий, и что-то никак не могу ее решить.
Суть такова: есть четыре байта информации которые характеризуют тип аварии (два старших байта, напр. уровень жидкости, температура и т.д.). Младших два байта характеризуют степень аварии, то есть например цифра 1 - выше верхнего предела, 2 - ниже нижнего предела, 5- предупреждение, 7 - датчик не исправен и т.д. Таким образом у меня есть комбинации примерно на 300 событий.

Причем старшие два байта пронумерованы не по порядку, то есть бывают типы аварий которые могут быть обозначены цифрой например 3001, или 4909, а всего типов аварий порядка 100.

Вопрос: как мне их отобразить в текстовом виде на TRIM5 ?
у вас события как-то закодированы, в вам нужно изменить кодировку таким образом чтобы было возможно использовать текстовый селектор. т.е. нужен перекодировщик


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 13.06.2019, 12:26   #3
vohodonoo
Member
 
Регистрация: Jun 2015
Сообщения: 35
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Запись аварийных событий

Вот правильно вы говорите, нужен какой-то перекодировщик, но что бы его нарисовать, кроме как использовать элемент сравнения значений я пока придумать не могу. Вторая проблема, в SMlogix нет возможности работать со строками, только с числами, и это оказалось большой проблемой для моей задачи.

Поэтому возникает вопрос, кто как решает задачи с выводом аварийных сообщений?
vohodonoo вне форума   Ответить с цитированием
Старый 13.06.2019, 12:46   #4
Ilya J.
Сотрудник Segnetics
 
Аватара для Ilya J.
 
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 410
Благодарил(а): 0 раз(а)
Поблагодарили: 35 раз(а) в 34 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата Вторая проблема, в SMlogix нет возможности работать со строками, только с числами, и это оказалось большой проблемой для моей задачи.
Всмысле?

По задаче, я так понимаю она вам кажется объемной и хочется ее упростить. Мне это видится как, вам сначала надо собрать дешифратор для одной аварии(у одной аварии несколько состояний=несколько разных аварий.), потом копипаст дешифратора на количество аварий и набивать журнал в смарте.
Ilya J. вне форума   Ответить с цитированием
Старый 13.06.2019, 12:54   #5
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 104
Благодарил(а): 3 раз(а)
Поблагодарили: 52 раз(а) в 50 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата
Сообщение от vohodonoo Посмотреть сообщение
Вот правильно вы говорите, нужен какой-то перекодировщик, но что бы его нарисовать, кроме как использовать элемент сравнения значений я пока придумать не могу. Вторая проблема, в SMlogix нет возможности работать со строками, только с числами, и это оказалось большой проблемой для моей задачи.
Задача в любом случае вырождается в раскодировку вашего формата, получение индексов строк и вывода этих строк на экран. Причём не важно, на наших контроллерах, на c++ в сервере или в вижл-бейсике в Windows.

Индексное обращение к строкам в SMLogix есть. Проблема в данном случае надумана.



Цитата
Сообщение от vohodonoo Посмотреть сообщение
Поэтому возникает вопрос, кто как решает задачи с выводом аварийных сообщений?
Обычно мы садимся и рисуем блок-схемы того, что сейчас есть и того, что нужно получить. Далее восполняем отсутствующие элементы и модифицируем не выполняющие нужных функций.

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

В вашем случае макрос HI(long) выделит уровень жидкости или что там у вас, макрос LO(long) выделит код сообщения. Уже минус 65535 сравнений.

Далее нужно проанализировать ваши коды сообщений. Если программист был достаточно опытен, то типы сообщений разделены на битовые маски и тогда ни одного сравнения вам вообще не понадобится. Если программер, который придумывал эти сообщения, любит решать задачи в лоб, то мимо 300 сравнений вам не пройти, можно лишь оптимизировать это количество. Что возвращает нас к необходимости анализа всех кодов сообщений.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 13.06.2019, 13:43   #6
vohodonoo
Member
 
Регистрация: Jun 2015
Сообщения: 35
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата:
Сообщение от Arsie Посмотреть сообщение
В вашем случае макрос HI(long) выделит уровень жидкости или что там у вас, макрос LO(long) выделит код сообщения. Уже минус 65535 сравнений.

Далее нужно проанализировать ваши коды сообщений. Если программист был достаточно опытен, то типы сообщений разделены на битовые маски и тогда ни одного сравнения вам вообще не понадобится. Если программер, который придумывал эти сообщения, любит решать задачи в лоб, то мимо 300 сравнений вам не пройти, можно лишь оптимизировать это количество. Что возвращает нас к необходимости анализа всех кодов сообщений.
То что байты разделить это не проблема, и сразу так и было сделано. А вот то что они нифига никак битовыми операциями не подчиняются это точно, там нет никакой битовой логики. Поэтому надо рисовать целую сетку этих значений, и как-то их потом обрабатывать.

Просто вдруг (ну может же такое быть) есть такой блок в SMART-е который мог бы просто сделать какое-то соответствие конкретной цифре - конкретную строку (фразу). В SMARTе есть нечто подобное, если задать тип переменной "перечисление". Одно только проблемно, что они задаются последовательно. Еще пробовал использовать в SMARTе "журнал событий", в SMlogix 1,27 больше 60 событий начинает ловить глюк и просто вылетает. Может в SMlogix 1,28 как-то лучше стало с "журналом событий" я не пробовал, сейчас как раз думаю попробовать..... но событий тогда придется все-равно прописывать под 300 шт.
vohodonoo вне форума   Ответить с цитированием
Старый 13.06.2019, 13:47   #7
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 104
Благодарил(а): 3 раз(а)
Поблагодарили: 52 раз(а) в 50 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата
Сообщение от vohodonoo Посмотреть сообщение
Просто вдруг (ну может же такое быть) есть такой блок в SMART-е который мог бы просто сделать какое-то соответствие конкретной цифре - конкретную строку (фразу).
Например обычный вывод текста.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 13.06.2019, 14:10   #8
vohodonoo
Member
 
Регистрация: Jun 2015
Сообщения: 35
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата:
Сообщение от Arsie Посмотреть сообщение
Например обычный вывод текста.
Но там цифры все только последовательные, невозможно например задать текст под номером 4003, потому что этот блок вмещает не более 255 строк. Кроме того, хорошо бы это еще и запомнить как-то, а это я как понимаю можно сделать запись только в "журнале событий". А в будущем (это я так чисто теоретически) могут появиться элементы-блоки с типом char, что бы можно было просто оперировать строками.

я вот например встретил такую замечательную программку "FLprog", это тоже FBD программирование но для ARDUINO. Есть конечно там и свои минусы, но один из огромнейших плюсов в том, что на ряду с типами bool, int, long, float так же легко используются блоки с типом char. И там этой проблемы как-бы даже не возникло, просто берешь значение char соответствие из старших байт + char соответствие из младших байт = char итоговая строка. И все просто как день.
vohodonoo вне форума   Ответить с цитированием
Старый 13.06.2019, 14:14   #9
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 104
Благодарил(а): 3 раз(а)
Поблагодарили: 52 раз(а) в 50 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата
Сообщение от vohodonoo Посмотреть сообщение
Но там цифры все только последовательные, невозможно например задать текст под номером 4003, потому что этот блок вмещает не более 255 строк. Кроме того, хорошо бы это еще и запомнить как-то, а это я как понимаю можно сделать запись только в "журнале событий"
Тогда только один путь: сравнение и компрессия. Это блоки CMP и блок PRCD. Если взаимосвязей кодов действительно нет.

Нудноватая работа, но для 2Gi и более современных контроллеров ненапряжная. А копипаст ускорит процесс.

Я бы сделал универсальный макрос с 10-20 входами, который на выходе даёт число - номер сообщения. И далее всё это дело копипастил, складывая выходы этих макросов.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 13.06.2019, 14:44   #10
vohodonoo
Member
 
Регистрация: Jun 2015
Сообщения: 35
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата Я бы сделал универсальный макрос с 10-20 входами, который на выходе даёт число - номер сообщения. И далее всё это дело копипастил, складывая выходы этих макросов.
Тоже примерно в этом ключе и подумал.
vohodonoo вне форума   Ответить с цитированием
Старый 13.06.2019, 17:17   #11
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 1 912
Благодарил(а): 19 раз(а)
Поблагодарили: 6 раз(а) в 6 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата
Сообщение от vohodonoo Посмотреть сообщение
Вот правильно вы говорите, нужен какой-то перекодировщик, но что бы его нарисовать, кроме как использовать элемент сравнения значений я пока придумать не могу. Вторая проблема, в SMlogix нет возможности работать со строками, только с числами, и это оказалось большой проблемой для моей задачи.

Поэтому возникает вопрос, кто как решает задачи с выводом аварийных сообщений?
а чем не устраивает блок сравнения?
задача решается по-индусски: влоб.
СМР(int) выход А=В отдаем в журнал событий, там пишем все что надо. первый вариант.
второй: тот же компаратор, но выход А=В управляет видимостью текстового блока в смарте
третий: .. и т.д.


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 17.06.2019, 14:46   #12
vohodonoo
Member
 
Регистрация: Jun 2015
Сообщения: 35
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Запись аварийных событий

Вот итог дешифратора аварий.

Теперь осталось все это в текстовом виде вбить в SMART в экран "ЖУРНАЛ СОБЫТИЙ", и если он от такого количества не загнётся, то ждет меня завтра удача...... Ну а если загнется, то пока не знаю что и делать дальше.
Вложения
Тип файла: msl Расшифровка аварий.msl (360.2 Кбайт, 5 просмотров)
vohodonoo вне форума   Ответить с цитированием
Старый 17.06.2019, 14:57   #13
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 11 104
Благодарил(а): 3 раз(а)
Поблагодарили: 52 раз(а) в 50 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата
Сообщение от vohodonoo Посмотреть сообщение
если он от такого количества не загнётся, то ждет меня завтра удача...... Ну а если загнется, то пока не знаю что и делать дальше.
Это было проверить проще всего. Нажимаете кнопку "+" в СМАрт, набиваете нужное количество событий и грузите в контроллер. На этом вся проверка.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 17.06.2019, 16:15   #14
Ilya J.
Сотрудник Segnetics
 
Аватара для Ilya J.
 
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 410
Благодарил(а): 0 раз(а)
Поблагодарили: 35 раз(а) в 34 сообщениях
По умолчанию Ответ: Запись аварийных событий

Цитата
Сообщение от vohodonoo Посмотреть сообщение
Вот итог дешифратора аварий.

Теперь осталось все это в текстовом виде вбить в SMART в экран "ЖУРНАЛ СОБЫТИЙ", и если он от такого количества не загнётся, то ждет меня завтра удача...... Ну а если загнется, то пока не знаю что и делать дальше.
Если вдруг загнется, можно сделать несколько журналов.
Ilya J. вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь с журналом событий Kempa4i_ Вопросы о SMH-2G(i) 3 07.06.2017 21:49
Журнал событий на SMH2G evo3 Вопросы о программировании 13 06.04.2016 10:33
Журнал событий Gbx Вопросы о Pixel 3 15.01.2016 14:16
Не изменяется запись на экране SMArt (ложная проблема) Миханько Антон SMArt 7 10.11.2015 17:33


Часовой пояс GMT +4, время: 22:27.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2019