Просмотр полной версии : Библиотека OwenNet.lib
Наблюдается непонятное поведение FB "OwenPoolMaster".
Конфигурация ПЛК150+МВА8
При попытке чтения каналов МВА8 с помощью библиотеки OwenNet.lib имеем ситуацию, показанную на прикрепленном рисунке.
С чем это связано? Неправильное использование библиотеки или её баг?
Филоненко Владислав
10.04.2009, 10:42
Код в студию!
Дело не в коде(по сути и кода то никакого нет).
Связано с настройками МВА8. Если вход МВА8 отключен в конфигураторе, то имеем на канале "мусор" (результат опроса предыдущего канала). Не смертельно конечно, но неприятно.
Как с помощью библиотеки считать с прибора строковые параметры, например, 'dev' или 'ver'?
Как с помощью библиотеки выставить команду 'APLY' для смены параметров сети?
Филоненко Владислав
14.04.2009, 11:28
Дело не в коде(по сути и кода то никакого нет).
Связано с настройками МВА8. Если вход МВА8 отключен в конфигураторе, то имеем на канале "мусор" (результат опроса предыдущего канала). Не смертельно конечно, но неприятно.
Вам надо анализировать код ошибки и если данные ликвидны, только тогда их использовать.
Видите на Вашем рисунке параметр complete==FALSE?
Это значит, что транзация не завершилась.
Иначе смотрите на поле Error и используйте результат, только если Error==0.
Хочу получать данные с ТРМов. ПЛК63
VAR
Settings:COMSETTINGS; (* настройки последовательного порта *)
COM_SERVICE1: COM_SERVICE;
OWPool : OwenPoolMaster;
ww: int16;
ScanParams: ARRAY[0..3] OF OwenPool :=
( every := T#1s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 30, AddrLen := A8BIT, Name := 'PV', Index := 16#FFFF, TimeOut := T#100ms),
( every := T#1s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 31, AddrLen := A8BIT, Name := 'PV', Index := 16#FFFF, TimeOut := T#100ms),
( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 30, AddrLen := A8BIT, Name := 'SP', Index := 16#FFFF, TimeOut := T#100ms),
( every := T#5s, IsRead := TRUE, EncodeType := OW_FL24, Addr := 31, AddrLen := A8BIT, Name := 'SP', Index := 16#FFFF, TimeOut := T#100ms);
END_VAR
(*Если COM-порт открыт, то переходим к приему и передачи данных *)
IF( NOT COM_SERVICE1.ready)THEN
(*Устанавливаем настройки COM-порта*)
Settings.Port:= 0; (*COM0 – RS485, COM1 – RS232, COM2 – ?? ???., COM3 - ?? ???., COM4 – RS232-Debug*)
Settings.dwBaudRate:=115200; (*скорость*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
COM_SERVICE1(Enable:= TRUE, Settings:=Settings , Task:=OPEN_TSK );
RETURN;
END_IF
(************************************************* ************************************************** *******************************************)
OWPool(
ENABLE := TRUE,
Count := ( SIZEOF( ScanParams)/SIZEOF( ScanParams[ 0])),
Pool := ADR(ScanParams[ 0]),
IsListen := FALSE,
ComHandle := Settings.Port);
IF( ScanParams[ 0].Complete)THEN
tank2.Temperature( ENABLE := TRUE, _val := REAL_TO_INT( ScanParams[ 0].ValReal));
ww:=ScanParams[ 0].error;
END_IF;
Получаю ошибки по таймауту.
ТРМ настроил вроде правильно, вкрайнем случае RS моргают, правда чегото значительно реже 1 раза в секунду.
МСД-100 сидящей на этой же шине в режиме шпиона( адр = 30, хеш = B8DF, индекс = 255), очень редко показывает( промаргивает) правильную температуру, в остальное время Ошибка(1)
P.S. Почему такое разнообразие( тут имена параметров и какойто индекс(16bit), в МСД-100 какойто хеш и какойто индекс(8 bit)да еще и формат регистра F24 не наблюдается :confused: :eek: )
обновил прошивку и таргет плк63 до 2.11, те же яйца, только вид сбоку.
2 овен: может посоветуете чегонить, время идет проект стоит.
Филоненко Владислав
20.09.2010, 16:24
для начала приведите лог снифера на порту и сам проект, чтобы можно было понять что происходит.
для начала приведите лог снифера на порту и сам проект, чтобы можно было понять что происходит.
переименовать в cip.pro и все.
а с логом щас подумаю( непростая задача или можно както средствами CоDeSys лог снять?).
// оба ТРМ включенны
000001 17:51:34.875 23 48 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 #HUHGROTVNQOP.#H
000002 17:51:34.906 55 47 4A 52 4F 54 56 4B 48 52 47 51 56 4F 50 54 UGJROTVKHRGQVOPT
000003 17:51:34.906 54 0D T.
000004 17:51:35.968 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000005 17:51:35.968 56 47 4A 52 4F 54 56 4B 48 52 4A 50 47 4F 54 50 VGJROTVKHRJPGOTP
000006 17:51:35.968 4A 0D J.
000007 17:51:37.046 23 48 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 #HUHGROTVNQOP.#H
000008 17:51:37.062 55 47 4A 52 4F 54 56 4B 48 52 47 54 53 4E 56 4E UGJROTVKHRGTSNVN
000009 17:51:37.062 47 0D G.
000010 17:51:38.125 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000011 17:51:38.125 56 47 4A 52 4F 54 56 4B 48 52 4A 50 47 4F 54 50 VGJROTVKHRJPGOTP
000012 17:51:38.125 4A 0D J.
000013 17:51:39.218 23 48 55 48 47 50 48 47 4E 4B 48 47 50 0D 23 48 #HUHGPHGNKHGP.#H
000014 17:51:39.218 55 47 4A 47 49 4A 4A 4A 48 50 48 47 4E 53 53 48 UGJGIJJJHPHGNSSH
000015 17:51:39.218 4A 0D J.
000016 17:51:40.281 23 48 56 48 47 50 48 47 4E 4E 52 56 4E 0D 23 48 #HVHGPHGNNRVN.#H
000017 17:51:40.296 56 47 4A 47 49 4A 4A 4A 48 50 48 47 4E 51 56 54 VGJGIJJJHPHGNQVT
000018 17:51:40.296 47 0D G.
000019 17:51:41.359 23 48 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 #HUHGROTVNQOP.#H
000020 17:51:41.390 55 47 4A 52 4F 54 56 4B 48 52 47 54 53 4E 56 4E UGJROTVKHRGTSNVN
000021 17:51:41.390 47 0D G.
000022 17:51:42.437 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000023 17:51:42.453 56 47 4A 52 4F 54 56 4B 48 52 4A 4D 49 4D 47 4C VGJROTVKHRJMIMGL
000024 17:51:42.453 4D 0D M.
000025 17:51:43.546 23 48 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 #HUHGROTVNQOP.#H
000026 17:51:43.546 55 47 4A 52 4F 54 56 4B 48 52 47 54 53 4E 56 4E UGJROTVKHRGTSNVN
000027 17:51:43.546 47 0D G.
// 31 ТРМ отключен
000001 18:22:44.234 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000002 18:22:44.328 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 55 47 UHGROTVNQOP.#HUG
000003 18:22:44.359 4A 52 4F 54 56 4B 48 52 48 50 48 51 47 47 49 0D JROTVKHRHPHQGGI.
000004 18:22:45.406 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000005 18:22:45.500 55 48 47 50 48 47 4E 4B 48 47 50 0D 23 48 55 47 UHGPHGNKHGP.#HUG
000006 18:22:45.531 4A 47 49 4A 4A 4A 48 50 48 47 4E 53 53 48 4A 0D JGIJJJHPHGNSSHJ.
000007 18:22:46.578 23 48 56 48 47 50 48 47 4E 4E 52 56 4E 0D 23 48 #HVHGPHGNNRVN.#H
000008 18:22:46.671 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 55 47 UHGROTVNQOP.#HUG
000009 18:22:46.687 4A 52 4F 54 56 4B 48 52 48 50 48 51 47 47 49 0D JROTVKHRHPHQGGI.
000010 18:22:47.750 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000011 18:22:47.843 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 55 47 UHGROTVNQOP.#HUG
000012 18:22:47.859 4A 52 4F 54 56 4B 48 52 48 50 48 51 47 47 49 0D JROTVKHRHPHQGGI.
000013 18:22:48.921 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000014 18:22:49.015 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 55 47 UHGROTVNQOP.#HUG
000015 18:22:49.031 4A 52 4F 54 56 4B 48 52 48 50 48 51 47 47 49 0D JROTVKHRHPHQGGI.
000016 18:22:50.093 23 48 56 48 47 52 4F 54 56 4B 47 4E 4E 0D 23 48 #HVHGROTVKGNN.#H
000017 18:22:50.187 55 48 47 52 4F 54 56 4E 51 4F 50 0D 23 48 55 47 UHGROTVNQOP.#HUG
000018 18:22:50.203 4A 52 4F 54 56 4B 48 52 48 4B 53 4D 56 47 52 0D JROTVKHRHKSMVGR.
Неясно почему посылается 1 запрос в секунду, хотя по настройкам минимум 2 должен посылать????????????
Кстати у вас даже в доках примеры для, наверное, старых либов "RealType:=FLOAT24 , (*тип параметра, значение которого
считываем*)". Потомучто в тех что идут на диске типа FLOAT24 нет, есть OW_FL24
Филоненко Владислав
20.09.2010, 18:59
Ow_fl24 - наверное расшифровывается как Owen Float24. код завтра посмотрю
Ага сам нешел.
оказывается если поставить MinCycleLenght побольше( чтобы системе жилось полегче). Нифига не работает.
Если поставить 1 то и порт сразу открывается и опрос пошел правильный.
Я в очередной раз в шоке.
Филоненко Владислав
21.09.2010, 14:55
ну так ясно же, что при периоде вызова задачи 30 мс и таймауте 50 мс таймаут наступит всегда, т.к. мастеру нужно как минимум 2 вызова для обработки, а это 60 мс. 60>50, т.е. таймаут.
Во время экспериментов я таймаут 100мс ставил и 1секунду. НЕ РАБОТАЛО.
т.е. если MinCycleLenght = 30, то нифига не работает с разумными таймаутами( и даже не очень). О как!
о еще вопросик. как при необходимости расширять пул.
т.е. иногда( не переодически) будет возникать необходимость отправить кому то какие то значения.
Филоненко Владислав
21.09.2010, 20:20
добавите в конец массива новый элемент и временно увеличите размер массива в функции опроса.
или вставите опрос индивидуально
добавите в конец массива новый элемент и временно увеличите размер массива в функции опроса.
или вставите опрос индивидуально
т.е. параметр Count можно менять на ходу, абсолютно ни с чем не синхронизируя и функция при этом будет работать как надо?
P.S. И про перемычечку расскажите что нибудь полезное http://www.owen.ru/forum/showthread.php?p=46608#post46608
Огромное количество ошибок связи. Больше половины из них 39е( CRC), остальные 65535( TimeOut). При незначительном увеличении нагрузки на ПЛК, количество ошибок значительно увеличивается.
В сети ПЛК63 + 2х ТРМ201 + МСД-100( соединенны паровозиком)
P.S. Два резистора по 100 Ом на концах стоят. Но тут и так линия метр от силы. Помех от силовых приборов нету.К сожалению нет осцилла, чтобы глянуть что там творится. Хотя если количество ошибок зависит от нагрузки проца, то дело наверное не в проводах :confused:
Походу дела теряет байты.
Снизил скорость до 9600, все отлично стало( всмысле ошибок нет)
Кстати на такой скорости и функция стала работать правильно, т.е. не меняет значения ValReal во всех каналах одновременно.
Но хотелось бы скорости и ясности в данном вопросе, всего и побольше.
Филоненко Владислав
22.09.2010, 14:18
надо смотреть что на линии происходит
Малышев Олег
22.09.2010, 14:30
почитал переписку - очередной раз в шоке(с). а не многовато ли мастеров на шине - должен быть один. рекомендую режим прослушивания линии. как это сделать даже не знаю
Мастер один: ПЛКашка
МСД шпионит
ну а ТРМы с рождения мастерить не умеют
И при чем здесь линия если загрузка проца на количество ошибков влияет?
А еще и ValReal во всех каналах обновляться начинают одновременно на скорости 115200, а на 9600 все нормально( до проводов даже не дотрагивался).
Малышев Олег
23.09.2010, 08:30
попробуйте поставить таймаут на каждую переменную 500мс вместо 100.
Так делать можно( на горячую подменять пул и его размер), если нельзя, то как правильно?
CASE( PoolType)OF
0:
OWPool(
ENABLE := TRUE,
Count := 5,(*( SIZEOF( ScanParams)/SIZEOF( ScanParams[ 0])),*)
Pool := ADR( ScanParams[ 0]),
IsListen := FALSE,
ComHandle := Settings.Port);
8..14:
OWPool(
ENABLE := TRUE,
Count := 3,
Pool := ADR( ScanParams[ 5]),
IsListen := FALSE,
ComHandle := Settings.Port);
IF( ScanParams[ 5].Complete)THEN PoolType := PoolType OR 1;END_IF
IF( ScanParams[ 6].Complete)THEN PoolType := PoolType OR 2;END_IF
IF( ScanParams[ 7].Complete)THEN PoolType := PoolType OR 4;END_IF
RETURN;
15:
OWPool(
ENABLE := TRUE,
Count := 1,
Pool := ADR( ScanParams[ 8]),
IsListen := FALSE,
ComHandle := Settings.Port);
IF( ScanParams[ 8].Complete)THEN PoolType := 0;END_IF
RETURN;
ELSE
task_Main_ERROR( info := 'óïñ...task_Comm_RS_485_1');
RETURN;
END_CASE;
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot