Страница 6 из 6 ПерваяПервая ... 456
Показано с 51 по 59 из 59

Тема: опрос по эксплуатации пм01

  1. #51

    По умолчанию

    Надо переконфигурировать программу или Opc. Что у вас там установлено никто не угадает.

  2. #52

    По умолчанию

    Добрый день!
    Столкнулся со следующей ситуацией. Последовательно отправляю в модем команды и проверяю ответ. Команды простые - AT, чтение/удаление/отправка сообщений. Очень часто, от модема ответа не получаю. Причем на команды, AT, AT+CMGL, AT+CMGD, на которую приходит ответ "OK", получаю в 90-95% случаев, то на AT+CMGS и собственно, результат самой отправки, в буфер ответ приходит в 20-30% случаев, хотя команды успешно проходят, что проверяю переподключением модема к терминалу, ну либо получением самого сообщения на телефон. Буфер же при этом остается девственно чист, хотя время задержки на чтение буфера поднимал до одной минуты. Скорость модема стоит на 115200, но сомневаюсь, что это может давать какое-либо влияние. Пробовал кучу вариантов и очисткой буфера после каждой команды и чтение буфера побайтно и десятки байт (хотя глупо, но уже варианты исчерпались). Ставил задержки между отправкой команды и чтением от нуля до десятков секунд. С чем это может быть связано? Может у кого то была похожая проблема?

    Да и подключение использую RS-232 в связке с СПК107. На 485-м не тестировал, так как он будет занят другим соединением.
    Последний раз редактировалось energvk; 04.03.2016 в 15:45.

  3. #53

    По умолчанию

    Появилась мысль: может быть так, что так как у меня запись команды и чтение происходит в разных циклах, то модем отвечает до того момента как плк начинает чтение буфера и , соответственно, теряет ответ? или это бред?

  4. #54
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

    это Вы пишите про исползование библиотеки или самостоятельное творение?
    Ставил задержки между отправкой команды и чтением
    тут что имелось ввиду? надеюсь задержка это таймаут от отправки команды, после которого бесполезно ждать ответ, а не пауза после которой начинаете слушать ответ
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #55

    По умолчанию

    Самостоятельное творение (библиотеки то закрытые, внутрянку не увидишь), не нравилось как бибка работала, решил написать часть функциональности сам. Имелось ввиду таймаут, после которого бесполезно ждать ответ, так как чтение ответа в принципе начинаю сразу же после отправки команды (в следующем цикле). Доберусь до компа - скину код

  6. #56

    По умолчанию

    Сначала я использовал пример с диска для обмена с модемом, когда понял, что есть проблемы, переработал программу

    Код:
    	SMS_CMD_PDU:
    		otvet1:=''; len_otv:=0; //buf_otvet:='';
    		buf_cmd:=ADR(cmd_pdu); len_cmd:=LEN(cmd_pdu);
    		byte_wryte:=SysComWrite(modem_handle, buf_cmd, INT_TO_UDINT (len_cmd), 0, SysComRes);
    		IF byte_wryte=INT_TO_UDINT (len_cmd) THEN send_stat:=SMS_PDU; END_IF
    		
    	SMS_PDU:	//отправка команды на передачу сообщения (количество байт, передаваемых в формате pdu)
    		byte_read:=SysComRead(modem_handle, ADR(buf_otvet), 6, 0, SysComRes);
    		IF byte_read>0 THEN
    		otvet1:=CONCAT(otvet1, LEFT(buf_otvet, UDINT_TO_INT (byte_read)));
    		//otvet1:=buf_otvet;
    		len_otv:=LEN (otvet1);
    			IF (FIND(otvet1, otv_ready)>0) AND timer.ET > delay THEN			//если ошибок нет, то можно обрабатывать принятую информацию и делать новый запрос
    			send_stat:=SMS_CMD_TXT;												//то можно делать новый запрос
    			repead_count:=0;												//сбрасываем количество повторов и обнуляем ответ					
    			END_IF
    		END_IF
    	
    		IF timer.ET > ojid1 THEN
    		repead_count:=repead_count+1;											//считаем количество попыток
    			IF repead_count>repeads THEN										//если все попытки исчерпаны
    			code_err:=3;															//ошибка чтения сообщений
    			send_stat:=SMS_ERR;														//в блок ошибки
    			ELSE
    			send_stat:=SMS_CMD_PDU; 								//повторяем попытку
    			END_IF
    		otvet1:='';
    		END_IF
    
    	SMS_CMD_TXT:
    		otvet2:=''; len_otv:=0;// buf_otvet:='';
    		buf_cmd:=ADR(cmd_txt); len_cmd:=LEN(cmd_txt);
    		byte_wryte:=SysComWrite(modem_handle, buf_cmd, INT_TO_UDINT (len_cmd), 0, SysComRes);
    		IF byte_wryte=INT_TO_UDINT (len_cmd) THEN send_stat:=SMS_TXT; END_IF
    
    	SMS_TXT: //отправка смс-сообщения
    		byte_read:=SysComRead(modem_handle, ADR(buf_otvet), 8, 0, SysComRes);
    		IF byte_read>0 THEN
    		otvet2:=CONCAT(otvet2, LEFT(buf_otvet, UDINT_TO_INT (byte_read)));
    		//otvet2:=buf_otvet;
    		//len_otv:=LEN (otvet2);
    			IF (FIND(otvet2, otv_sended)>0) AND timer.ET > delay THEN			//если ошибок нет, то можно обрабатывать принятую информацию и делать новый запрос
    			send_stat:=SMS_DONE;												//то можно делать новый запрос
    			repead_count:=0;												//сбрасываем количество повторов и обнуляем ответ
    
    			ELSIF FIND(otvet2, otv_err)>0 AND timer.ET > delay THEN						//если ошибка отправки, пытаемся выполнить повторно
    						send_stat:=SMS_CMD_RST;
    			END_IF
    		END_IF
    	
    		IF timer.ET > ojid2 THEN
    		code_err:=4;																	//ошибка отправки сообщения
    		send_stat:=SMS_ERR;																//в блок ошибки
    		otvet2:='';																		//обнуляем ответ
    		END_IF
    Но так как ответ на эти две команды обычно продолжительный, то при цикле в 10 мс, что-то потерять мне кажется нереально. Единственно, что думаю может буфер маловат (STRING(8)), но опять же на AT+CSMS ответ максимум 6 символов. В общем не знаю...

    В итоге сделал тупо отправку без считывания подтверждения, работает отлично и с групповой отправкой (т.е. 3-4 сообщения подряд спокойно отправляется), но как то неправильно это

  7. #57
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

    не проверял код на плк, но помоему Вы зря считаете что на ответы хватает 6-8 символов, там в некоторых командах идет куча скрытых символов типа перевода строки, поэтому ОК просто можете не захватывать. Ну и еще бы посоветовал полностью вычитывать приемный аппаратный буффер, а не фиксированное количество байт, возможно при повторной команде сперва выталкиваются остатки от предыдущих оттветов
    Бибка для КДС 2.3 через UMD работать начинает как раз с минВЦ от 10мс, хотя для трешки может быть и на самом деле не принципиально
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #58

    По умолчанию

    но помоему Вы зря считаете что на ответы хватает 6-8 символов, там в некоторых командах идет куча скрытых символов типа перевода строки
    То же так кажется, увеличил, проверю

    еще бы посоветовал полностью вычитывать приемный аппаратный буффер
    Ммм... Что вы имеете ввиду? Да и команды все нормально проходят, с ними вроде как нет проблем. Про минВЦ в 2.3 знаю, в трешке вроде не писали ничего, да я и варьировал и 10 и 20 и 50, разницы не заметил.

  9. #59

    По умолчанию

    Увеличение размера буфера и ответа решило проблему.

Страница 6 из 6 ПерваяПервая ... 456

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •