Страница 505 из 792 ПерваяПервая ... 5405455495503504505506507515555605 ... ПоследняяПоследняя
Показано с 5,041 по 5,050 из 7915

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #5041

    По умолчанию

    Дело в том, что PLC Configuration не умеет делать групповые запросы. Используйте ModBus.lib. Или можно панель мастером сделать, что по мне удобнее.

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

    По умолчанию

    Цитата Сообщение от RV9WFJ Посмотреть сообщение
    Дело в том, что PLC Configuration не умеет делать групповые запросы.
    и для кого тут форумчане делились опытом, как использовать модуль строка
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  3. #5043

    По умолчанию

    Цитата Сообщение от RV9WFJ Посмотреть сообщение
    Дело в том, что PLC Configuration не умеет делать групповые запросы. Используйте ModBus.lib. Или можно панель мастером сделать, что по мне удобнее.
    ModBus.lib - это был мой следующий шаг. Есть примеры как читать несколько регистров со slave устройства одним запросом. Жизнь удалась!!!

    Логика у меня была следующая:
    1. Создаем POU (программа) Read10s_PRG.
    2. В конфигурации задач настраиваем Тип - циклический, Интервал - 10000ms
    3. В программе Read10s_PRG настраиваем параметры порта -> открываем порт -> читаем -> обрабатываем данные -> закрываем порт.
    4. Получаем считывание нескольких регистров slave устройства и их обработку 1 раз в 10 сек.

    На мой взгляд все логично=) А вот не тут-то было!!!!!

    конструкция COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK ); должна открыть порт и выставить COM_SERVICE1.ready в TRUE, и на это ей нужно 299!!! циклов (запусков Read10s_PRG). 299 КАРЛ
    т.е. если Read10s_PRG запускается 1 раз в 10 мс то требуется 299*10мс.
    если Read10s_PRG запускается 1 раз в 10000 мс то требуется 299*10000мс.

    Вот этого я никак не ожидал вообще!!! Но справедливости ради надо отметить что порт открывается, обмен идет, и можно одним запросом прочитать сразу несколько регистров =) На 10000мс не проверял конечно, остановился на 800мс. Далее "логика" была понятна.

    Но и тут казалось можно было выкрутиться:
    Создаем POU OpenPort_PRG -> настраиваем циклически 10мс -> вставляем туда код:
    Код:
    IF port_opened=0 THEN
       Settings.Port:=com_num;              
       Settings.dwBaudRate:=115200;   
       Settings.byParity:=0;
       Settings.dwTimeout:=0;
       Settings.byStopBits:=0;
       Settings.dwBufferSize:=0;
       Settings.dwScan:=0;
    END_IF
    
    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK  );
    
    IF COM_SERVICE1.ready THEN
    	port_opened:=2;
    END_IF
    Порт открывается быстро. А теперь в Read10s_PRG просто работаем с этим портом (естественно нужные переменные делаем глобальными)

    Код:
    get1_modbus: MB_RD_HOLD_REGS
    
    get1_modbus(
    	Enable:=TRUE ,			
    	Mode:=MB_RTU ,		
    	DevAddr:=1 ,			
    	FirstAddr:=300 ,			
    	Quantity:=14,				
    	ComHandle:=Settings.Port , 
    	TimeOut:=TimeOut , 		
    	Buffer:=Buffer ,			
    	Complete=>cmpl ,		
    	Exception=>err ,			
    	ByteCnt=>DataSize );
    cmpl будет TRUE когда get1_modbus получит данные.
    НО
    получит она их через 13 циклов (запусков Read10s_PRG ) 13!!!
    т.е. если Read10s_PRG запускается 1 раз в 10000мс то мы получим данные через 13*10000мс
    Все данные получены экспериментально.

    Код:
    PLCInfo
    PLC model MODEL PLC 110-32 Версия ПО метр: 2.0 
    Binary  VERSION 2.15.8 
    Need Target version 2.10 
    Compiled: 11:51:53 Dec 26 2015 
    MAC 6A:77:00:81:4F:67 
    IP 10.0.6.10
    GATE 10.0.6.1
    MASK 255.255.255.0
    PIC upper version is 15
    Licence unlimited
    Ну и напоследок
    Если кто-то захочет на одном интерфейсе по ModBus опрашивать часть устройств через конфигуратор а часть в программе через modbus.lib ничего не выйдет - проверено! После открытия порта в программе конфигуратор больше не может подключиться к интерфейсу.
    Вот такая интересная ночка выдалась =)

  4. #5044
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,435

    По умолчанию

    Цитата Сообщение от death132 Посмотреть сообщение
    ModBus.lib - это был мой следующий шаг. Есть примеры как читать несколько регистров со slave устройства одним запросом. Жизнь удалась!!!

    Логика у меня была следующая:
    1. Создаем POU (программа) Read10s_PRG.
    2. В конфигурации задач настраиваем Тип - циклический, Интервал - 10000ms
    3. В программе Read10s_PRG настраиваем параметры порта -> открываем порт -> читаем -> обрабатываем данные -> закрываем порт.
    4. Получаем считывание нескольких регистров slave устройства и их обработку 1 раз в 10 сек.

    На мой взгляд все логично=) А вот не тут-то было!!!!!

    конструкция COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK ); должна открыть порт и выставить COM_SERVICE1.ready в TRUE, и на это ей нужно 299!!! циклов (запусков Read10s_PRG). 299 КАРЛ
    т.е. если Read10s_PRG запускается 1 раз в 10 мс то требуется 299*10мс.
    если Read10s_PRG запускается 1 раз в 10000 мс то требуется 299*10000мс.

    Вот этого я никак не ожидал вообще!!! Но справедливости ради надо отметить что порт открывается, обмен идет, и можно одним запросом прочитать сразу несколько регистров =) На 10000мс не проверял конечно, остановился на 800мс. Далее "логика" была понятна.

    Но и тут казалось можно было выкрутиться:
    Создаем POU OpenPort_PRG -> настраиваем циклически 10мс -> вставляем туда код:
    Код:
    IF port_opened=0 THEN
       Settings.Port:=com_num;              
       Settings.dwBaudRate:=115200;   
       Settings.byParity:=0;
       Settings.dwTimeout:=0;
       Settings.byStopBits:=0;
       Settings.dwBufferSize:=0;
       Settings.dwScan:=0;
    END_IF
    
    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK  );
    
    IF COM_SERVICE1.ready THEN
    	port_opened:=2;
    END_IF
    Порт открывается быстро. А теперь в Read10s_PRG просто работаем с этим портом (естественно нужные переменные делаем глобальными)

    Код:
    get1_modbus: MB_RD_HOLD_REGS
    
    get1_modbus(
    	Enable:=TRUE ,			
    	Mode:=MB_RTU ,		
    	DevAddr:=1 ,			
    	FirstAddr:=300 ,			
    	Quantity:=14,				
    	ComHandle:=Settings.Port , 
    	TimeOut:=TimeOut , 		
    	Buffer:=Buffer ,			
    	Complete=>cmpl ,		
    	Exception=>err ,			
    	ByteCnt=>DataSize );
    cmpl будет TRUE когда get1_modbus получит данные.
    НО
    получит она их через 13 циклов (запусков Read10s_PRG ) 13!!!
    т.е. если Read10s_PRG запускается 1 раз в 10000мс то мы получим данные через 13*10000мс
    Все данные получены экспериментально.

    Код:
    PLCInfo
    PLC model MODEL PLC 110-32 Версия ПО метр: 2.0 
    Binary  VERSION 2.15.8 
    Need Target version 2.10 
    Compiled: 11:51:53 Dec 26 2015 
    MAC 6A:77:00:81:4F:67 
    IP 10.0.6.10
    GATE 10.0.6.1
    MASK 255.255.255.0
    PIC upper version is 15
    Licence unlimited
    Ну и напоследок
    Если кто-то захочет на одном интерфейсе по ModBus опрашивать часть устройств через конфигуратор а часть в программе через modbus.lib ничего не выйдет - проверено! После открытия порта в программе конфигуратор больше не может подключиться к интерфейсу.
    Вот такая интересная ночка выдалась =)
    Зачем одно и тоже по всем веткам форума писать?
    26 лет деятельности в области промышленной безопасности

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

    По умолчанию

    Цитата Сообщение от death132 Посмотреть сообщение
    ModBus.lib - это был мой следующий шаг. Есть примеры как читать несколько регистров со slave устройства одним запросом. Жизнь удалась!!!

    Логика у меня была следующая:
    1. Создаем POU (программа) Read10s_PRG.
    2. В конфигурации задач настраиваем Тип - циклический, Интервал - 10000ms
    3. В программе Read10s_PRG настраиваем параметры порта -> открываем порт -> читаем -> обрабатываем данные -> закрываем порт.
    4. Получаем считывание нескольких регистров slave устройства и их обработку 1 раз в 10 сек.

    На мой взгляд все логично=) А вот не тут-то было!!!!!

    конструкция COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK ); должна открыть порт и выставить COM_SERVICE1.ready в TRUE, и на это ей нужно 299!!! циклов (запусков Read10s_PRG). 299 КАРЛ
    т.е. если Read10s_PRG запускается 1 раз в 10 мс то требуется 299*10мс.
    если Read10s_PRG запускается 1 раз в 10000 мс то требуется 299*10000мс.

    Вот этого я никак не ожидал вообще!!! Но справедливости ради надо отметить что порт открывается, обмен идет, и можно одним запросом прочитать сразу несколько регистров =) На 10000мс не проверял конечно, остановился на 800мс. Далее "логика" была понятна.

    Но и тут казалось можно было выкрутиться:
    Создаем POU OpenPort_PRG -> настраиваем циклически 10мс -> вставляем туда код:
    Код:
    IF port_opened=0 THEN
       Settings.Port:=com_num;              
       Settings.dwBaudRate:=115200;   
       Settings.byParity:=0;
       Settings.dwTimeout:=0;
       Settings.byStopBits:=0;
       Settings.dwBufferSize:=0;
       Settings.dwScan:=0;
    END_IF
    
    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK  );
    
    IF COM_SERVICE1.ready THEN
    	port_opened:=2;
    END_IF
    Порт открывается быстро. А теперь в Read10s_PRG просто работаем с этим портом (естественно нужные переменные делаем глобальными)

    Код:
    get1_modbus: MB_RD_HOLD_REGS
    
    get1_modbus(
    	Enable:=TRUE ,			
    	Mode:=MB_RTU ,		
    	DevAddr:=1 ,			
    	FirstAddr:=300 ,			
    	Quantity:=14,				
    	ComHandle:=Settings.Port , 
    	TimeOut:=TimeOut , 		
    	Buffer:=Buffer ,			
    	Complete=>cmpl ,		
    	Exception=>err ,			
    	ByteCnt=>DataSize );
    cmpl будет TRUE когда get1_modbus получит данные.
    НО
    получит она их через 13 циклов (запусков Read10s_PRG ) 13!!!
    т.е. если Read10s_PRG запускается 1 раз в 10000мс то мы получим данные через 13*10000мс
    Все данные получены экспериментально.

    Код:
    PLCInfo
    PLC model MODEL PLC 110-32 Версия ПО метр: 2.0 
    Binary  VERSION 2.15.8 
    Need Target version 2.10 
    Compiled: 11:51:53 Dec 26 2015 
    MAC 6A:77:00:81:4F:67 
    IP 10.0.6.10
    GATE 10.0.6.1
    MASK 255.255.255.0
    PIC upper version is 15
    Licence unlimited
    Ну и напоследок
    Если кто-то захочет на одном интерфейсе по ModBus опрашивать часть устройств через конфигуратор а часть в программе через modbus.lib ничего не выйдет - проверено! После открытия порта в программе конфигуратор больше не может подключиться к интерфейсу.
    Вот такая интересная ночка выдалась =)
    1) А заглянуть во внутренности COM_SERVICE и поправить нужное или написать свое ПОУ открытия порта внимательно читая доки на syslibcom было не досуг?
    2) Ну ради экспериментов можно конечно ознакомиться с плкашной многозадачностью, но чувствуется не до конца Вы разобрались
    3) про напоследок, Вы серьезно считаете что открыли Америку?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  6. #5046

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    1) А заглянуть во внутренности COM_SERVICE и поправить нужное или написать свое ПОУ открытия порта внимательно читая доки на syslibcom было не досуг?
    2) Ну ради экспериментов можно конечно ознакомиться с плкашной многозадачностью, но чувствуется не до конца Вы разобрались
    3) про напоследок, Вы серьезно считаете что открыли Америку?
    Если читали первое сообщение то видели что это мой первый опыт с ПЛК, потому и просил помощи, и вопрос задал в теме для новичков! До заглядывания во внутренности библиотек и исправления их под свои нужды я еще не дорос. Тем более задача на первый взгляд была элементарной: читать несколько регистров 1 запросом очень редко. Не думал что для этого нужны танцы с бубном.

    А вы если такой гуру то лучше бы помогли советом или делом для решения изначального вопроса. Зачем тыкать сопляка который итак ничего не знает "во внутренности COM_SERVICE" ???

  7. #5047

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    и для кого тут форумчане делились опытом, как использовать модуль строка
    Строку читать пробовал, но приходило каждый раз одно и то же, хотя данные должны были меняться. Разбираться не стал, послушал разумного совета petera и RV9WFJ. Задача решена, пусть и абсолютно другим способом.

  8. #5048

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Зачем одно и тоже по всем веткам форума писать?
    Не думал что так оперативно и там и там ответят. Больше не буду.

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

    По умолчанию

    Цитата Сообщение от death132 Посмотреть сообщение
    А вы если такой гуру то лучше бы помогли советом или делом для решения изначального вопроса. Зачем тыкать сопляка который итак ничего не знает "во внутренности COM_SERVICE" ???
    а смысл помогать, Вам сказали что панель лучше мастером, Вы уже поменяли подход, завтра например Валенок скажет, что лучше нету когда панель слейв, опять станете переходить?
    И мой совет это не тыканье носом,а рекомендация изучить как пишется код, проанализировать в каком месте возникает задержка открытия порта
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  10. #5050

    По умолчанию

    Здравствуйте. Подскажите как скачать программу из ПЛК 110

Страница 505 из 792 ПерваяПервая ... 5405455495503504505506507515555605 ... ПоследняяПоследняя

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

Ваши права

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