Просмотр полной версии : ПЛК63 v1.89 10 0c проблемки...
1) при программировании/отладке( подключаюсь/отключаюсь/прошиваю) кода иногда яркость и контрастность улетают в 0 сами( в программе эти параметры не используются).
Особо не волнует. Главное чтобы в работе не слетали.
2) если аналоговый вход настроить на 0..1в, то со входа читается 0.0 .. 100.0 вроде бы.( как на самом деле должно быть)?
что будет в режиме 4 .. 20ма и т.д.?
температуру вроде в градусах выдает.?
3) если перезагружать плк по "пуск\стоп"+"выход"+"ввод" и не отпускать "пуск\стоп( чтобы программа не запустилась), иногда забывает выключить некоторые свои выхода( на мр1 вроде все отключаются)
P.S. А куда тут у вас про проблемки писать, чтобы темы не плодить?
P.S2. Кстати баловался тут с яркостью, т.е. в каждом скане программы увеличивал яркость на 1 до 50 и сбрасывал в 0, то контроллер улетал на перезагрузку( причины не выяснял).
что то типа такого было:
q:BYTE;
q := q + 1;
Light := q MOD 50;
Филоненко Владислав
13.09.2010, 12:44
1) Яркость и контрастность улетают в ноль при резете программы (Login->Reset), так и должно быть, т.к. это оперативный параметр, к-й при старте однократно прописывается значением по умолчанию из конфигурации.
2.) тоже 0-100%
3) Он не забывает, а отрабатывает заданное безопасное состояние выходов.
P.S.2 - интересный эффект. Спасибо за его нахождение. проверим.
...
3) он не забывает, а отрабатывает заданное безопасное состояние выходов.
...
в проекте безопасное состояние по всем выходам 0, так что все таки вероятно что "забывает"( сейчас проверил 1й и 2й выхода забывает выключить, на 5м стоит 0.5 т.е. шим 0.5/1с. во время сброса все вырубается вроде, а потом при появлении надписи "овен", выхода активируются.).
если передернуть питание с нажатой старт/стоп то на всех выходах 0.
переодически плк меняет платформу(кодесус ругается). помогает передергивание питания.
Кстати в руководстве написано, что MinCycleLenght можно поставить 0, чтобы фоновым системным процессам полегчало, однако чего то не удается( минимум забит 1)
достаточно попытаться прогрузить проект ещё раз. два раза подряд платформу не меняет ;-)
Филоненко Владислав
15.09.2010, 10:29
просто ошибка связи. к сожалению, запрос платформы, в отличии от обычного обмена, не имеет функции самовосстановления при сбое.
просто повторите логин.
ух чего то сброс у вас накручен просто караул.
в случае серьезной ошибки решил перезапускать плкашку по сторожевому таймеру( кстати гдебы время уменьшить, а приходится ждать ~6 сек до таймаута,а потом еше пока перезагрузится).
перезапуск по сторожемому таймеру:
0) WHILE( TRUE)DO ; END_WHILE;
1) ждем ~7 сек, ничего не происходит
2) очищается экран, вродебы отключаются выхода на контроллере, на мр1 ничего не меняется
3) ждем ~4 секунды
4) выскакивает надпись овен, включаются некоторые выхода на контроллере( вродебы те что были включенны до сброса), на мр1 все выключается вродебы
5) ~1 секунда
6) запускается моя программа( выхода выставляются как надо)
( безопасное состояние выходов 0ли везде)
P.s. а может есть более простой и быстрый программный способ перезапуска программы( переинициализация всех переменных и выходов)
Филоненко Владислав
17.09.2010, 13:59
подключить питание через 1-е реле (нз контакт) и при необходимости сброса включать его. быстрее невозможно.
в догонку еще вопрос.
0с - это версия прошивки Pic? когда наконец а) на экране перестанут проскакивать "фантомные" надписи (есть подозрение, что при смене значений на не выбранных в текущий момент экранах. б) будет нормальная работа с клавиатурой в меню (писк есть, клавиша не срабатывает или срабатывает дважды) ???
подключить питание через 1-е реле (нз контакт) и при необходимости сброса включать его. быстрее невозможно.
хитро придумано и надежно
в догонку еще вопрос.
0с - это версия прошивки Pic? когда наконец а) на экране перестанут проскакивать "фантомные" надписи (есть подозрение, что при смене значений на не выбранных в текущий момент экранах. б) будет нормальная работа с клавиатурой в меню (писк есть, клавиша не срабатывает или срабатывает дважды) ???
2829
Со встроенным меню даже не разбирался, это нада документацию читать :)
Еще по дисплею вопрос, если постоянно на экран в монопольном режиме выводить одну и туже информацию( не стирая его), иногда начинает промаргивать нижняя строка или часть?
line0 := '$A2 $A2 --% $A2 --%';
line1 := '0 0 C 0 C';
IF( NOT O_FILL_TANK1)THEN line0 := REPLACE( line0, ' ', 1, 1); END_IF
IF( NOT O_FILL_TANK2)THEN line0 := REPLACE( line0, ' ', 1, 5); END_IF
IF( NOT O_FILL_TANK3)THEN line0 := REPLACE( line0, ' ', 1, 12); END_IF
line1 := REPLACE( line1, BYTE_TO_STRING( tank1.Level), 1, 1);
line1 := REPLACE( line1, BYTE_TO_STRING( tank2.Level), 1, 5);
line1 := REPLACE( line1, BYTE_TO_STRING( tank3.Level), 1, 12);
line1 := REPLACE( line1, INT_TO_STRING( TEMPERATURE_TANK2), 2, 7);
line1 := REPLACE( line1, INT_TO_STRING( TEMPERATURE_TANK3), 2, 14);
(*IF( flash_gen.OUT) THEN line1 := CONCAT( line1, INT_TO_STRING( TEMPERATURE_TANK2)); ELSE line1 := CONCAT( line1, ' '); END_IF;*)
(*рисуем на кинескопе*)
Write_Display( SINGLE_MODE, 0, 0, line0 );
Write_Display( SINGLE_MODE, 0, 1, line1 );
0c -- версия прошивки meg'и. 10 -- pic.
1. Фантомные надписи появляются от того, что pic перегружают запросами и он оказывается просто не в состоянии обработать такой поток данных. Увеличьте паузу между обновлением информации на экране. Соответсвующая роцедура вызывается в TASK MANAGER раз 50ms, в ней установлена проверка на изменения переменных, перезапись на экран только при их изменении. Моргания присутствуют. Такое время вызова много или мало?
2. С проблемами с клавиатурой ни разу не сталкивался. У меня всё чётко работает. И передний фронт, и задний, и удержание клавиши. Рекомендую попробовать на другом плк63.Минимум 5 из пяти :( Реально - больше. Версии основной прошивки 1.89, 1.94 (если это как то влияет)
P.S. Ну и аккуратнее надо комплектовать. В последней поставке версия 1.89, а версия таргета - 1.05, которая на 16 экранов, а в установленной прошивке - 8.
Ну в файлах таргетов - поправьте версию. А то все 1, да 1. А где .х ??
а раз в 50 мс перезаписывается 1 экран или все? не может так получаться, что поступает нсколько команд на перезапись экранов в одном цикле?зависит от изменений выводимых переменных. чтобы одновременно все 6-8 экранов + монопольный экран - такого не бывает. но чтобы в одном цикле 1-2 логический экран + монопольный экран - регулярно.
может ли это влиять на обработку клавиатуры?
кстати, о 2.12.
понятно, что на сайте экспериментальная версия. но в коммерческой приведите библиотеки в соответствие с заявленными функциями.
Как правильно одним ShowString или WriteDisplay обновить обе строки экрана, если это возможно? Дать в качестве параметра строку, которая в два раза больше строки ПЛК63? И ПЛК всё перенесёт сам? А то в одном цикле было натыкано много Show... Чуть ли не посимвольно местами выводил. А от моргания хочется избавиться...
Или надо в одном цикле одну строку, в другом (желательно через интервал) - вторую строку...
Как правильно одним ShowString или WriteDisplay обновить обе строки экрана, если это возможно? Дать в качестве параметра строку, которая в два раза больше строки ПЛК63? И ПЛК всё перенесёт сам?Нет. Остаток "исчезнет".
Филоненко Владислав
17.09.2010, 15:15
вообще перегружать контроллер - не очень хорошая идея. он сделан для работы, а не для перезагрузки :)
Как правильно одним ShowString или WriteDisplay обновить обе строки экрана, если это возможно? Дать в качестве параметра строку, которая в два раза больше строки ПЛК63? И ПЛК всё перенесёт сам? А то в одном цикле было натыкано много Show... Чуть ли не посимвольно местами выводил. А от моргания хочется избавиться...
Или надо в одном цикле одну строку, в другом (желательно через интервал) - вторую строку...
в позицию 0,0 загнать строку на 32 символа. Он сам все перенесет( 16+16).
Проверено в монопольном режиме.
С чем может быть связанна задержка открытия порта аж на минуту примерно??????
(*Óñòàíàâëèâàåì íàñòðîéêè COM-ïîðòà*)
IF port_opened=0 THEN
Settings.Port:= com_num ; (*íîìåð COM-ïîðòà*)
Settings.dwBaudRate:=115200; (*ñêîðîñòü*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
(*Åñëè COM-ïîðò îòêðûò, òî ïåðåõîäèì ê ïðèåìó è ïåðåäà÷è äàííûõ *)
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF
IF port_opened <> 2 THEN (*NOT Óäà÷íî ïðîèíèöèàëèçèðîâàëè*)
RETURN;
END_IF;
...
отказался от "многозадачности". теперь секунд 10 думает перед открытием порта( уже терпимо, но хотелось бы понять, куда 10 сек деваются).
кстати и реакция у контроллера улучшилась
Филоненко Владислав
18.09.2010, 19:49
Чтобы порт открылся, необходимо, чтобы все его потребители, например драйвер slave, его отпустили. Для этого рассылается сообщение, что-о типа "Освободить порт для работы SysLibCom" :) В случае, если вся система перегружена сообщениями - соответствующее сообщение может запоздать.
Соответственно пока порт не освободят - порт не откроется.
Проект Ваш поврежден и я не могу посмотреть его на предмет почему такая нагрузка. Выложите его повторно, возможно в другом формате архиватора.
Однако, даже такой сложный и комплексный прибор как ТРМ133М всех модификаций не страдает задержками. Поэтому надо посмотреть в каком месте Вашего проекта проблема.
Существует несколько особенностей ПЛК63, при неправильном использовании производительность резко упадет.
Тем, у кого мерцает дисплей - не более 1 записи на экран за 50 мс.
Проект не заархивирован. достаточно переименовать файл в cip.pro и все.
Как бы в конфигураторе сказать чтобы порт сразу был свободен?
Вот здесь отказался от многозадачности, стало повеселее. Но всегда хочется чего то большего :)
P.S. О а по ТРМ201 не подскажете http://www.owen.ru/forum/showthread.php?p=46567?
P.S2. О а по МСД-100 не подскажете http://www.owen.ru/forum/showthread.php?t=8709?
P.S3. Не подскажите как правильно делать последовательный опрос устройств по 485му, а то у меня какаято срамота получается -> перешел на овен протокол и OwenPoolMaster, но там проблемки http://www.owen.ru/forum/showthread.php?p=46607&posted=1#post46607
:eek: нифигаб себе обновил прошивочку( до 2.11) называтся.
теперь время не обновляется в некоторых режимах работы(в отладчике видно что меняется).
Щас будете расказывать, про то что обновлять нада пореже.....
Но на старой то работала эта программа без вопросов!
:mad:
И чего теперь во время загрузки контроллера какое то "Э" на индикаторе ?
с отображением починил. чегото вы там со строками накрутили или в старой было недокрученно, а в новой подправили.
VAR
lines: STRING(32);
END_VAR
VAR_INPUT
info: STRING(32);
END_VAR
lines := ' '; //32 пробела
lines := REPLACE( lines, info, (32-5), 0);
lines := REPLACE( lines, UINT_TO_STRING( mins/10), 1, ( 32-4));
lines := REPLACE( lines, UINT_TO_STRING( mins MOD 10), 1, ( 32-3));
lines := REPLACE( lines, ':', 1, ( 32-2));
lines := REPLACE( lines, UINT_TO_STRING( sec/10), 1, ( 32-1));
lines := REPLACE( lines, UINT_TO_STRING( sec MOD 10), 1, ( 32-0));
Write_Display( SINGLE_MODE, 0, 0, lines);
а в новой работало со сбоями, пришлось делать так
VAR
lines: STRING(32);
END_VAR
VAR_INPUT
info: STRING(32);
END_VAR
lines := CONCAT( info, ' ');//32 пробела
lines := REPLACE( lines, UINT_TO_STRING( mins/10), 1, ( 32-4));
lines := REPLACE( lines, UINT_TO_STRING( mins MOD 10), 1, ( 32-3));
lines := REPLACE( lines, ':', 1, ( 32-2));
lines := REPLACE( lines, UINT_TO_STRING( sec/10), 1, ( 32-1));
lines := REPLACE( lines, UINT_TO_STRING( sec MOD 10), 1, ( 32-0));
Write_Display( SINGLE_MODE, 0, 0, lines);
Филоненко Владислав
21.09.2010, 13:13
1. для 32 символьной строки надо задавать String(33).
1. для 32 символьной строки надо задавать String(33).
А чегож этот хваленый Кодесус с меганадежным языком программирования с маниакальным контролем типов и всего остального:
1) не ругается если сунуть в эту строку 32 символа
2) нормально показывает на экране все 32 символа
Кстати по F1
2847
Филоненко Владислав
21.09.2010, 15:39
вот именно, задает размер резервируемой памяти. а конец строки отмечается нулем.
вам просто повезло, что следующий байт в озу за строкой оказался нулевым.
вот именно, задает размер резервируемой памяти. а конец строки отмечается нулем.
вам просто повезло, что следующий байт в озу за строкой оказался нулевым.эээ т.е. вы утверждаете, что в документации кдс - ошибка, и пользоваться надо, как в с?
Филоненко Владислав
21.09.2010, 21:13
это не ошибка. там внутри во многих местах C. и строки сишные :)
это не ошибка. там внутри во многих местах C. и строки сишные :)Допустим.
Но в Паскале, Бейсике +1 байт на длину или терминатор добавляются автоматически. ST - паскалеподобный язык по очевидным причинам. И в прологовской документации сказано русским по белому, включая примеры, что на перменную из 6 букв = string[6] - Это ошибка???
со строками конечно непонятка возникла, но вернемся к плк63 с прошивкой 2.11.
буква э в правом нижнем углу кинескопа во время запуска( первые несколько секунд после включения питания) контроллера это нормально( т.е. так задуманно или может прошивка криво стала или еще чего.....)?
P.S. И про перемычечку расскажите что нибудь полезное http://www.owen.ru/forum/showthread.php?p=46608#post46608
так чегото картинка изредка дергается( нижняя правая часть строки).
все манипуляции с кинескопом через воттакуювот функцию
PROGRAM _UpdateScreen
VAR
_info: STRING(33) := 'zjcf84v-a84-91=40-2i5q0q';
ww: uint8;
END_VAR
VAR_INPUT
info: STRING(33);
FORCE: BOOL := FALSE;
END_VAR
IF( Get_Display_Mode() <> SINGLE_MODE) THEN Switch_To_Single_Mode();END_IF
info := CONCAT( info, ' ');
IF( info <> _info)OR( FORCE)THEN
_info := info;
Write_Display( SINGLE_MODE, 0, 0, info);
ww:=ww+1;
END_IF;
т.е. если будет обновление, то счетчик ww увеличится, однако он не меняется, а картинка изредка подергивается
Малышев Олег
22.09.2010, 14:11
пишете в дисплей не 1000 раз в секунду а хотя бы 25, а имхо и одного достаточно. подергивание происходит из за того что Pic который обслуживает дисплей становится плохо от интенсивного обмена по шине.
пишете в дисплей не 1000 раз в секунду а хотя бы 25, а имхо и одного достаточно. подергивание происходит из за того что Pic который обслуживает дисплей становится плохо от интенсивного обмена по шине.
Блин я ж написал что дисплей вообще не обновляется благобдаря вот этой вот строчке
IF( info <> _info)OR( FORCE)THEN
+ контрольный счетчик ww стоит как вкопанный.
Но это так косметика, не смертельно. Вот лучше бы по другим вопросам подсказали.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot