Ответы в темах
-
АвторЗаписи
-
Alexandr
УчастникВ теме Перевести секунды, в часы и минуты
Там мне ответили
JurasskPark — предложил формулу,
Вы посоветовали TimeSpan (если честно даже не знаю что это)
и Михаил (как я понимаю это разработчик) также дал пищу для раздумывания.Я прочитал все ответы, но пока не особо понял ))).
Начну читать более внимательно, изучать и пробовать, буду отписываться в том чате, что бы не нарушать тематику.
Alexandr
Участникmanjey73,
Когда я понял алгоритм, оказалось что все очень просто, а когда не понимаешь все очень сложно.
Зато приятно, что все будет настроено как хотел того производитель.Сложное теперь для меня время, это еще один из моих вопросов на форуме, до времени я еще не доходил ))).
Еще раз спасибо!
Alexandr
Участникmanjey73
я разобрался со сдвигами, и масками.
Всем огромное спасибо за оказанную помощь.
-
Ответ изменён 2 года, 2 месяца назад пользователем
Alexandr.
Alexandr
УчастникВсем добрый день!
manjey73, я посмотрел по ссылке, но что то у меня ничего не получается, сервер не стартует, не могли бы Вы помочь.
Как писал ранее в регистре 16 бит, по 4-е бита на каждую аварию.
к примеру
Name Min Max Bits/ Sign
Emergency stop 0 15 13/16-16/16
Low oil pressure 0 15 9/16-12/16
High coolant temperature 0 15 5/16-8/16
Reserved 0 15 1/16-4/16Я добавил в скрипты Вашу формулу
public double GetAnyBits(double val, int n, int mask = 1)
{
ulong ulVal = (ulong)val;
return (ulVal >> n) & (ulong)mask;
}Для получения старший 4 битов (первые четыре слева) Emergency stop мне требуется выполнить смещение в право на 8, но я не понимаю что за маска. Это какое число от чего они зависит? не могли бы подсказать?
А если мне требуется получить 4 бита High coolant temperature, смещение вправо на 4, а первые 8 битов они отрежутся?
Alexandr
УчастникДобрый день,
Все верно, в поставленном вопросе у меня каждый бит в регистре определяет значение.
Когда я разобрался в данном вопросе, я вернулся к старым своим решениям, и захотелось навести там порядок, так как там я сделал это не совсем хорошо, я генерировал аварию и записывал десятичное значение, но если мы получим 2 аварии в одном регистре скада не выдаст проблему.
Контроллер Deep Sea для генераторов, в регистре аварий имеет 16 бит, в одном регистре 4 аварийных сообщения. Т.е. на каждую аварию предоставляется 4 бита.
Поэтому попросил у вас пример как делали вы с тремя битами, и сделать что то подобное с 4-мя битами.
Хотел бы сделать просто все верно и красиво.Alexandr
УчастникА не могли бы скинуть пример, как Вы это осуществили.
у меня как раз такая же задача.
Регистр определяет 4 аварии, имеет 16 бит, соответственно разделен на 4 группы.
Каждая группа из 4 бит, определяет имеется ли аварийное сообщение на контроллере или нет.
Alexandr
УчастникСпасибо!
Примерно понимаю что нужно сделать.
Всем большое спасибо за помощь!
Alexandr
УчастникСпасибо,
а если требуется получить к примеру 4 бита из 16-ти, такое возможно?
Alexandr
УчастникЮрий, все верно.
Когда контроллер не получает инфо от другого контроллера, то на дисплее он отображает ХХХ, а модбасе кидает 32766.
Тут можно пойти несколькими путями,
либо как предложили Вы, либо как предложил Михаил.
Можно действовать от ситуации, в моем случае температура не может быть более 120 градусов, соответственно я предположил что можно считать если число просто больше значит оно не верное.Тут все решилось, по времени это второй вопрос который был в форуме от меня, я чет там совсем не понимаю))).
Alexandr
УчастникВсем огромное спасибо за помощь!
При таком формате формулы «Cnl; Cnl >=120 ? 0 : CnlStat» появились прочерки, прям как требуется.
Еще чуть позже проверю, работает ли при формула при необходимости вести деление или умножение на поправочный коэффициент. Типа такой Cnl/0,1; Cnl/0,1 >=10 ? 0 : CnlStat.
Alexandr
УчастникВсем добрый день,
Юрий при использовании формулы
Cnl = 32766 ? 0:CnlСервер не стартует
2024-08-15 10:41:56 [RAPIDSCADA][RAPIDSCADA$][ERR] Ошибка при компиляции исходного кода скриптов и формул:
(678,53): error CS0200: Property or indexer ‘CalcEngine.Cnl’ cannot be assigned to — it is read only
(678,59): error CS0029: Cannot implicitly convert type ‘int’ to ‘bool’
Проверьте исходный код в файле C:\Program Files\SCADA\ScadaServer\Log\CalcEngine.cs
2024-08-15 10:41:57 [RAPIDSCADA][RAPIDSCADA$][ERR] Нормальная работа невозможнаЕсли делать так как предлагает Михаил, Cnl; Cnl < 100 ? 0 : CnlStat
то получаем на выходе тоже значение в моем случае это 32766
Если же изменить формулу до вида Cnl < 100 ? 0 : CnlStat
канал меняется но на выходе идут не прочерки а значение 1.Пока оставил последний вариант, что бы не отрабатывали аварийные сообщения по завышению температуры, но значение 1 также вводит в заблуждение персонал клиента.
По хорошему бы иметь отображение в виде «-«, что нет данных.В любом случае спасибо за помощь!
Alexandr
УчастникПарни, я бы с радостью это сделал
Подскажите где прочитать посмотреть и т.д.
Я могу хорошо настроить физику, построить маршруты, преобразователи, установить и настроить ИБП, генератор кондиционер.
Устанавливал настраивал zabbix, сейчас перешел во многом на Rapid.Alexandr
УчастникДобрый день!
из документа DeepSea
6-7 условный регистр время работы генератора, в секундах.В UnixTime привязаны часы контроллера DeepSea.
10.9 Page 7 – Accumulated Instrumentation
Notes:
1. These are read/write registers though some systems may not support writing to some registers.
2. The ‘Engine run time for load demand’ is used by the hours run balancing scheme, it can be reset independently of the ‘Engine Run Time’ to cope with hire sets being added to a site.8xxx/7xxx/6xxx/L40x/4xxx register allocation
Register offset Name Minimum value Maximum value Scaling factor Units Bits/ Sign
0-1 Current time since 1/1/70 0 4.29 x109 1 Seconds 32
2-3 Time to next engine maintenance -2.14 x109 2.14 x109 1 Seconds 32S
4-5 Time of next engine maintenance since 1/1/70 0 4.29 x109 1 Seconds 32
6-7 Engine run time 0 4.29×109 1 Seconds 32Alexandr
УчастникJurasskPark, спасибо попробую.
еще вопрос, не мог бы ты отправить картинки на почту aleksin@mail.ru.
картинки не могу просмотреть, он и не увеличивает, поэтому ничего не видноAlexandr
УчастникМихаил,
Не знаю как у Вас на картинке сделать но у меня так не получается, нет такого представления.
Сделал следующее, установил пакет dotnet-hosting-7.0.3-win, после этого стартовая страница заработала.
Изменений смотрю очень много сделано, решил пока по изучать данную версию.
Спасибо!
-
Ответ изменён 2 года, 2 месяца назад пользователем
-
АвторЗаписи