Автор | Сообщение |
|
Отправлено: 12.09.16 15:28. Заголовок: Соединить строку без Gather
Здравствуйте! Получаем строку от Кулмастера примерно такого вида: Stat3\x0D\x0A100 OFF 32C 30C Med Fan OK 0\x0D\x0A101 OFF 16C 26C Med Fan OK 0\x0D\x0A102 OFF 24C 25C Low Fan OK 0\x0D\x0A103 OFF 32C 29C Low Fan OK 0\x0D\x0A104 OFF 32C 28C Low Fan OK 1\x0D\x0A105 OFF 32C 29C Low Fan OK 0\x0D\x0A106 ON 32C 28C Low Fan OK 1\x0D\x0AOK\x0D\x0A>\x0D\x0A> Но по Comу он приходит поделенным на 3 куска зачастую. А задача стоит для всех шести кондиционеров снять значения температуры и вкл/выкл Можно это как-то соединить в одну строку?? Судя по всему gather здесь не поможет, потому что из-за возможности быть значению ON или OFF длина строки может измениться 6 символов. И очень вряд ли, но все же - когда температура станет меньше 10 градусов - тоже самое. Как можно поступить?
|
|
|
Ответов - 26
, стр:
1
2
All
[только новые]
|
|
|
Отправлено: 13.09.16 20:45. Заголовок: Igor пишет: выложит..
Igor пишет: цитата: | выложите код на обозрение соучастников. |
| я сделал проще CHANGE from_coolmaster { if (find("\x0D\x0A>\x0D\x0A>",from_coolmaster)>0) { coolmaster_stroka=from_coolmaster; if (formir_sms=0) { coolmaster_for_sms=from_coolmaster; } clearbuffer(from_coolmaster); } } и вот по тулбоксу вижу что у меня в строке кусок, что должен быть 28C Low Fan OK 1\x0D\x0AOK\x0D\x0A>\x0D\x0A> отображается вот так (...) а температуру и статус я вычленяю по вашему способу: PUSH send_sms { integer num; string status100[10], temperature100[10]; formir_sms=1; pos1=find("100",coolmaster_for_sms); print("pos1 %d", pos1); pos2=find(" ",coolmaster_for_sms,pos1+4); print("pos2 %d", pos2); pos3=find(" ",coolmaster_for_sms,pos2+1); num=pos3-pos2-2; temperature100=mid(coolmaster_for_sms,pos2+1,num); if (pos2-pos1=6) { status100=mid(coolmaster_for_sms,pos1+4,2); } else if (pos2-pos1=7) { status100=mid(coolmaster_for_sms,pos1+4,3); } итд 6 раз formir_sms=0; }
|
|
|
|
Отправлено: 13.09.16 20:58. Заголовок: Многоточие в дебагер..
Многоточие в дебагере означает что строка не может быть полностью отображена - не помещается. Возможно в дебагере ограничение скажем в 255 символов. Ситуация достаточно обычная. Я в таких случаях использую функцию которая делит строки выводимые в дебагер на требуемое количество символов (чаще всего использую 50 символов - так в экран помещается). Для удобства сделал еще дополнительное условие разделения строки по делиметру. Т.е. то условие которое наступит раньше и выполняется. Если встретились символы делиметра то перенос строки после них, в противном случае после 50 символов. И еще совет: Не пользуйтесь Print и Trace. Это функции которые выполняют свое предназначение исключительно по собственному желанию (по крайней мере у меня так). Может печатать, а может нет и т.п. В любой маломалький модуль s+ вставляю string_output с именем DEBUG$. Это текстовый выход по сути имеет приоритет на уровне программы и не может быть игнорирован (разве что время появления строки не всегда предсказуемо). В DEBUG$ и выводите свои диагностические сообщения используя функцию makestring(DEBUG$,.....) При желании пропускаете её через функцию деления строки, чтоб избежать появления (...)
|
|
|
|
Отправлено: 13.09.16 21:11. Заголовок: Вячеслав пишет: Не ..
Вячеслав пишет: цитата: | Не пользуйтесь Print и Trace. |
| у меня трэйс не всегда работает а в целом да, но сейчас работает вполне)) вроде все выполняется
|
|
|
|
Отправлено: 13.09.16 21:28. Заголовок: Что качается СМС то ..
Что качается СМС то модуль можно дополнить: DIGITAL_INPUT Send_SMS; STRING_OUTPUT to_SMSgate; PUSH Send_SMS { integer k; string power$[3]; for(k=min_hvac to max_hvac) { if(HVAC[k].POWER=1){power$="ON";}else{power$="OFF";} makestring(to_SMSgate,"Kond%u is %s, temperature %uC",k,power$,HVAC[k].t1); } } правда мне неведомо событие по которому это СМC должно отправляться, поэтому оставил на ваше усмотрение загнав в PUSH. Иначе это лавина СМС при каждом полинге шлюза
|
|
|
|
Отправлено: 13.09.16 21:39. Заголовок: Ну вы блин даете )) ..
Ну вы блин даете )) Тьфу на Вас. Или сам дурак. Надо склеить было просто, а я подумал разобрать. Ну ладно, потренировали извилины.
|
|
|
|
| постоянный участник
|
|
|
Отправлено: 14.09.16 01:03. Заголовок: Достаточно, вы далек..
Достаточно, вы далеко пойдёте, если вас вовремя не остановить.
|
|
|
Ответов - 26
, стр:
1
2
All
[только новые]
|
|