УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

[BugWrong] Проблема в DAQ.ModBus


Автор Сообщение
Сообщение создано: 24. 10. 2013 [10:19]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Случайно заметил, что контроллеры созданные в DAQ.ModBus и их параметры живут своей жизнью

по подробней:
1) я создал контроллер 22_cp с опросом 1 раз в 30 сек по TCP/IP и его параметр 22_SumParam с использованием шаблона
2) создал параметры для записи и чтения регистров

после того как скада заработала в паре с контроллером я увидел на
контроллере:
1) что время записи и опроса контроллера не постоянно, колеблется от 1 сек до 20 сек (должно быть ровно 30 сек)
2) иногда бывает случайная запись регистров на контроллер (произвольным значением). Когда я отключил запись регистров на контроллер (в скаде), регистры перестали изменяться (т.е. на них влияла скада, а не сам контроллер)
скаде:
1) в параметре 22_SumParam есть переменная, которая следит за временем опроса контроллера. Так вот, она должна изменяться если произошел опрос (т.е 1 раз в 30 сек), а реально она изменяется несколько раз в 30 сек примерно 5 или 6 раз, с произвольным интервалом.

Сообщение создано: 24. 10. 2013 [10:33]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

Случайно заметил, что контроллеры созданные в DAQ.ModBus и их параметры живут своей жизнью

У Вас может и живут, а у меня таких проблем нет.

"monia" wrote:

1) я создал контроллер 22_cp с опросом 1 раз в 30 сек по TCP/IP и его параметр 22_SumParam с использованием шаблона

Какое значение поля "Планирование опроса" а не абстрактное 1 раз в 30 сек?

"monia" wrote:

2) создал параметры для записи и чтения регистров

1) что время записи и опроса контроллера не постоянно, колеблется от 1 сек до 20 сек (должно быть ровно 30 сек)

С чего взяли, что колеблется?

"monia" wrote:

2) иногда бывает случайная запись регистров на контроллер (произвольным значением). Когда я отключил запись регистров на контроллер (в скаде), регистры перестали изменяться (т.е. на них влияла скада, а не сам контроллер) скаде:

Что пишете то и пишется, не верите, отслеживайте в отчёте запросов ModBus.

"monia" wrote:

1) в параметре 22_SumParam есть переменная, которая следит за временем опроса контроллера. Так вот, она должна изменяться если произошел опрос (т.е 1 раз в 30 сек), а реально она изменяется несколько раз в 30 сек примерно 5 или 6 раз, с произвольным интервалом.

Что здесь для этого контроллера?

Отметил как "Не ошибка", пока не воспроизведёте в ДемоБД, где такого и нигде на живых конфигурациях нет!

Learn, learn and learn better than work, work and work.
Сообщение создано: 24. 10. 2013 [11:06]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
тут дела такое
мое дело сообщить, а ваше принять решение

я говорю то что видел реально на контроллере
период опроса регистров не постоянен и в регистрах иногда появляются левые значения
если я отключаю скаду то в регистрах нет случайных данных.

Я к тому, что в моем проекте, значения из скады должны записываться в контроллер по команде (железно, кусок кода проверил), а они записываются без команды и в произвольное время со случайными значениями

JAVASCRIPT
using Special.FLibSYS;
 
