Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 19 из 19

Тема: Работа с принтером (RS232)

  1. #11

    По умолчанию

    А при чём тут Modbus вообще?

  2. #12

    По умолчанию

    imaex,

    Modbus здесь ни причем, но как то нужно обозначить порт RS232 и к нему обратиться, я так понимаю, я жеж учусь...


    Все...разобрался, "покурил" литературу. Печатает, как нужно... Не туда копал, пардоньте

    Спасибо
    Последний раз редактировалось ShikuS; 10.08.2023 в 15:59.

  3. #13

    По умолчанию

    Доброй ночи!

    Подскажите, пожалуйста, настроил печать принтера через OwenCommunication, все хорошо печатает, но только одну строку (команду на принтер).
    Пишу в ST.
    Пробовал через несколько экземпляров обращаться к функции (пардоньте, если некорректно выражаюсь) OCL.UNM_SerialRequest и в этом случае можно отправить много данных (строк), либо через буфер - отправляю много строк, однако, когда все напечатается, я не могу повторно запустить функции с именами, которые выполнились ранее, т.е. к примеру:
    Код:
    VAR
    fbUS01: OCL.UNM_SerialRequest;
    ....
    fbUS09: OCL.UNM_SerialRequest;
    snd_str01: STRING := 'Привет мир 01!   $0D';
    ..
    snd_str09: STRING := 'Привет мир 09!   $0D';
    END_VAR
    
    fbUS01 (xExecute:=TRUE, hCom:=fbComControl.hCom, pRequest:=ADR(snd_str01), szRequest:=SIZEOF(snd_str01));
    ..
    fbUS09 (xExecute:=TRUE, hCom:=fbComControl.hCom, pRequest:=ADR(snd_str09), szRequest:=SIZEOF(snd_str09));
    Каждый экземпляр запускается один раз и перезапустить его условной кнопкой не получается.
    Может быть как то что-то сбросить (обнулить) нужно?

    Спасибо

  4. #14
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Добрый день.
    Вам достаточно одного экземпляра UNM_SerialRequest.

    При вызове передавайте на вход xExecute единичный импульс (например, выход R_TRIG), а на pRequest / szRequest указатель и размер буфера нужной в данный момент команды.

  5. #15

    По умолчанию

    Евгений Кислов,

    Спасибо,

    Попробовал несколько вариантов:

    1. Без триггера, xExecute:=TRUE
    Код:
    snd_str:= BufToPrint[10]; 
    fbUS(hCom:=fbComControl.hCom, pRequest:=ADR(snd_str),szRequest:=TO_UDINT(LEN(snd_str)));
    fbUS.xExecute:=TRUE; fbUS();
    
    fbUS(xExecute:=FALSE, hCom:=0, pRequest:=CAA.Constants.gc_hINVALID,szRequest:=CAA.Constants.gc_szZERO);
    При таком варианте строка данные отправляются на принтер, строка печатается, xExecute переходит в FALSE, но fbUS.xBusy после этого всегда остается TRUE, т.е. в порт (на печать) я отправить больше ничего не могу.

    2. с другой стороны попробовал печатать несколько строк и несколько разных вариантов все сделал внутри CASE:
    Код:
    CASE Sabstage OF
    	0:	IF fbComControl.xActive THEN
    			IF NOT TmrPrint1.Q AND //таймер задержки не запущен
    				NOT TIME_TO_BOOL(TmrPrint1.ET) 
    			THEN 
    				snd_str:= BufToPrint[Iterator];
    				fbUS(hCom:=fbComControl.hCom, pRequest:=ADR(snd_str),szRequest:=TO_UDINT(LEN(snd_str)));
    				fbUS.xExecute:=TRUE; fbUS(); // отправить данные в COM
    				TmrPrint1.IN:= TRUE; TmrPrint1(); //запуск таймера
    
    			ELSIF  TmrPrint1.Q THEN  //таймер задержки прошел
    				TmrPrint1(IN := FALSE, RS:=TRUE); // сброс таймера задержки
    				SabstageNN:=1;
      			END_IF 
    		END_IF
    
    	1:	Iterator:=Iterator+1;
    		SabstageNN:=0;	
    END_CASE
    вне (после) CASE стоит:
    Код:
    fbUS(xExecute:=FALSE, hCom:=0, pRequest:=CAA.Constants.gc_hINVALID,szRequest:=CAA.Constants.gc_szZERO);
    В таком случае все отрабатывает и в конце fbUS.xBusy переходит в FALSE, т.е. разрешает отправлять новые данные в порт.


    Вопрос, почему в первом случае не работает.
    Технически меня устраивает второй вариант, т.к. он мне сколько угодно строк и разными пачками напечатает, но хочется короче.

    Кроме прочего, если убираю строку:
    Код:
    fbUS(xExecute:=FALSE, hCom:=0, pRequest:=CAA.Constants.gc_hINVALID,szRequest:=CAA.Constants.gc_szZERO);
    ,
    то уже ничего не работает.
    Если, что либо или полностью перенести в ФБ или функцию - не работает, т.е. структура работает только в основной программе или объекте Actoin

    Спасибо,
    Последний раз редактировалось ShikuS; 15.08.2023 в 00:27.

  6. #16
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Вопрос, почему в первом случае не работает.
    Потому что ФБ UNM_SerialRequest выполняется асинхронно (в течение нескольких циклов задачи), и вы не даете ему отработать.

    Вызывать его экземпляр с xExecute:=FALSE нужно только после успешного завершения работы (fbUS.xDone) или завершения с ошибкой (fbUs.xError).

    Код:
    IF fbUS.xDone THEN
       // обработка ответа
       fbUS(xExecute:=FALSE, hCom:=0, pRequest:=CAA.Constants.gc_hINVALID,szRequest:=CAA.Constants.gc_szZERO);
    ELSIF fbUS.xError
       // обработка ошибки
       fbUS(xExecute:=FALSE, hCom:=0, pRequest:=CAA.Constants.gc_hINVALID,szRequest:=CAA.Constants.gc_szZERO);
    END_IF
    Кроме прочего, если убираю строку... то уже ничего не работает.
    Блок запускается по переднему фронту входа xExecute - то есть перед новым запуском (c xExecute := TRUE) нужно хотя бы на цикл вызвать его с xExecute := FALSE.

    Если, что либо или полностью перенести в ФБ или функцию - не работает, т.е. структура работает только в основной программе или объекте Actoin
    В функции действительно работать не будет - так как значения переменных функции не сохраняются между ее вызовами.
    В ФБ этот код перенести можно - но у вас, видимо, возникли с этим сложности.

  7. #17

    По умолчанию

    Евгений Кислов,

    Спасибо за комментарии

  8. #18

    По умолчанию

    Добрый день!

    Вернулся к работе с работой по RS232.

    Как ранее писал в теме: Печатается/ одна строка, в связи с чем взял рабочий пример, с сайта, Реализация стандартных протоколов: Пример к документу «Реализация нестандартных протоколов» (DCON, Пульсар-М), указал параметры порта.
    При работе отправляет несколько строк, но засчёт сброса ошибки и реинициализации, т.к. всегда идет ошибка TIMEOUT
    в фб OCL.UNM_SerialRequest параметр таймаут устанавливал разные значения (от T#1ms до 1S).
    При отправлении всегда ошибка TIMEOUT, xDone всегда FALSE
    При параметре timeout:=0 отрабатывает 1 раз, xBusy после отправки - становится TRUE и больше ничего не работает, т.к. не сбрасывается

    Порт открывается
    Код:
    fbComControl
    (
    	xEnable     := TRUE,
    	udiComPort  := 5,
    	udiBaudrate := 9600,
    	udiByteSize := 8,
    	eParity     := OCL.COM_PARITY.NONE,
    	eStopBit    := OCL.COM_STOPBIT.ONE
    );
    Фб для оправки данных на устройство:

    Код:
    fbUnmSerialRequest
    (
    	xExecute 	:= xExecute AND NOT(xWrongParameter),
    	tTimeout 	:= tTimeout,
    	hCom     	:= hCom,
    	pRequest	:= ADR(sRequest),
    	szRequest 	:= TO_UDINT(LEN(sRequest) ),
    	pResponse   := ADR(sResponse),
    	szResponse  := SIZEOF(sResponse),
    	xBusy       => xBusy
    );
    Ответ при отправлении на скрине (прикреплен)

    Так же из этого примера «Реализация нестандартных протоколов» (DCON, Пульсар-М) пробовал работать через библиотеку CAA. Результат работы с обеими библиотеками одинаков

    Что может быть или как это можно побороть?

    Спасибо,
    Изображения Изображения
    • Тип файла: png 0002.png (68.2 Кб, Просмотров: 9)
    • Тип файла: png 0003.png (92.5 Кб, Просмотров: 4)
    Последний раз редактировалось ShikuS; 22.12.2023 в 09:41.

  9. #19

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. ПЛК150 (TCP) - (RS232) NPort 5110 ( Ethernet) - (RS232) СП270
    от AvtCom в разделе Панели оператора (HMI)
    Ответов: 1
    Последнее сообщение: 02.12.2015, 17:43
  2. ПЛК150 (TCP) - (RS232) NPort 5110 ( Ethernet) - (RS232) СП270
    от AvtCom в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 29.11.2015, 17:52
  3. RS-232 -----RS-485-----RS232
    от mkv в разделе Сетевые технологии
    Ответов: 29
    Последнее сообщение: 08.08.2014, 12:41
  4. Rs232->ac3->ac4->pc(usb)
    от l33tit в разделе Подбор Оборудования
    Ответов: 7
    Последнее сообщение: 24.08.2010, 12:28
  5. Rs232 на плк
    от Ghost.70 в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 25.12.2009, 11:31

Метки этой темы

Ваши права

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