Автор |
Сообщение |
Сообщение создано: 09. 09. 2011 [16:05]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
Переношу эту тему в другую категорию, поскольку она не имеет отношения к ошибкам, а скорее к изучению!
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 16. 01. 2013 [07:34]
|
Vorgehen
Артём Корниевский
Зарегистрирован(а) с: 08.07.2012
Сообщения: 20
|
Уважаемые Товарищи помогите, заклинило. Как убрать из строки пробел?
Строка "be b7", хочу получить "beb7"
Делаю
prtt=be b7
dap=prtt.substring(1,2); //получается be
fap=prtt.substring(3,4); //получается b7, далее хочу объеденить
drf=Special.FLibSYS.strInsert(dap,fap); // тут пишет ошибку "Вызвана функция "strInsert", но она не имеет IO возврата
хочется чтобы drf получилась beb7, но вот что-то не могу понять в чём ошибаюсь, с самого утра сижу, может мозги уже плывут?:bang:
|
Сообщение создано: 16. 01. 2013 [11:11]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
drf=prtt.substring(1,2)+prtt.substring(3,4);
или
drf=prtt.replace(3,1,"");
или
drf=prtt.replace(" ","");
[Сообщение редактировалось 1 раз(а), в последний раз 16.01.2013 в 13:37.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 17. 01. 2013 [19:38]
|
Vorgehen
Артём Корниевский
Зарегистрирован(а) с: 08.07.2012
Сообщения: 20
|
Спасибо большое Алмаз. Это то что нужно. Первый же вариант заработал успешно. Стояла задача считать вещественное из двух соседних регистров (прибор овен мв 110-224.4Тд), но старшие разряды оказались в младшем регистре, вот и пришлось javalikecalc делать. Вот мой кривой код, но работает.
stroka=Special.FLibSYS.strDec4Bin(SYS.Transport.Serial.out_tenz.messIO(Special.FLibSYS.strEnc2Bin("10 03 00 3e 00 02 a6 86")));
while(true)
{
stro=Special.FLibSYS.strDec4Bin(SYS.Transport.Serial.out_tenz.messIO(""));
if(!stro.length) break;
stroka+=stro;
}
sn0=stroka.substring(9,11);
sn1=stroka.substring(12,14);
sn2=stroka.substring(15,17);
sn3=stroka.substring(18,20);
sn01=sn0+sn1;
sn23=sn2+sn3;
snp0=sn01.toInt(16);
snp1=sn23.toInt(16);
nap=Special.FLibSYS.floatMergeWord(snp1,snp0);
Вообщем я получаю с тензодатчика значение, затем отправляю это значение в динамический пид регулятор, в котором вырабатывается регулирующее воздействие в %. Потом мне нужно передать это воздействие в частотник, но тут возникла очередная проблема. И модуль ввода(этот самый МВ11--224.4ТД) и частотник сидят на одном транспорте (Serial.). Настройки в приборах совпадают проверял 4раза. Может это латентность про которую в документации написано? Частотник у меня в модуле сбор данных/ modbus. А модуль ввода(мв110-224.4ТД) в сборе данных/javalikecalc объеденены они в контроллере логического уровня. Почему я подумал про то что они мешают друг другу? Потому-что они по отдельности работают, а вместе нет. То один не работает, то второй. Может написать в javalikecalc запись в частотник в этом же контроллере где модуль ввода? Или есть более простой выход?
Товарищи не осудите строго. Я не программист, а только учусь ещё у Вас. Поэтому все коды кривые и стянуты целыми кусками с форума:)
|
Сообщение создано: 17. 01. 2013 [23:28]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
Вам стоило прочитать два регистра штатными средствами модуля ModBus OpenSCADA и объединить их далее в ява (блочном вычислителе) с помощью Special.FLibSYS.floatMergeWord. Аналогично другие каналы измерения. Соответственно управление частотником сделать в одном контроллере модуля ModBus, что обеспечит бесконфликтное использование одной линии 485 на несколько овенов. Протокол-то ModBus у овенов вроде стандартный.
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 17. 01. 2013 [23:33]
|
Vorgehen
Артём Корниевский
Зарегистрирован(а) с: 08.07.2012
Сообщения: 20
|
Спасибо Алмаз. Не совсем стандартный протокол у модуля ввода. Точнее сказать там в модуле модбас получаются числа в огромной степени. Т.е. надо менять местами байты. Старший разряд флот32 в младшем регистре. Вот почему я в ява делал запрос. А сейчас с помощью ява же сформирую ответ (благо Вы с Романом уже обсудили и сделали алгоритм СRС16) и запишу в частотник. Надеюсь всё получится без конфликта.
|
Сообщение создано: 18. 01. 2013 [06:31]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
Имелось ввиду чтение двух регистров отдельно ("R:0x3E:r","R:0x3F:r"), без использования "R_f:0x3E:r" (получение вещественного из регистров 0x3E и 0x3F). Соответственно далее объединять можно в любом порядке:
nap=Special.FLibSYS.floatMergeWord(R_3E,R_3F);
nap=Special.FLibSYS.floatMergeWord(R_3F,R_3E);
Если нужно поменять байты двух прочитанных регистров местами перед выполнением Special.FLibSYS.floatMergeWord, то:
R_3E=256*(255&R_3E)+(R_3E>>8);
R_3F=256*(255&R_3F)+(R_3F>>8);
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 18. 01. 2013 [07:12]
|
Vorgehen
Артём Корниевский
Зарегистрирован(а) с: 08.07.2012
Сообщения: 20
|
Алмаз спасибо Вам за ответы. Пробовал такой способ. Читать регистры по отдельности. Пробова и с R_i и просто R. Получал <EVAL>, или ошибки.
|
Сообщение создано: 18. 01. 2013 [07:28]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
"RI:0x3E:r","RI:0x3F:r" не пробовали? R_i2 и R_i4 - несколько другое... Ещё "RI_i2:0x3E:r","RI_i2:0x3F:r" можно испытать...
[Сообщение редактировалось 2 раз(а), в последний раз 18.01.2013 в 07:38.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 18. 01. 2013 [08:42]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"Vorgehen" wrote:
Пробовал такой способ. Читать регистры по отдельности. Пробова и с R_i и просто R. Получал <EVAL>, или ошибки.
Что-то значит делаете неправильно, всё это работает и проверено!
Контекстную помощь внимательно читайте, где видно, что можно и порядок регитров в составных типах данных указывать:
"R_i4:400,300:r" — получить int32 из регистров 400 и 300;
Learn, learn and learn better than work, work and work.
|