IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Помогите начинающим с контроллером FX2N Mitsubishi Electric, Проблемы программирования
Muhomor
сообщение 24.01.2007 - 18:10
Сообщение #1


Читатель
*

Группа: Пользователи
Сообщений: 7
Регистрация: 24.01.2007
Пользователь №: 1782



Доброго здоровья!
На днях начал изучать программирование контроллера Mitsubishi Melsec FX2N.
Проблема состоит в следующем:
Не получается использовать команду десятичного сравнения CMP_M. По документации команда описывается так: CMP (S1+) (S2+) (D+), в пробной программе S1 вход -данные десятичные DO (c выхода команды FROM чтения с аналогового блока), S2 вход -константа К100, на выходе CMP (D+) стоит маркер М0.
При проверке ошибок отладчик сообщает что на выходе CMP маркер М0 имеет не соответствующий тип.
Пожалуйста подскажите как исправить, в чём я не прав. Большое спасибо.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Ghoul Jedi
сообщение 24.01.2007 - 19:03
Сообщение #2


Писатель
**

Группа: Пользователи
Сообщений: 67
Регистрация: 15.07.2004
Из: Belarus
Пользователь №: 45



Посмотри внимательно на описание.
Пример:
CMP K100 K200 M0
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 25.01.2007 - 03:08
Сообщение #3


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Дурацкий вопрос напрашивается: а не набрана ли буква О вместо нуля?
Как DO в приведенном примере.




--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Muhomor
сообщение 25.01.2007 - 18:17
Сообщение #4


Читатель
*

Группа: Пользователи
Сообщений: 7
Регистрация: 24.01.2007
Пользователь №: 1782



Цитата(Ghoul Jedi @ 24.01.2007 - 19:03) *

Посмотри внимательно на описание.
Пример:
CMP K100 K200 M0


Большое спасибо за проявленное внимание.
Как я понял из документации использовать можно на месте (S1+) и (S2+)
переменные и константы K. H. KnX. KnY, KnM. KnS, T, C, D, Y, Z; На месте (D+) - Y, M, S.
Я пытаюсь использовать (К100) и (D0) на выходе М0 - результат тот же - Тип переменной не соответствует.
Цитирую описание: "Результат сравнения (больше, меньше, равно) отображается благодаря задействованию маркера M, операнда состояния шага S или выхода Y. Определение, какой из этих операндов должен задействоваться, выполняется по адресу цели (D+).
(S1+)>(S2+)-->(D+)
(S1+)=(S2+)-->((D+)+1)
(S1+)<(S2+)-->((D+)+2)"
Т.е. на выходе маркер M0 примет состояние 1 есле S1>S2, маркер M1 примет состояние 1 есле S1=S2,
маркер M2 примет состояние 1 есле S1<S2.
И тут получается путаница: Маркер M0 программа принимает без ошибок есле тип Boolean Array (3 состояния ), а при реализации выражения:
M0
---I I------Y1 -отладчик сообщает, что M0 может быть только типа Boolean!!!!
Тема остаётся открытой, есле в чём не прав или есть какие мысли подскажите пожалуйста!

Цитата(Sergei Troizky @ 25.01.2007 - 03:08) *

Дурацкий вопрос напрашивается: а не набрана ли буква О вместо нуля?
Как DO в приведенном примере.


Спасибо за содействие.
Вопрос не такой уж и дурацкий (сталкивался с подобной проблемой лет 15 назад, тогда в программе на Pascal была набрана русская буква О вместо латинской O в операторе, они практически не отличаются), в заданном вопросе каюсь косяк smile.gif .
В нашем случае всё правильно, я не раз вводил оператор по новой....
Тема открыта, буду благодарен за дальнейшее сотрудничество.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 26.01.2007 - 08:03
Сообщение #5


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Я, сказать по правде, использую по-прежнему старый добрый Medoc и подобных проблем не имею.
Но свежий взгляд со стороны, так сказать.
1. Простите ламерский вопрос, но что означают плюсы после адресов в приведенных текстах?
2. Если "M0 может быть только типа Boolean", то почему не присвоить М0, М1 и М2 тип Boolean?

И немного не в тему: никогда не мог понять, почему биты надо называть маркерами.
Кстати, в англоязычных инструкциях как к Medoc-у, так и по программированию серии FX, слово маркер не употребляется, а употребляются слова бит и вспомогательное реле.

Сообщение отредактировал Sergei Troizky - 26.01.2007 - 08:06


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Muhomor
сообщение 26.01.2007 - 20:34
Сообщение #6


Читатель
*

Группа: Пользователи
Сообщений: 7
Регистрация: 24.01.2007
Пользователь №: 1782



Цитата(Sergei Troizky @ 26.01.2007 - 08:03) *

Я, сказать по правде, использую по-прежнему старый добрый Medoc и подобных проблем не имею.
Но свежий взгляд со стороны, так сказать.
1. Простите ламерский вопрос, но что означают плюсы после адресов в приведенных текстах?
2. Если "M0 может быть только типа Boolean", то почему не присвоить М0, М1 и М2 тип Boolean?

