Показано с 1 по 10 из 964

Тема: Библиотека SmsOwenLib для работы с SMS в CODESYS v2.3

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    По умолчанию

    Библиотека прикрепленная к первому сообщению системы работает нормально. У меня все получилось.

    При работе с модемом ПМ01 на скорости 9600 (я думаю с любым модемом и на всех скоростях, ситуация примерно совпадает) наблюдается следующий эффект.
    Я попробовал отправлять сообщения каждую секунду, т.е. подавать передний фронт на вход SendSms функционального блока FB_SMS_SR раз в секунду.
    Получателю приходило только каждое восьмое сообщение.

    В моем проекте, события о которых нужно уведомлять по СМС могут происходить и чаще раза в 8 секунд, а допустить потерю данных нельзя.
    Я разработал функциональный блок QUEUE_STRING, реализующий очередь строк.
    Прикрепляю экспорт-файл с ФБ и выкладываю код функционального блока. Если кто-то заинтересуется, посмотрите, может найдутся ошибки которые я упустил.

    Код:
    FUNCTION_BLOCK QUEUE_STRING
    VAR_INPUT
    	ITEM_IN	:	STRING; (*Item that you need to enqueue*)
    	ENQUEUE	:	BOOL; (*On this front ITEM_IN will be enqueued*)
    	DEQUEUE	:	BOOL; (*On this front next item will be dequeued to ITEM_OUT*)
    	SIZE	:	BYTE := 10; (*Size of queue*)
    	RESET	:	BOOL;
    END_VAR
    VAR_OUTPUT
    	ITEM_OUT	:	STRING;
    	ERROR_CODE	:	WORD; (*0 - OK, 1 - overflow, 2 - queue is empty*)
    END_VAR
    VAR
    	data	:	ARRAY[0..255] OF STRING;
    	head	:	BYTE;
    	tail	:	BYTE;
    	count	:	BYTE;
    	R_TRIG_ENQUEUE	: R_TRIG;
    	R_TRIG_DEQUEUE	: R_TRIG;
    	R_TRIG_RESET		: R_TRIG;
    END_VAR
    Код:
    R_TRIG_ENQUEUE(CLK := ENQUEUE);
    R_TRIG_DEQUEUE(CLK := DEQUEUE);
    R_TRIG_RESET(CLK := RESET);
    
    IF R_TRIG_ENQUEUE.Q THEN
    	IF count < SIZE - 1 THEN
    		data[head] := ITEM_IN;
    		head := head + 1;
    		IF head = SIZE THEN
    			head := 0;
    		END_IF
    		count := count + 1;
    		ERROR_CODE := 0;
    	ELSE
    		ERROR_CODE := 1;
    	END_IF
    END_IF
    
    IF R_TRIG_DEQUEUE.Q THEN
    	IF count > 0 THEN
    		ITEM_OUT := data[tail];
    		tail := tail + 1;
    		IF tail = SIZE THEN
    			tail := 0;
    		END_IF
    		count := count - 1;
    		ERROR_CODE := 0;
    	ELSE
    		ERROR_CODE := 2;
    	END_IF
    END_IF
    
    IF R_TRIG_RESET.Q THEN
    	head := 0;
    	tail := 0;
    	count := 0;
    	ERROR_CODE := 0;
    END_IF
    Вложения Вложения
    Последний раз редактировалось 42ia; 21.05.2015 в 15:15.
    42 is the answer

Похожие темы

  1. Библиотека ModemOwenLib [ver. 3.5.2.7] для работы с модемом в CODESYS v3.5
    от Трофимов Артем в разделе ПЛК3xx (архив)
    Ответов: 140
    Последнее сообщение: 06.06.2018, 13:38
  2. Полноценная библиотека для работы модема ПМ01 с SMS
    от Алексей Сорокин в разделе Помощь Разработчикам
    Ответов: 8
    Последнее сообщение: 06.03.2015, 12:36
  3. Библиотека для работы с gprs
    от alexsaska в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 27.02.2015, 13:01
  4. Ответов: 2
    Последнее сообщение: 21.11.2014, 21:53
  5. Необходима библиотека работы с модемом в CoDeSyS v3
    от Александр123456 в разделе ПЛК3xx (архив)
    Ответов: 2
    Последнее сообщение: 22.01.2012, 13:16

Ваши права

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