УкраїнськаEnglishmRussian
Вхід/Новий
У темі багато повідомлень

[BugWrong] Работа со строками


Автор Повідомлення
Повідомлення створено: 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"
Делаю
JAVASCRIPT
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 делать. Вот мой кривой код, но работает.
JAVASCRIPT
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>, или ошибки.

Что-то значит делаете неправильно, всё это работает и проверено!
Контекстную помощь внимательно читайте, где видно, что можно и порядок регитров в составных типах данных указывать:
JAVASCRIPT
"R_i4:400,300:r" — получить int32 из регистров 400 и 300;


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



6576