if((vfReadMask)&&(pmaV1fA.isEVal() == false))
{
	vmaV1fA = pmaV1fA;
	vmaV1fB = pmaV1fB;
	vmaV1fC = pmaV1fC;
	vmaV1 = pmaV1;
 
	vmaV2fA = pmaV2fA;
	vmaV2fB = pmaV2fB;
	vmaV2fC = pmaV2fC;
	vmaV2 = pmaV2;
 
	vmaCH1 = pmaCH1;
	vmaCH2 = pmaCH2;
	vmaCO1 = pmaCO1;
	vmaCO2 = pmaCO2;
	vmaEssa = pmaEssa;
	vmaFire = pmaFire;
	vmaSecurity = pmaSecurity;
	vmaSGV = pmaSGV;
	vmaLPNotPS = pmaLPNotPS;
	vmaAVR = pmaAVR;
	vmaHeater = pmaHeater;
	vmaDGU = pmaDGU;
	vmaTorch1 = pmaTorch1;
	vmaTorch2 = pmaTorch2;
	vmaTorch3 = pmaTorch3;
	vmaDPmpsKK = pmaDPmpsKK;
	vmaPmp1KK = pmaPmp1KK;
	vmaPmp2KK = pmaPmp2KK;
	vmaPmp3KK = pmaPmp3KK;
	vmaPmp4KK = pmaPmp4KK;
	vmaPmp5KK = pmaPmp5KK;
	vmaDPmpsKO = pmaDPmpsKO;
	vmaPmp1KO = pmaPmp1KO;
	vmaPmp2KO = pmaPmp2KO;
	vmaPmp3KO = pmaPmp3KO;
	vmaCWS = pmaCWS;
	vmaPmp1CWS = pmaPmp1CWS;
	vmaPmp2CWS = pmaPmp2CWS;
 
	vmaT_EA = pmaT_EA;
	vmaT_prKK = pmaT_prKK;
	vmaT_obrKK = pmaT_obrKK;
	vmaT_prKO = pmaT_prKO;
	vmaT_obrKOv1 = pmaT_obrKOv1;
	vmaT_obrKOv2 = pmaT_obrKOv2;
	vmaT_obrKOv3 = pmaT_obrKOv3;
	vmaT_obrKOv4 = pmaT_obrKOv4;
	vmaT_obrKOv5 = pmaT_obrKOv5;
	vmaT_prKGVS = pmaT_prKGVS;
	vmaT_obrKGVSv1 = pmaT_obrKGVSv1;
 
	vmaP_prKK = pmaP_prKK;
	vmaP_obrKK = pmaP_obrKK;
	vmaP_prKO = pmaP_prKO;
	vmaP_obrKOv1 = pmaP_obrKOv1;
	vmaP_obrKOv2 = pmaP_obrKOv2;
	vmaP_obrKOv3 = pmaP_obrKOv3;
	vmaP_obrKOv4 = pmaP_obrKOv4;
	vmaP_obrKOv5 = pmaP_obrKOv5;
	vmaP_prKGVS = pmaP_prKGVS;
	vmaP_obrKGVSv1 = pmaP_obrKGVSv1;
 
	vmaLinkDstch = pmaLinkDstch;
	vmaLinkTh1SHU = pmaLinkTh1SHU;
	vmaLinkTh2SHU = pmaLinkTh2SHU;
	vmaLinkTh3SHU = pmaLinkTh3SHU;
	vmaLinkVit333 = pmaLinkVit333;
	vmaLinkVit100_1 = pmaLinkVit100_1;
	vmaLinkVit100_2 = pmaLinkVit100_2;
	vmaLinkVit100_3 = pmaLinkVit100_3;
	vmaLinkTh1SHUN1 = pmaLinkTh1SHUN1;
	vmaLinkTh2SHUN1 = pmaLinkTh2SHUN1;
	vmaLinkTh3SHUN1 = pmaLinkTh3SHUN1;
	vmaLinkTh4SHUN1 = pmaLinkTh4SHUN1;
	vmaLinkTh1SHUN2 = pmaLinkTh1SHUN2;
	vmaLinkTh2SHUN2 = pmaLinkTh2SHUN2;
 
//	vfReadMask = false;
 
	f_err = "0";
}
 
