блоки ADDR и ADDM
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
блоки ADDR и ADDM
Доброго времени суток!
Все время разрабатывал приложения под процессор M340
для связи по ModBus использовал блоки ADDM но на процессоре премиум используется блок ADDR в чем отличие этих блоков?может есть у кого не будь информация об этих блоках?буду очень признателен за помощь в изучении этих блоков
Все время разрабатывал приложения под процессор M340
для связи по ModBus использовал блоки ADDM но на процессоре премиум используется блок ADDR в чем отличие этих блоков?может есть у кого не будь информация об этих блоках?буду очень признателен за помощь в изучении этих блоков
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: блоки ADDR и ADDM
ADDR для Premium
ADDM для M340
Отличие в том, что в М340 и Премиум отличается способ адресации. Подробно написано в хелпе в разделе что-то аля "Система адресации".
ADDM для M340
Отличие в том, что в М340 и Премиум отличается способ адресации. Подробно написано в хелпе в разделе что-то аля "Система адресации".
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
Re: блоки ADDR и ADDM
Облазил весь хелп не какой конкретики нет.а интересует именно различие этих блоков.как они написаны.
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: блоки ADDR и ADDM
Как они написаны - Вам никто не скажет, так как для программера ПЛК, EF функция - это черный ящик.
Вы лучше скажите, что Вас нтересует в этих функциях.
А на счет хелпа - вот:
Communication Architectures ->Addressing->X-Way Addressing
Communication Architectures ->Addressing->Modicon M340 PLCs Addressing
Вы лучше скажите, что Вас нтересует в этих функциях.
А на счет хелпа - вот:
Communication Architectures ->Addressing->X-Way Addressing
Communication Architectures ->Addressing->Modicon M340 PLCs Addressing
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
Re: блоки ADDR и ADDM
меня интересует следующие.В M340 MT_MBS[1] эта переменная срабатывает при чтение.то есть достаточно считывать какой не будь адрес реестра частотника чтобы увидить включен он или выключен.а в premiume это видно только когда происходит запись.меня это не устраивает так как имеються 3 частотника на 2х из них мы записываем значение в адреса реестра и считываем с них.а на оставшимся мы только считываем.и за счет этого я не вижу включен он или нет=(((
и это нужно как то решить.вот и хотел посмотреть чем различаются блоки.
и это нужно как то решить.вот и хотел посмотреть чем различаются блоки.
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
Re: блоки ADDR и ADDM
А так как я понял что переменная массива Mng[0].0 это бит активности который показывает обработан запрос или нет.а я бы хотел сделать так чтобы я в независимости от запросов мог определить какой частотник включен а какой нет
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: блоки ADDR и ADDM
1) Никто Вам не запрещает делать чтение. Мало того, правильное управление большинством частотников предвидит сначала контроль его состояния, а потом только управление. Какой у Вас частотник? Вы можете тут почитать о управлении ПЧ используя пром сети.
2) Если Вы по каким-то причинам не хотите читать переменные (хотя я не знаю по каким), есть возможность вызова диагностических функций Modbus, если таковые поддерживаются Слейвом (Частотником), но тут уже придется попотеть.
2) Если Вы по каким-то причинам не хотите читать переменные (хотя я не знаю по каким), есть возможность вызова диагностических функций Modbus, если таковые поддерживаются Слейвом (Частотником), но тут уже придется попотеть.
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
Re: блоки ADDR и ADDM
Частотники разные и ATV212 и 312 и так далее.я просто хочу сделать чтобы чтение состояния работа-способности частотника проходило независимо от записи в адреса реестра частотника.и если же частотник не отвечает(выключен или сломан)чтобы запросы на него не посылались
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: блоки ADDR и ADDM
1)
READ_VAR - читать
WRITE_VAR - писать
Вызвал функцию READ_VAR для частотника, если функция вернула позитивный ответ - вызываем функцию WRITE_VAR, если негативный ответ - идем дальше по карусели. Не пойму, в чем проблема и при чем тут ADDR. ADDR, если разобраться, кроме как перевода строки в массив ничего больше не делает.
2) Лучше всего для этих частотников пользоваться Modbus-функцией 23 (17HEX), но вызов этой функции через SEND_REQ связан с определенными неудобствами.
READ_VAR - читать
WRITE_VAR - писать
Вызвал функцию READ_VAR для частотника, если функция вернула позитивный ответ - вызываем функцию WRITE_VAR, если негативный ответ - идем дальше по карусели. Не пойму, в чем проблема и при чем тут ADDR. ADDR, если разобраться, кроме как перевода строки в массив ничего больше не делает.
2) Лучше всего для этих частотников пользоваться Modbus-функцией 23 (17HEX), но вызов этой функции через SEND_REQ связан с определенными неудобствами.
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
Re: блоки ADDR и ADDM
если я правельно понимаю то Отчет Значение Связь 16#00(Обмен успешным) в программе выглядит так Managemet_tanle[0].0.так ли это?
-
- Posts: 101
- Joined: Thu Aug 29, 2013 4:11 pm
Re: блоки ADDR и ADDM
Всего отчет состоит из 4х слов. В первом слове Managemet_table[0].0=0 означает успешный обмен данных. Как только Managemet_table[0].0=1, то во втором слове будут записаны значения, то которым можно опеределить в чем заключается проблема.
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
Re: блоки ADDR и ADDM
Огромное спасибо за потраченное на меня время.буду разбираться.
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: блоки ADDR и ADDM
По-моему Вы что-то путаете. Managemet_table[0].0=0 означает, что функция обработана, не важно с позитивным или негативным результатом.SE_support wrote:Всего отчет состоит из 4х слов...
From Help
Show
Help wrote:Structure
The following table describes the structure of the data in the communication management table:
Order of the Word Most Significant Byte Least Significant Byte
Data managed by the system:
1 Exchange number/ Activity bit
2 operation report / communication report
Data managed by the user:
3 Timeout
4 Length
Activity Bit
This bit indicates the execution status of the communication function.
It is set to 1 when launched and returns to 0 when its execution is complete.
This is the first bit of the first element of the table.
Example: If the management table has been declared as follows:
Tab_Gest ARRAY [1..4] OF INT, the activity bit is the bit with the notation Tab_Gest[1].0.
NOTE: the notation previously used requires configuration of the project properties in such a way as to authorize the extraction of bits on integer types. If this is not the case Tab_Gest[1].0 cannot be accessed in this manner.
Exchange Number
When a communication function is sent, the system automatically allocates it a number, enabling the exchange to be identified.
This number can be used where necessary to stop the exchange in progress (using the CANCEL function).
-
- Posts: 101
- Joined: Thu Aug 29, 2013 4:11 pm
Re: блоки ADDR и ADDM
Ты прав, я немного неправильно интерпретировал. Хотя, если в третьем слове не указать timeout (что обычно и просходит), то моя интерпретация окажется правильной.
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: блоки ADDR и ADDM
В этом случае функция просто будет ожидать окончания выполнения. В случае использования Modbus/TCP будет "зависание" обмена, а в случае Modbus RTU вроде как все-таки вернет ошибку. Так что ошибку надо смотреть все равно после окончания обработки, тоесть когда бит активности перейдет в 0.
-
- Posts: 74
- Joined: Thu Oct 10, 2013 10:09 am
Re: блоки ADDR и ADDM
А как избежать "зависание" обмена???Есть конечно идея создать столько же циклов сколько и частотников.и к каждому частотнику свой цикл выполнения.будет выглядит приметно так
но тогда придется заводить еще и столько массивов модбас сколько у нас и частотников.но зато по задумки мы должны получить полную отключение цикла обмена.и тогда запросы передаваться вообще не будут.и не будет зависания
Code: Select all
----------------------------------------------------------------
if Query_report[0]=0 and MT_MBS[0].0=0 then
if count <11 then count:=count+1;
else count:=0;end_if;
end_if;
if count = 1 and not MT_MBS[0].0 then Query_report[0]:= MT_MBS[1];
READ_VAR (ADDr('0.0.0.1'),'%Mw',64769,1, MT_MBS, St_p_read);
end_if;
----------------------------------------------------------------