Страница 6 из 10 ПерваяПервая ... 45678 ... ПоследняяПоследняя
Показано с 51 по 60 из 95

Тема: невероятно медленный опрос модулей МВ110-220.8АС

  1. #51

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Ну, в добрый путь, так сказать...Особенно позабавило РНР, 1С 7.7 способствует привитию вкуса к понятному коду. Понятия у нас разные.
    Да, разные. Примеры под спойлером.
    Тут дофига кода и мерянья сами знаете чем (аккуратностью и понятностью):
    Вот 1Совский код (мой):
    Код:
    Функция глНайтиШаблонФорматаОбъекта(ИмяШаблона, СПрописью = 0, СоСтатистикой = 0, ВернутьОбъект = 0) Экспорт
    	Если (ПустоеЗначение(ИмяШаблона) = 1) Тогда
    		Возврат "";	//Если ошибка или умышленно так вызвано
    	КонецЕсли;
    
    	//Создаём объект справочника, в котором будем ковырять нужные нам шаблоны
    	СпрШ = СоздатьОбъект("Справочник.ШаблоныФорматовСистемы");
    
    	//Смотрим что нам надо найти
    	СтрПоиска = ИмяШаблона;
    	Если (СПрописью <> 0) Тогда
    		СтрПоиска = ИмяШаблона + "Прописью";
    	КонецЕсли;
    
    	//Ищем или шаблон с точным соответствием его
    	Рез = СпрШ.НайтиПоНаименованию(СтрПоиска, 0, 1);
    
    	//Если нам так "повезло" что надо искать с просписью и для прописи он так и не был найден, то пытаемся найти обычный шаблон
    	Если ((Рез = 0) И (СПрописью <> 0)) Тогда
    		СтрПоиска = ИмяШаблона;
    		Рез = СпрШ.НайтиПоНаименованию(СтрПоиска, 0, 1);
    	КонецЕсли;
    
    	//Если что-то нашли - то обновим статистику (если надо) и вернём результат
    	Если (Рез = 1) Тогда
    		Если (СоСтатистикой <> 0) Тогда
    			СпрШ.Обращений = СпрШ.Обращений + 1;
    			СпрШ.Записать();	//В этом случае не надо вызывать глПриЗаписиСправочника(), так как изменение не интерактивное!
    		КонецЕсли;
    
    		//Возвращаем найденный объект в зависимости от его типа
    		Если (ВернутьОбъект = 0) Тогда
    			Возврат СокрЛП(СпрШ.Шаблон);	//Вертаем нужный шаблончег! (поле "Шаблон")
    		Иначе
    			Возврат СпрШ.ТекущийЭлемент();	//Вертаем нужный шаблончег! (весь объект справочника)
    		КонецЕсли;
    	КонецЕсли;
    Вот ишчо (это я в прошлом году сделал в своей 1Ске, где щиты проектирую, расчёт потерь нагрузок в линиях-кабелях):
    Код:
    	//Смотрим, какой тип фаз нам дали и выставляем флаг ТрёхФаз или нет
    	ФлТриФазы = ?((ОбТипФазы = Перечисление.ВидФазыНагрузки.Трёхфазная) ИЛИ (ОбТипФазы = Перечисление.ВидФазыНагрузки.ТрёхфазнаяПолная), 1, 0);
    
    	//Проверяем входные параметры и пытаемся взять константы, если нам ни хера не дали
    	ОбНапряжение = ?(ПустоеЗначение(ОбНапряжение) = 1, ?(ФлТриФазы = 1, ?(ПустоеЗначение(Константа.ЩитНагрузкиНапряжение3Фазы) = 0, Константа.ЩитНагрузкиНапряжение3Фазы, 400), ?(ПустоеЗначение(Константа.ЩитНагрузкиНапряжение1Фаза) = 0, Константа.ЩитНагрузкиНапряжение1Фаза, 230)), ОбНапряжение);
    	ОбКосФИ = ?(ПустоеЗначение(ОбКосФИ) = 1, ?(ПустоеЗначение(Константа.ЩитНагрузкиКосинусФи) = 0, Константа.ЩитНагрузкиКосинусФи, 0.95), ОбКосФИ);
    
    	//Делаем ВСЕ расчёты разом, чтобы не выносить мозги и возвращать нужные
    	Если (ФлТриФазы = 0) Тогда	//Однофазное
    		ТокНагрузки = (ОбМощность * 1000) / ОбНапряжение / ОбКосФИ;
    		АктивнаяМощность = ТокНагрузки * ОбНапряжение;
    		РеактивнаяМощность = КвaдpaтныйКopeнь(3 * (1 - (ОбКосФИ * ОбКосФИ))) * АктивнаяМощность;
    	ИначеЕсли (ФлТриФазы = 1) Тогда	//Трёхфазное
    		ТокНагрузки = (((ОбМощность * 1000) / ОбНапряжение) / ОбКосФИ) / КореньТрёх;
    		АктивнаяМощность = ТокНагрузки * ОбНапряжение;	//УТОЧНИТЬ, ТАК ЛИ ЭТО!
    		РеактивнаяМощность = КвaдpaтныйКopeнь(3 * (1 - (ОбКосФИ * ОбКосФИ))) * АктивнаяМощность;
    	КонецЕсли;
    
    	//Теперь считаем то, что нам дали
    	Если (ОбТипРасчёта = "Ток") Тогда
    		Возврат ТокНагрузки;
    	ИначеЕсли (ОбТипРасчёта = "МощАкт") Тогда
    		Возврат АктивнаяМощность;
    	ИначеЕсли (ОбТипРасчёта = "МощРАкт") Тогда
    		Возврат РеактивнаяМощность;
    	КонецЕсли;
    Вот так это работает:
    ShCalcLost-AC.gif ShCalcLost-DC.gif

    А вот PHP (огрызок):
    PHP код:
    function cs_topmenu($menuName ""$listClass "")
    {
        
    $sl_menu_list "";
        
    //Получаем объект данного меню по имени
        
    if ( ( $locations get_nav_menu_locations() ) && isset( $locations$menuName] ) )
        {
            
    //Получаем инфу про меню и его пункты
            
    $menu wp_get_nav_menu_object$locations$menuName ] );
            
    $menu_items wp_get_nav_menu_items($menu->term_id);
            
    $menu_count count($menu_items);

            
    //Начинаем выводить наш слайдер (меню), если оно не пустое
            
    if($menu_count 0)
            {
                
    $sl_menu_list .= "<ul class=\"" $listClass "\">\n";
                
    //ВЫВОД СПЕЦИАЛЬНЫХ ССЫЛОК (Второе меню, низ, общее)
                
    if(("csm_smain" == $menuName) && (true)) {
                    
    //Ссылка на вкладку "Блог" для всех постов. Получим, находимся ли мы на блоге или нет?
                    
    $bIsOnBlogPage = (is_home() or is_archive() or is_single() or is_paged() or is_search() or ( function_exists('is_tag') and is_tag()));
                    if (
    $bIsOnBlogPage) { $selClass "current_page_item"; } else { $selClass ""; }
                    
    //Если настроено выводить - выводим вкладку 


    Так что нефиг! Ко мне не прикопаешься!
    А что касается PHP - то сказать что он заставляет писать плохо - это откатиться на PHP 5. А ща на 7-8 версии там сделали очень строгие правила.

  2. #52

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    На счет склеивания, так есть же всякие /256 или %256 но так как я немного далек от паскалеподобного CodeSys не знаю как у них там точно.
    Ну или можно SHR, SHL использовать с ИЛИ
    Ага... это я умею по коду для микроконтроллеров. Там такое сплошь и рядом.
    Удобнее все эти делить/умножить писать в 16ричном виде, так как там FF означает один байт.
    И поэтому если мы пишем /256 - тут ни фига не ясно со стороны.
    А если пишем SHR(mmm, 8) - сдвинуть mmm вправо на 8 бит от конструкции (wData AND 16#FF00) - то тут чуток нагляднее:
    а) Через AND выделяем нужный байт из числа
    б) Через SHR сдвигаем куда надо.

    kondor3000 Всё понял! =)) Напишу свои функции - настало время © =)
    У меня первый косяк был с INT как раз - я WORD переводил, а он беззнаковый оказался. И отрицательная температура улетала фиг куда.

    Ian Я ещё не всё читал (так как к шапочному разбору пришёл).
    НЕ забываем, что в строк в CodeSys признак конца строки - байт с кодом 0 (ноль!)!!
    Поэтому если первый байт в кучке регистров равен нулю - то вся отладка будет показывать ПУСТУЮ СТРОКУ. А на деле там будут данные.
    Я заводил отдельный буфер из массива байт и при первых тестах эту строку туда через SysMemCpy копировал и видел данные.

    UPD. Почитал дальше. Неее! Не надо пока структур!
    Вот можно начать с простого теста (как делал я):
    а) На канал String назначить переменную Прям в конфигурации ПЛК. Пусть её зовут testData
    б) Настроить чтение ДАННЫХ с модуля. В данных как минимум есть положение десятичной точки - уж оно не нулевое.
    в) Взять массив байт: testBuf : ARRAY [1..64] OF BYTE;
    г) Копирнуть STRING в этот testBuf. И посмотреть побайтно, чё там в testBuf. Если не нули и если читается побайтно - то уже дальше играться с копированием в WORD и прочие штучки. Воть...

  3. #53
    Пользователь
    Регистрация
    21.12.2011
    Адрес
    Северодвинск
    Сообщений
    438

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    П.С Никогда и ни при каких условиях не использовать тип WORD(DWORD) для числовых переменных!!! Этому в школах советских учили!
    Sergey666, а чем грозит использование WORD, если гарантированно работаешь с положительными значениями? Есть в этом случае какое-то отличие WORD от UINT?

  4. #54
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

    Цитата Сообщение от VaBo Посмотреть сообщение
    Sergey666, а чем грозит использование WORD, если гарантированно работаешь с положительными значениями? Есть в этом случае какое-то отличие WORD от UINT?
    В КДС 2 вроде как нет UINT. Гарантированно, это на сколько процентов? Просто кроссплатформенность, попробуйте на сименсе арифметические действия с WORD, да и таки ракеты уходили с траектории и уставка терморегулятору становилась 65534 градуса и счетчик проката должен был отмотать 65534 мм при максимально возможных 25000(вполне в INT влазит)! Так что это(не использовать тип WORD, кроме как массива бит) просто защита от дебила!
    Последний раз редактировалось Sergey666; 30.06.2021 в 22:03.

  5. #55
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

    Цитата Сообщение от YuriBel Посмотреть сообщение
    Учитывая. что иногда всплывают сюрпризы типа описанных в сообщениях 27 и 31, не удивлюсь, если групповой опрос конфигурационных параметров не поддерживается. Какие-то ограничения все-таки есть, ибо в инструкции написано "Для функций 03, 04 и 16 допускается запись или чтение регистров, относящихся только к одной команде. При попытке записать или прочитать регистры нескольких команд возвращается ошибка 4 («Failure in associated device»). Исключение составляют регистры оперативных параметров, которые могут быть все считаны одной командой, при этом начальный адрес регистра может быть любым в пределах адресов оперативных параметров."
    Браво, Товарищ, ибо мне, например никогда и в страшном сне не пришло бы в голову читать с модуля что-то другое, кроме измеренных значений и статуса канала(да и то не всегда 4..20ма без сопливых понятно что там К.З или обрыв)!
    Ian! Пробуй начинать чтение с адреса 280 и не старайтесь понять и перенять-принять принципы индусского кода в начале пути, он приведет к потреблению всякого...
    Последний раз редактировалось Sergey666; 30.06.2021 в 22:07.

  6. #56
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Да, разные. Примеры под спойлером.

    Так что нефиг! Ко мне не прикопаешься!
    А что касается PHP - то сказать что он заставляет писать плохо - это откатиться на PHP 5. А ща на 7-8 версии там сделали очень строгие правила.
    Тему, блин засираю, но...Вот глянул на это и... короче понятия разные. С тяжким изумлением обнаружил, что Дельтовцы в своем софте таки допускают именование переменных на кириллице, они такие пока единственные (Индокитайцы, что с них взять), но впечатления были тяжкие (МоторКотрыйНаТранспортерСреднийНоВторой), и вроде парень не плохой, а кулаки чешуться...

  7. #57

    По умолчанию

    Да, оказалось, что нельзя читать конфигурационные данные строкой. Оперативные регистры передаются строкой, четко по примеру из книги.

  8. #58
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

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

  9. #59

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Фух, слава богу, это такие сложности на целый день!? Уже бы за это время освоил работу с библиотеками, но... у каждого свой вкус.
    Подскажите с какими библиотеками надо освоить работу? Завтра займусь.

  10. #60
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

    Офигеть! Я примеров старых в "Примерах и полезностях" не нашел???
    На диске от Овена должны быть примеры.

Страница 6 из 10 ПерваяПервая ... 45678 ... ПоследняяПоследняя

Похожие темы

  1. Опрос модулей МВ110-хх
    от Antonio-oz в разделе Мх110
    Ответов: 2
    Последнее сообщение: 14.12.2019, 14:49
  2. Ответов: 2
    Последнее сообщение: 13.03.2015, 01:00
  3. Ответов: 5
    Последнее сообщение: 20.02.2013, 02:44
  4. Опрос несколько модулей МВ110 через лектус
    от llx89 в разделе Эксплуатация
    Ответов: 5
    Последнее сообщение: 20.02.2013, 02:44
  5. Ответов: 9
    Последнее сообщение: 17.03.2011, 05:48

Ваши права

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