PDA

Просмотр полной версии : ПЛК63 v1.89 10 0c проблемки...



pt200
13.09.2010, 10:50
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 - интересный эффект. Спасибо за его нахождение. проверим.

pt200
13.09.2010, 12:57
...
3) он не забывает, а отрабатывает заданное безопасное состояние выходов.
...
в проекте безопасное состояние по всем выходам 0, так что все таки вероятно что "забывает"( сейчас проверил 1й и 2й выхода забывает выключить, на 5м стоит 0.5 т.е. шим 0.5/1с. во время сброса все вырубается вроде, а потом при появлении надписи "овен", выхода активируются.).
если передернуть питание с нажатой старт/стоп то на всех выходах 0.

pt200
15.09.2010, 00:21
переодически плк меняет платформу(кодесус ругается). помогает передергивание питания.

Кстати в руководстве написано, что MinCycleLenght можно поставить 0, чтобы фоновым системным процессам полегчало, однако чего то не удается( минимум забит 1)

Elka
15.09.2010, 02:02
достаточно попытаться прогрузить проект ещё раз. два раза подряд платформу не меняет ;-)

Филоненко Владислав
15.09.2010, 10:29
просто ошибка связи. к сожалению, запрос платформы, в отличии от обычного обмена, не имеет функции самовосстановления при сбое.
просто повторите логин.

pt200
17.09.2010, 11:54
ух чего то сброс у вас накручен просто караул.
в случае серьезной ошибки решил перезапускать плкашку по сторожевому таймеру( кстати гдебы время уменьшить, а приходится ждать ~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-е реле (нз контакт) и при необходимости сброса включать его. быстрее невозможно.

ASo
17.09.2010, 14:11
в догонку еще вопрос.
0с - это версия прошивки Pic? когда наконец а) на экране перестанут проскакивать "фантомные" надписи (есть подозрение, что при смене значений на не выбранных в текущий момент экранах. б) будет нормальная работа с клавиатурой в меню (писк есть, клавиша не срабатывает или срабатывает дважды) ???

pt200
17.09.2010, 14:22
подключить питание через 1-е реле (нз контакт) и при необходимости сброса включать его. быстрее невозможно.
хитро придумано и надежно


в догонку еще вопрос.
0с - это версия прошивки Pic? когда наконец а) на экране перестанут проскакивать "фантомные" надписи (есть подозрение, что при смене значений на не выбранных в текущий момент экранах. б) будет нормальная работа с клавиатурой в меню (писк есть, клавиша не срабатывает или срабатывает дважды) ???
2829
Со встроенным меню даже не разбирался, это нада документацию читать :)

pt200
17.09.2010, 14:36
Еще по дисплею вопрос, если постоянно на экран в монопольном режиме выводить одну и туже информацию( не стирая его), иногда начинает промаргивать нижняя строка или часть?



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 );

ASo
17.09.2010, 14:46
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. А где .х ??

ASo
17.09.2010, 15:04
а раз в 50 мс перезаписывается 1 экран или все? не может так получаться, что поступает нсколько команд на перезапись экранов в одном цикле?зависит от изменений выводимых переменных. чтобы одновременно все 6-8 экранов + монопольный экран - такого не бывает. но чтобы в одном цикле 1-2 логический экран + монопольный экран - регулярно.
может ли это влиять на обработку клавиатуры?

ASo
17.09.2010, 15:07
кстати, о 2.12.
понятно, что на сайте экспериментальная версия. но в коммерческой приведите библиотеки в соответствие с заявленными функциями.

Elka
17.09.2010, 15:11
Как правильно одним ShowString или WriteDisplay обновить обе строки экрана, если это возможно? Дать в качестве параметра строку, которая в два раза больше строки ПЛК63? И ПЛК всё перенесёт сам? А то в одном цикле было натыкано много Show... Чуть ли не посимвольно местами выводил. А от моргания хочется избавиться...

Или надо в одном цикле одну строку, в другом (желательно через интервал) - вторую строку...

ASo
17.09.2010, 15:12
Как правильно одним ShowString или WriteDisplay обновить обе строки экрана, если это возможно? Дать в качестве параметра строку, которая в два раза больше строки ПЛК63? И ПЛК всё перенесёт сам?Нет. Остаток "исчезнет".

Филоненко Владислав
17.09.2010, 15:15
вообще перегружать контроллер - не очень хорошая идея. он сделан для работы, а не для перезагрузки :)

pt200
17.09.2010, 20:09
Как правильно одним ShowString или WriteDisplay обновить обе строки экрана, если это возможно? Дать в качестве параметра строку, которая в два раза больше строки ПЛК63? И ПЛК всё перенесёт сам? А то в одном цикле было натыкано много Show... Чуть ли не посимвольно местами выводил. А от моргания хочется избавиться...

Или надо в одном цикле одну строку, в другом (желательно через интервал) - вторую строку...
в позицию 0,0 загнать строку на 32 символа. Он сам все перенесет( 16+16).
Проверено в монопольном режиме.

pt200
17.09.2010, 22:28
С чем может быть связанна задержка открытия порта аж на минуту примерно??????

(*Óñòàíàâëèâàåì íàñòðîéêè 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 &#211;&#228;&#224;&#247;&#237;&#238; &#239;&#240;&#238;&#232;&#237;&#232;&#246;&#232;&#224;&#235;&#232;&#231;&#232;&#240;&#238;&#226;&#224;&#235;&#232;*)
RETURN;
END_IF;
...

pt200
18.09.2010, 11:42
отказался от "многозадачности". теперь секунд 10 думает перед открытием порта( уже терпимо, но хотелось бы понять, куда 10 сек деваются).
кстати и реакция у контроллера улучшилась

Филоненко Владислав
18.09.2010, 19:49
Чтобы порт открылся, необходимо, чтобы все его потребители, например драйвер slave, его отпустили. Для этого рассылается сообщение, что-о типа "Освободить порт для работы SysLibCom" :) В случае, если вся система перегружена сообщениями - соответствующее сообщение может запоздать.
Соответственно пока порт не освободят - порт не откроется.

Проект Ваш поврежден и я не могу посмотреть его на предмет почему такая нагрузка. Выложите его повторно, возможно в другом формате архиватора.

Однако, даже такой сложный и комплексный прибор как ТРМ133М всех модификаций не страдает задержками. Поэтому надо посмотреть в каком месте Вашего проекта проблема.
Существует несколько особенностей ПЛК63, при неправильном использовании производительность резко упадет.
Тем, у кого мерцает дисплей - не более 1 записи на экран за 50 мс.

pt200
18.09.2010, 19:58
Проект не заархивирован. достаточно переименовать файл в 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

pt200
20.09.2010, 18:33
:eek: нифигаб себе обновил прошивочку( до 2.11) называтся.
теперь время не обновляется в некоторых режимах работы(в отладчике видно что меняется).
Щас будете расказывать, про то что обновлять нада пореже.....
Но на старой то работала эта программа без вопросов!
:mad:

И чего теперь во время загрузки контроллера какое то "Э" на индикаторе ?

pt200
21.09.2010, 11:58
с отображением починил. чегото вы там со строками накрутили или в старой было недокрученно, а в новой подправили.


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).

pt200
21.09.2010, 13:25
1. для 32 символьной строки надо задавать String(33).

А чегож этот хваленый Кодесус с меганадежным языком программирования с маниакальным контролем типов и всего остального:
1) не ругается если сунуть в эту строку 32 символа
2) нормально показывает на экране все 32 символа

Кстати по F1
2847

Филоненко Владислав
21.09.2010, 15:39
вот именно, задает размер резервируемой памяти. а конец строки отмечается нулем.
вам просто повезло, что следующий байт в озу за строкой оказался нулевым.

ASo
21.09.2010, 16:10
вот именно, задает размер резервируемой памяти. а конец строки отмечается нулем.
вам просто повезло, что следующий байт в озу за строкой оказался нулевым.эээ т.е. вы утверждаете, что в документации кдс - ошибка, и пользоваться надо, как в с?

Филоненко Владислав
21.09.2010, 21:13
это не ошибка. там внутри во многих местах C. и строки сишные :)

ASo
21.09.2010, 21:27
это не ошибка. там внутри во многих местах C. и строки сишные :)Допустим.
Но в Паскале, Бейсике +1 байт на длину или терминатор добавляются автоматически. ST - паскалеподобный язык по очевидным причинам. И в прологовской документации сказано русским по белому, включая примеры, что на перменную из 6 букв = string[6] - Это ошибка???

pt200
21.09.2010, 21:35
со строками конечно непонятка возникла, но вернемся к плк63 с прошивкой 2.11.

буква э в правом нижнем углу кинескопа во время запуска( первые несколько секунд после включения питания) контроллера это нормально( т.е. так задуманно или может прошивка криво стала или еще чего.....)?

P.S. И про перемычечку расскажите что нибудь полезное http://www.owen.ru/forum/showthread.php?p=46608#post46608

pt200
21.09.2010, 22:16
так чегото картинка изредка дергается( нижняя правая часть строки).

все манипуляции с кинескопом через воттакуювот функцию


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 который обслуживает дисплей становится плохо от интенсивного обмена по шине.

pt200
22.09.2010, 14:15
пишете в дисплей не 1000 раз в секунду а хотя бы 25, а имхо и одного достаточно. подергивание происходит из за того что Pic который обслуживает дисплей становится плохо от интенсивного обмена по шине.

Блин я ж написал что дисплей вообще не обновляется благобдаря вот этой вот строчке

IF( info <> _info)OR( FORCE)THEN
+ контрольный счетчик ww стоит как вкопанный.

Но это так косметика, не смертельно. Вот лучше бы по другим вопросам подсказали.