И немного не в тему: никогда не мог понять, почему биты надо называть маркерами.
Кстати, в англоязычных инструкциях как к Medoc-у, так и по программированию серии FX, слово маркер не употребляется, а употребляются слова бит и вспомогательное реле.


Добрый вечер!
Честно говоря с Medoc не знаком, возможно он и лучше спорить не стану но на сей момент имеем в наличии только GX IEC Developer FX 7.0.
Какой формат записи используется в Medoc ? По мне так понятнее язык функциональных блоков, который более успешно (помоему) реализован в Visilogic для Unitronics Vision - всё просто и понятно, но может это только на первый взгляд...
1. Любой вопрос достоин ответа (сам не асс smile.gif ) плюсы приводятся в документации и здесь были преведены для меньшего искажения текста мануала, скорее всего ничего не значат -после типа операнда (D, S, M....) ставится адрес операнда (D100, S222, M625....).
2. Так и есть для M0, M1, M2 можно использовать только тип Boolean, непонятно как использовать выходные данные с функции CMP_M который можно поставить только как ARRAY...Boolean - имеющий 3 состояния (0, 1, 2) ?
Желаю приятно провести выходные!
Тема остаётся открытой.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 27.01.2007 - 22:22
Сообщение #7


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(Muhomor @ 26.01.2007 - 20:34) *

[... непонятно как использовать выходные данные с функции CMP_M который можно поставить только как ARRAY...Boolean - имеющий 3 состояния (0, 1, 2) ?

Я что-то никак не пойму постановку вопроса.
Не Array или Boolean, имеющий три состояния, а три Boolean устройства M0, M1, M2 получают результат инструкции CMP.
С другой стороны, насколько я знаком с языками высокого уровня, объединение Boolean устройств в Array не меняет типа этих устройств.


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Vad
сообщение 21.02.2007 - 13:39
Сообщение #8


Читатель
*

Группа: Пользователи
Сообщений: 18
Регистрация: 2.07.2006
Пользователь №: 304



Плюсы означают, что для указания адреса исходных/конечных данных могут применяться индексные регистры V и Z
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Elyu13
сообщение 28.03.2009 - 09:59
Сообщение #9


Читатель
*

Группа: Пользователи
Сообщений: 1
Регистрация: 28.03.2009
Пользователь №: 9079



Я тоже думаю что ставить на выход например M0? как я полагаю это целое слово , а ставить нужно бит например M0.1 или M0.2 или M20.3 где первая цифра показывает байт а вторая бит и тогда коректно присваивается эта метка ! Вот ещё вопрос для присвоений адресов например М0.1 возможно нужна маска для правельного определения адреса что контроллер понимал с чем имеет дело ! В старых моделях контроллеров маска вшита жестко и дает конкретные переменные например T - таймера и сколько их можно ставить M - метка или флаги - это бит к которому можно присвоить часть уравнения пример S1.1+S1.2 = M1.1 и потом М1.1 + S1.1 = Y1.1 - пример простой сигнал на входе 1 и сигнал на входе 2 создают цепь и присваивают к биту M1.1 а потом этот бит присваивает к выходу Y1.1 включение выхода - например катушки реле! ) Возможно многим понятно это но как понимаю что иногда люди путаются с адресацией и из за этого идут ошибки! unsure.gif

Сообщение отредактировал Elyu13 - 28.03.2009 - 10:02
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Kybernetic
сообщение 30.03.2009 - 11:50
Сообщение #10


Читатель
*

Группа: Пользователи
Сообщений: 32
Регистрация: 23.01.2009
Пользователь №: 9031



Всем доброго здоровья!
Если вопрос все еще актуален, хочу присоединитья к данной компании для обсуждения проблемы.
Если в IEC Developer нажать два раза на блок CMP_M, то появиться окно, в котором показано какие дожны быть переменные на входе и на выходе. Как видно из написанного выход должен быть ARRAY [0..2] OF BOOL. То есть на выход должна быть поставлена переменная которая является массивом.
В заголовке программы (HEADER) предлагаю добавить новую переменную-массив такого же типа и обозвать допустим STR3. После этого на выход блока CMP_M поставить данную переменную. В следущей цепочке можно уже к ней обращаться как STR3[0], STR3[1] и STR3[2].
Если нужно, то можно переслать эти данные в М0, M1, M2 тремя командами. И все должно зработать, как часы...
У кого есть лучше варианты, пишите..


Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Kybernetic
сообщение 30.03.2009 - 11:57
Сообщение #11


Читатель
*

Группа: Пользователи
Сообщений: 32
Регистрация: 23.01.2009
Пользователь №: 9031



И в IEC Developer, которым как написал Muhomor он пользуется в HELPе нет никаких плюсов.

Compare numerical data ( CMP 16 bit)
( CMPP 16 bit, pulse function)
( DCMP 32 bit)
( DCMPP 32 bit, pulse function)

Description

The function compares the data of sources (S1) and (S2).

Destination operand (D) is set according to the result of the compare operation (greater than, less than, equal) :

(S1) > (S2) -> (D)
(S1) = (S2) -> (D)+1
(S1) < (S2) -> (D)+2

The data in (S1) and (S2) are treated as binary data.
Не надо путать программы GX IEC и GX, а то что-то советов много а толку мало....
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 27.04.2024 - 22:53