if((vfWriteMask)&&(pmaV1fA.isEVal() == false))  [b]// команда на запись регистров[/b]
{
	pmaV1fA = vmaV1fA;
	pmaV1fB = vmaV1fB;
	pmaV1fC = vmaV1fC;
	pmaV1 = vmaV1;
 
	pmaV2fA = vmaV2fA;
	pmaV2fB = vmaV2fB;
	pmaV2fC = vmaV2fC;
	pmaV2 = vmaV2;
 
	pmaCH1 = vmaCH1;
	pmaCH2 = vmaCH2;
	pmaCO1 = vmaCO1;
	pmaCO2 = vmaCO2;
	pmaEssa = vmaEssa;
	pmaFire = vmaFire;
	pmaSecurity = vmaSecurity;
	pmaSGV = vmaSGV;
	pmaLPNotPS = vmaLPNotPS;
	pmaAVR = vmaAVR;
	pmaHeater = vmaHeater;
	pmaDGU = vmaDGU;
	pmaTorch1 = vmaTorch1;
	pmaTorch2 = vmaTorch2;
	pmaTorch3 = vmaTorch3;
	pmaDPmpsKK = vmaDPmpsKK;
	pmaPmp1KK = vmaPmp1KK;
	pmaPmp2KK = vmaPmp2KK;
	pmaPmp3KK = vmaPmp3KK;
	pmaPmp4KK = vmaPmp4KK;
	pmaPmp5KK = vmaPmp5KK;
	pmaDPmpsKO = vmaDPmpsKO;
	pmaPmp1KO = vmaPmp1KO;
	pmaPmp2KO = vmaPmp2KO;
	pmaPmp3KO = vmaPmp3KO;
	pmaCWS = vmaCWS;
	pmaPmp1CWS = vmaPmp1CWS;
	pmaPmp2CWS = vmaPmp2CWS;
 
	pmaT_EA = vmaT_EA;
	pmaT_prKK = vmaT_prKK;
	pmaT_obrKK = vmaT_obrKK;
	pmaT_prKO = vmaT_prKO;
	pmaT_obrKOv1 = vmaT_obrKOv1;
	pmaT_obrKOv2 = vmaT_obrKOv2;
	pmaT_obrKOv3 = vmaT_obrKOv3;
	pmaT_obrKOv4 = vmaT_obrKOv4;
	pmaT_obrKOv5 = vmaT_obrKOv5;
	pmaT_prKGVS = vmaT_prKGVS;
	pmaT_obrKGVSv1 = vmaT_obrKGVSv1;
 
	pmaP_prKK = vmaP_prKK;
	pmaP_obrKK = vmaP_obrKK;
	pmaP_prKO = vmaP_prKO;
	pmaP_obrKOv1 = vmaP_obrKOv1;
	pmaP_obrKOv2 = vmaP_obrKOv2;
	pmaP_obrKOv3 = vmaP_obrKOv3;
	pmaP_obrKOv4 = vmaP_obrKOv4;
	pmaP_obrKOv5 = vmaP_obrKOv5;
	pmaP_prKGVS = vmaP_prKGVS;
	pmaP_obrKGVSv1 = vmaP_obrKGVSv1;
 
	pmaLinkDstch = vmaLinkDstch;
	pmaLinkTh1SHU = vmaLinkTh1SHU;
	pmaLinkTh2SHU = vmaLinkTh2SHU;
	pmaLinkTh3SHU = vmaLinkTh3SHU;
	pmaLinkVit333 = vmaLinkVit333;
	pmaLinkVit100_1 = vmaLinkVit100_1;
	pmaLinkVit100_2 = vmaLinkVit100_2;
	pmaLinkVit100_3 = vmaLinkVit100_3;
	pmaLinkTh1SHUN1 = vmaLinkTh1SHUN1;
	pmaLinkTh2SHUN1 = vmaLinkTh2SHUN1;
	pmaLinkTh3SHUN1 = vmaLinkTh3SHUN1;
	pmaLinkTh4SHUN1 = vmaLinkTh4SHUN1;
	pmaLinkTh1SHUN2 = vmaLinkTh1SHUN2;
	pmaLinkTh2SHUN2 = vmaLinkTh2SHUN2;
 
 
	vfWriteMask = false;
 
	f_err = "0";
}
if(pmaV1fA.isEVal() == true)
	f_err = "1: Ошибка чтения/записи масок";
else
	f_err ="0";


В принципе я эту проблему решил, путем увеличения времени опроса контроллера (с 30 сек увеличил до 5 мин), но это нехорошее решение :)

Я просто предлагаю тебе проверить, а вдруг если что. Ну если нет, так нет




[Сообщение редактировалось 1 раз(а), в последний раз 24.10.2013 в 11:09.]
Сообщение создано: 24. 10. 2013 [11:23]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

мое дело сообщить, а ваше принять решение

Какое решение если у меня нет проблемы?

"monia" wrote:

я говорю то что видел реально на контроллере

Проблема у Вас, разбирайтесь!

"monia" wrote:

период опроса регистров не постоянен и в регистрах иногда появляются левые значения
если я отключаю скаду то в регистрах нет случайных данных.

Если не путать запись с опросом то постоянный. Запись это синхронная функция, если не стоит флаг "Асинхронная запись"

Вы мне так и не ответили с чего взяли, что период опроса не постоянный и не привели строку статуса этой задачи!

"monia" wrote:

Я к тому, что в моем проекте, значения из скады должны записываться в контроллер по команде (железно, кусок кода проверил), а они записываются без команды и в произвольное время со случайными значениями

Ну так и разбирайтесь в своём скрипте почему он пишет не по команде и со случайными значениями.
Ещё раз повторяю, что такой проблемы в самом DAQ.ModBus нет нигде, значит это Ваша проблема!

"monia" wrote:

Я просто предлагаю тебе проверить, а вдруг если что. Ну если нет, так нет

Я и проверил, на Демо и в реальных задачах такой проблемы нет или Вы думаете у меня таких задач мало?

Learn, learn and learn better than work, work and work.



3526