Страница 6 из 7 ПерваяПервая ... 4567 ПоследняяПоследняя
Показано с 51 по 60 из 61

Тема: Свободное чтение RS-485

  1. #51
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от Raikkonen Посмотреть сообщение
    Ну в целом да, получается это очередь а не стек.
    А как тогда мне лучше производить чтение чтобы получать данные ближе к последним?
    В одном цикле можно делать много чтений?
    типа:
    Код:
    while SysComRead(com_settings.Port,ADR(buffer[1]),50,0) > 0 do
      (*не важно какая обработка*)
    end_while
    ??
    У вас дозирование. Вам надо реагировать на изменение веса как можно чаще. Это при взвешивании, можно себе позволить небольшую паузу.
    Выделяйте для обмена отдельный поток, с минимальным временем цикла там только опрашивайте, и присваивайте глобальную переменную: "текущая масса". Если не успеваете, надо взять процессор помощнее или снизить частоту посылок. Чем чаще вы узнаете вес при дозировании, тем лучше.

    Цитата Сообщение от Raikkonen Посмотреть сообщение
    (*не важно какая обработка*)
    Важно. Тут максимум - string -> int.
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  2. #52

    По умолчанию

    Кратко и по существу

  3. #53
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Чаще чем всё - не получится, но тута это не нужно - как-нить/что-нить выдернуть и так пойдет. Говорилось. Угрожали забанить ))
    А все и не надо. Необходимо, что бы время реакции системы было в 2-3 раза больше, чем поток дозирования в отношении к допустимой точности дозирования.
    Цитата Сообщение от Валенок Посмотреть сообщение
    Здесь их нет если только не про задачи, но манипуляции с кнопочками калькулятора подсказывают что и без всяких задач - без проблем. Даже всё, несмотря на.
    Задачи запускаются отдельным потоком.
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  4. #54
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Чаще чем всё - не получится, но тута это не нужно - как-нить/что-нить выдернуть и так пойдет. Говорилось. Угрожали забанить ))
    А все и не надо. Необходимо, что бы время реакции системы было в 2-3 раза больше, чем поток дозирования в отношении к допустимой точности дозирования.
    Цитата Сообщение от Валенок Посмотреть сообщение
    Здесь их нет если только не про задачи, но манипуляции с кнопочками калькулятора подсказывают что и без всяких задач - без проблем. Даже всё, несмотря на.
    Задачи запускаются отдельным потоком.
    Цитата Сообщение от Валенок Посмотреть сообщение
    Лично я не совсем тут понял - что это.
    Чаще всего, весовые терминалы отправляют "plain" данные, в виде строки.
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  5. #55
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Разброд и шатания :

    или
    ?
    Вы не чувствуете разницы между "как можно чаще" и "все"? Или у вас "разброд и шатание" сегодня?
    Чем чаще вы снимаете данные с АЦП тензодатчика (ограничено скоростью преобразования АЦП), чем чаще вы получите данные в контроллере, и тем быстрее сможете отреагировать на заданный вес (ограничено скоростью контроллера, временем срабатывания исполнительных устройств, количеством материала, который уже невозможно остановить).
    Конечно, если дозировать 2гр/мин при допустимой точности в +/-2 кг, можно и не торопиться. В дозу попадём. Видимо вы в таких условиях и работаете. Но у меня скорости дозирования выше. А так же требования к точности.



    Цитата Сообщение от Валенок Посмотреть сообщение
    Это - напрягает.
    И вы уже в курсе "допустимой точности дозирования" ?
    Где здесь потоки ?
    Написал чуть выше, поток в моем примере - 2гр/мин, точность +/- 2 кг. Я считаю, что разбираюсь, пишите аргументы, если не согласны.

    Цитата Сообщение от Валенок Посмотреть сообщение
    Тут не нужно гадать - "максимум","чаще всего" и т.п. Тут всё чётко:
    Вы видимо много пенистого взяли. )


    Цитата Сообщение от Валенок Посмотреть сообщение
    и что там в данных вроде как пофиг
    16 байт данных - там актуальное значение веса. Вы думаете Int (float) 16 байт занимает или string?
    Цитата Сообщение от Валенок Посмотреть сообщение
    Где здесь потоки ?
    Как вы думаете на контроллерах реализуются несколько "задач" с разными циклами?
    Последний раз редактировалось keysansa; 02.07.2022 в 22:20.
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  6. #56

    По умолчанию

    Тема превращается во флуд, пора закрывать!!! Нельзя принимать/обрабатывать данные чаще чем они приходят!!! Скорость 115200 размер пакета 22 байта - итого пакет отправляется/принимается за 2 мс, а ещё между пакетами по-любому есть время тишины. Так что 5 мс цикл программы решает все проблем!!! А в 110/160 в 5 мс можно запихнуть огого!!!!
    Тема закрыта!

  7. #57
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от Samel Посмотреть сообщение
    Тема превращается во флуд, пора закрывать!!! Нельзя принимать/обрабатывать данные чаще чем они приходят!!! Скорость 115200 размер пакета 22 байта - итого пакет отправляется/принимается за 2 мс, а ещё между пакетами по-любому есть время тишины. Так что 5 мс цикл программы решает все проблем!!! А в 110/160 в 5 мс можно запихнуть огого!!!!
    Тема закрыта!
    То, что вы не понимаете, что тут обсуждается, не значит, что это флуд.
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  8. #58

    По умолчанию

    Цитата Сообщение от Raikkonen Посмотреть сообщение
    Добрый день всем!
    Имею устройство, которое 24/7 без смс и регистрации отправляет по 485 портику на скорости света 115200 посылку вида:

    байт FF
    байт 03 (типа его адрес)
    байт CC (типа функция)
    16 байт данных
    байт контрольной суммы CRC
    байт FF
    байт FF

    итого 22 байта.

    я уже все это получаю и разбираю следующим кодом:

    Код:
    PROGRAM com_read_prg
    VAR
    	com_settings: COMSETTINGS;
    	com_service_fb: COM_SERVICE;
    	com_port_num: PORTS := 0;
    	com_port_ready: BOOL;
    
    	bytes_read: DWORD;
    	buffer: ARRAY [1..50] OF BYTE;
    	package: ARRAY [1..22] OF BYTE;
    	p_pointer: POINTER TO ARRAY [1..22] OF BYTE;
    	i,ii: INT;
    	weight: weight_package;
    	p1: POINTER TO BYTE;
    END_VAR
    
    
    IF com_service_fb.ready=FALSE THEN
    	com_settings.Port:=com_port_num;
    	com_settings.dwBaudRate:=115200;
    	com_settings.byParity:=0;
    	com_settings.dwTimeout:=0;
    	com_settings.byStopBits:=0;
    	com_settings.dwBufferSize:=0;
    	com_settings.dwScan:=0;
    	com_service_fb(Enable:=TRUE, Settings:=com_settings, Task:=OPEN_TSK);
    	com_port_ready:=FALSE;
    ELSE
    	com_service_fb.Enable:=FALSE;
    	com_port_ready:=TRUE;
    END_IF
    
    IF com_port_ready THEN
    	bytes_read := SysComRead(com_settings.Port,ADR(buffer[1]),50,0);   (*каждый цикл читаем 50 байт данных потому что в них я точно найду нужные мне 22 байта*)
    	IF bytes_read > 0 THEN (*если что-то нашли*)
    		FOR i:=1 TO 28 DO (*то начинаем искать совпадение*)
    			IF (buffer[i] = 16#FF) AND (buffer[i+1] = 16#03) AND (buffer[i+2] = 16#CC) AND      (*не парюсь ищу совпадение по началу и концу которые всегда одинаковые*)
    			    (buffer[i+20] = 16#FF) AND (buffer[i+21] = 16#FF) THEN
    				p_pointer := ADR (buffer[i]);     (* если нашли то при помощи указателя*)
    				package := p_pointer^;             (*копируем найденное в массив ровно на 22 байта, это я потом чтобы контрольную сумму считать*)
    
    				p1 := ADR(weight.ch1);   (* weight - это структура тупо из 8 UINT, поэтому я свой массив перевожу в уинт чтобы далее его использовать*)
    				FOR ii:=4 TO 19 DO  
    					p1^ := package[ii];
    					p1 := p1+1;
    				END_FOR
    
    				EXIT;
    			END_IF
    
    		END_FOR
    	END_IF
    END_IF
    И у меня возникло несколько вопросов:
    1. Так как скорость 115200, я думаю считывая по 50 байт каждый цикл (50 мсек), мне кажется рано или поздно случится переполнение буфера?

    Я не очень понимаю как этот буфер устроен.
    2. Не понимаю - я читаю данные из конца или из начала этого буфера?
    3. Вроде как прочитанные данные из буфера стираются, это так или не очень?

    Анализируя данные в буфере я обратил внимание что посылки бывают кусками, хотя по факту я на 100000000000000% уверен что они всегда ровненькие и одинаковые
    4. Почему в буфере могут быть обрывки? это потому что я своими 50 байтами там оставляют объедки от них?


    Ну и самый главный вопрос - если у кого-то есть бесплатные идеи по оптимизации - готов бесплатно их выслушать =)
    Или в целом концепция как лучше поступить в моей ситуации - просто слушать эти 22 байта
    Мне казалось что обсуждалось это. Так на эти вопросы ответы уже даны! Все остальное флуд

  9. #59
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Это не вам, а ТС решать ))
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  10. #60
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,318

    По умолчанию

    Ну пофлудим

    Цитата Сообщение от keysansa Посмотреть сообщение
    ..чем чаще вы получите данные в контроллере, и тем быстрее сможете отреагировать на заданный вес ..
    ..
    Кто-то с этим спорит ? Ранее сказано - "Чаще чем всё - не получится" - чтo-то не так ? теперь получится ?

    Цитата Сообщение от keysansa Посмотреть сообщение
    .. можно и не торопиться. В дозу попадём. Видимо вы в таких условиях и работаете..
    Ну ? Что-то как-то выдернем и так пойдет. Не ? Ведь - да :
    Цитата Сообщение от Raikkonen Посмотреть сообщение
    .. Вес измерять чаще чем раз в 20 сек смысла нет...
    но
    Цитата Сообщение от Raikkonen Посмотреть сообщение
    .
    Я хочу просто быть уверенным в:
    1. Не наступит переполнения буфера
    2. Я получаю последние данные, а не те что дольше всех в буфере..
    Получая всё - получается максимум уверености. А юзать можно и раз в год коли чаще смысла нет.


    Цитата Сообщение от keysansa Посмотреть сообщение
    Написал чуть выше, поток в моем примере - 2гр/мин, точность +/- 2 кг. Я считаю, что разбираюсь, пишите аргументы, если не согласны.
    Про пример - понятно. А тута точно всё точно ?
    Цитата Сообщение от keysansa Посмотреть сообщение
    ..Необходимо, что бы время реакции системы было в 2-3 раза больше, чем поток дозирования в отношении к допустимой точности ...

    Цитата Сообщение от keysansa Посмотреть сообщение
    16 байт данных - там актуальное значение веса. Вы думаете Int (float) 16 байт занимает или string?
    Я думаю ? Оно мне надо ? Стынет же. 16 байт - это просто данные. Про это - есть.
    А Вы накой-то додумываете. Может и угадали ..:
    Цитата Сообщение от Raikkonen Посмотреть сообщение
    Код:
    PROGRAM com_read_prg
    VAR
    	...
    	package: ARRAY [1..22] OF BYTE;
    	p_pointer: POINTER TO ARRAY [1..22] OF BYTE;
    	...
    	weight: weight_package;
    	p1: POINTER TO BYTE;
    END_VAR
    	...
    	p_pointer := ADR (buffer[i]);     
    	package := p_pointer^; (*копируем найденное в массив ровно на 22 байта...*)
    	...
    	p1 := ADR(weight.ch1); (* weight - это структура тупо из 8 UINT, поэтому я свой массив перевожу в уинт...*)
    	FOR ii:=4 TO 19 DO  
    		p1^ := package[ii];
    		p1 := p1+1;
    	END_FOR
    	..
    А может и нет )) Только время на гадания тратили.


    Цитата Сообщение от keysansa Посмотреть сообщение
    Как вы думаете на контроллерах реализуются несколько "задач" с разными циклами?
    Где здесь потоки ? (2й раз) Прямых данных от ТС нет, но раздел про ПЛК110[М02] а не абстрактные "контроллеры"


    ps
    Цитата Сообщение от keysansa Посмотреть сообщение
    Вы видимо много пенистого взяли. )
    Бывает - много 8( ??? Вы точно не с планеты эльфов ? Всегда мало !!

Страница 6 из 7 ПерваяПервая ... 4567 ПоследняяПоследняя

Похожие темы

  1. Свободное ПО для опроса устройств (Modbus)
    от o_nik в разделе Трёп (Курилка)
    Ответов: 26
    Последнее сообщение: 09.11.2020, 14:15
  2. Ответов: 6
    Последнее сообщение: 05.03.2018, 10:46
  3. ПЛК110 М02 и свободное место на USB Flash?
    от Антон_Б в разделе ПЛК1хх [М02]
    Ответов: 0
    Последнее сообщение: 01.07.2017, 12:21
  4. чтение из плк
    от Wanted в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 03.12.2010, 13:18
  5. Свободное место на Flash диске
    от Логвиненко Андрей в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.11.2009, 15:04

Ваши права

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