Показано с 1 по 6 из 6

Тема: ПЛК 323 + МВ110-32ДН

  1. #1

    По умолчанию ПЛК 323 + МВ110-32ДН

    Доброго дня, товарищи.
    Связаны два данных устройства посредством RS485/Modbus. Параметры согласованы на устройствах и настроены.
    ПЛК должен с МВ110 забирать 32 бита, показывающих соответственно состояние его 32-х входов. (регистры на модуле ввода - 0x63 и 0x64)
    Добавляю кaнaл, но при добавлении, в окне соотнесение входов-выходов к каналу modbus привязывается переменная только на 16 бит.
    Вопрос - как явно указать, что я хочу читать с модуля два байта, и работать с этими байтами как с DWORD?
    Если это невозможно - как можно средствами языка ST объединить два word в dword, дабы полноценно работать с числом, как с одним логическим значением, ответственным за один прибор мв110?
    1.jpg2.jpg

  2. #2

    По умолчанию

    во вложении пример склеивания двух вордов в REAL. также можете поменять REAL На DWORD и указать последовательность байт.
    Вложения Вложения

  3. #3

    По умолчанию

    Благодарю за поддержку, однако с указателями в ST дел пока не имел, слишком неочевидно для меня использование указателей в ST.
    Первый момент :
    После беглого поиска по форуму, встречал пример сapzap, и переделанный под мои нужды он выглядит так :
    Код:
    VAR
    	mv110_1_H : WORD;
    	mv110_1_L : WORD;
    	MV_110 : DWORD;
    	mv_pt : POINTER TO DWORD;
    END_VAR
    
    mv_pt:=ADR(MV_110);
    mv_pt^:=SHL(WORD_TO_DWORD(mv110_1_H),16) OR WORD_TO_DWORD(mv110_1_L);
    Источник - http://www.owen.ru/forum/showthread....ll=1#post87066
    Код мне понятен, за исключением применения POINTER - хоть кол о голову чеши, не понимаю, зачем указывать область памяти на переменную, когда в этом примере можно использовать оператор присваивания? В чем преимущества?
    Вот следующий код, мне как Си программисту - понятен :
    Код:
    MV_110 := SHL(WORD_TO_DWORD(mv110_1_H),16) OR WORD_TO_DWORD(mv110_1_L);
    Результат работы в ПЛК - такой же.
    К чему тогда в этом коротком примере использование указателей?
    Основная литература которую использую, это книга Павлова, то тема указателей - там не развернута (возможно потому что их нет в МЭК).
    -------------
    Второй вопрос - целесообразно ли в ST объявлять промежуточные переменные типа WORD, служащие для формирования DWORD, или можно делать вот так :
    Код:
    MV_110 := SHL(WORD_TO_DWORD(%IW0),16) OR WORD_TO_DWORD(%IW1);
    Убирая тем самым избыточный код?
    Последний раз редактировалось alexusankov; 14.05.2015 в 15:39.

  4. #4
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,671

    По умолчанию

    Работа через указатели - не что иное как один из ПРИЕМОВ обращения и работы с переменными . Каждую (любую) задачу можно решить как минимум тремя способами (выстрел в голову не в счет) , если задача решена - способ (прием) действенный .
    А формирование из байт различных форматов - всего лишь перетасовка и "укладка" байт.
    Например в системах программирования для прочих ПЛК есть команды перестановки байт в слове и команда прямого переноса "MOV","DMOV".

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

    По умолчанию

    Цитата Сообщение от alexusankov Посмотреть сообщение
    Благодарю за поддержку, однако с указателями в ST дел пока не имел, слишком неочевидно для меня использование указателей в ST.
    Первый момент :
    После беглого поиска по форуму, встречал пример сapzap, и переделанный под мои нужды он выглядит так :
    Код:
    VAR
    	mv110_1_H : WORD;
    	mv110_1_L : WORD;
    	MV_110 : DWORD;
    	mv_pt : POINTER TO DWORD;
    END_VAR
    
    mv_pt:=ADR(MV_110);
    mv_pt^:=SHL(WORD_TO_DWORD(mv110_1_H),16) OR WORD_TO_DWORD(mv110_1_L);
    Источник - http://www.owen.ru/forum/showthread....ll=1#post87066
    Код мне понятен, за исключением применения POINTER - хоть кол о голову чеши, не понимаю, зачем указывать область памяти на переменную, когда в этом примере можно использовать оператор присваивания? В чем преимущества?
    Вот следующий код, мне как Си программисту - понятен :
    Код:
    MV_110 := SHL(WORD_TO_DWORD(mv110_1_H),16) OR WORD_TO_DWORD(mv110_1_L);
    Результат работы в ПЛК - такой же.
    К чему тогда в этом коротком примере использование указателей?
    Основная литература которую использую, это книга Павлова, то тема указателей - там не развернута (возможно потому что их нет в МЭК).
    -------------
    Второй вопрос - целесообразно ли в ST объявлять промежуточные переменные типа WORD, служащие для формирования DWORD, или можно делать вот так :
    Код:
    MV_110 := SHL(WORD_TO_DWORD(%IW0),16) OR WORD_TO_DWORD(%IW1);
    Убирая тем самым избыточный код?
    ну вопервых в моем примере речь шла о переменной реал, поэтому просто сложить два ворда не получится,для этого и использовал указатель
    вовторых,есть еще вариант Вашего случая, shl можно заменить на умножение,возможно код будет еще меньше
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    речь шла о переменной реал, поэтому просто сложить два ворда не получится
    Благодарю за отклик. А если в двух словах, то почему не получится, и почему получится с указателем?
    Вы не могли бы посоветовать хорошую литературу, по особенностям языка ST?
    Читал Павлова - но там лишь основы, и языки рассмотрены вкратце, а хочется побольше таких тонкостей.
    Цитата Сообщение от capzap Посмотреть сообщение
    вовторых,есть еще вариант Вашего случая, shl можно заменить на умножение,возможно код будет еще меньше
    Имеется ввиду вариант :
    Код:
    MV_110_1 := (WORD_TO_DWORD(%IW0) * 65536 ) OR WORD_TO_DWORD(%IW1);
    Логично, но со сдвигом немного очевиднее, в плане дальнейшего понимания кода (для меня)
    Последний раз редактировалось alexusankov; 15.05.2015 в 08:43.

Похожие темы

  1. ПЛК+МВ110-32дн.
    от Сергей067 в разделе ПЛК3хх
    Ответов: 11
    Последнее сообщение: 17.06.2016, 16:01
  2. ПЛК 110-60 + МВ110-32ДН (Прог.\CFC)
    от npu3pak в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 03.03.2015, 19:22
  3. мв110-32дн
    от san_orsk в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 22.07.2014, 09:19
  4. плк 110-60 и мв110-32ДН
    от service в разделе Подбор Оборудования
    Ответов: 1
    Последнее сообщение: 19.11.2012, 10:20
  5. Ответов: 5
    Последнее сообщение: 06.01.2012, 23:32

Ваши права

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