SIEMENS, DF&PD

Предыдущее посещение: Пн июн 27, 2016 3:24 Текущее время: Пн июн 27, 2016 3:24

Часовой пояс: UTC + 3 часа




 [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 22, 2011 11:01 
Не в сети
Известный Писатель

Зарегистрирован: Пт июл 06, 2007 6:41
Сообщения: 325
Откуда: г. Тюмень, Россия
gre_m писал(а):
akcount писал(а):

Осталось лишь посмотреть - как подобное реализуется на симатике. Пример, пожалуйста.


А что Simatic чем-то отличается от других процессоров в арифметике? SCL таких трюков не даст выполнить, но для STL что мешает?


Да покажите уже мне, ради т.н.б, как можно, используя исключительно INT в среде Step7, реализовать цикл от 0 до 40 000.

А еще лучше - операцию сравнения типа "меньше" для целочисленных INT`ов 0 и 40000.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 22, 2011 20:18 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7505
Откуда: Украина
akcount писал(а):
Да покажите уже мне, ради т.н.б, как можно, используя исключительно INT в среде Step7, реализовать цикл от 0 до 40 000.

А еще лучше - операцию сравнения типа "меньше" для целочисленных INT`ов 0 и 40000.

Вас не смущает, что тип данных INT всё-таки знаковый и может принимать значения от -32768 до +32767?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 3:14 
Не в сети
Известный Писатель

Зарегистрирован: Пт июл 06, 2007 6:41
Сообщения: 325
Откуда: г. Тюмень, Россия
Eugene1974 писал(а):
akcount писал(а):
Да покажите уже мне, ради т.н.б, как можно, используя исключительно INT в среде Step7, реализовать цикл от 0 до 40 000.

А еще лучше - операцию сравнения типа "меньше" для целочисленных INT`ов 0 и 40000.

Вас не смущает, что тип данных INT всё-таки знаковый и может принимать значения от -32768 до +32767?


[бьет шапкой оземь]

Я про это говорю!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 4:55 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
gre_m:

Цитата:
когда нужно отсчитать 4000 циклов, то воспользовавшись беззнаковым представлением, вы легко это сделаете, со знаком - нужно прибегать к хитрости.


Цитата:
SCL таких трюков не даст выполнить


Это можно сделать и на SCL, только зачем?

Если нужно 40000 циклов, просто объявляем переменную как dint. Стоит ли из-за одного байта в Симатике усложнять программу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 5:07 
Не в сети
Известный Писатель

Зарегистрирован: Пт июл 06, 2007 6:41
Сообщения: 325
Откуда: г. Тюмень, Россия
Alexey_Spb_82 писал(а):
Даже если нужно 40000 циклов, просто объявляем переменную как dint. Стоит ли из-за одного байта в Симатике настолько усложнять программу?


[воет]

Мужики! Я вас умоляю. Я который раз уже говорю про то, как именно система программирования Симатик трактует величины типа INT. Не про DINT, не про битстринг WORD/DWORD.

А трактует она их именно, как знаковую величину. Всегда. Не бывает в Степе переменных типа unsigned int.

Процессор вообще всегда оперирует набором бит, операции сложения и вычитания для знаковых и безнаковых для него абсолютно идентичны. Как в архитектуре инфениовских МК выполняется операция сравнения, я не знаю.

Как именно будет трактоваться переменная - это задача среды программирования.

Так, при перегоне константы -1 в контроллер должна уходить величина 0xFFFF.

А если в степ7 вбить операцию L 40000, то константа в STL автоматически оттранслируется, как L#40000. В SCL компилятор вообще выдасть ошибку несовместимого типа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 5:22 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
akcount, да я в курсе того что int и dint в симатике знаковые :-)

Я лишь говорил о том что если число не влезает в int, то стоит использовать dint, а не придумывать ухищрения, позволяющие представить число в беззнаковой форме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 12:12 
Не в сети
Известный Писатель

Зарегистрирован: Пн окт 18, 2010 9:28
Сообщения: 158
Откуда: Казахстан
akcount писал(а):

Цитата:
А если применить только старший и младший байт?


В смысле?


Некоторые "знающие" подсказали мне про применение только старшего и младшего байта для преобразование в дв. слово (если количество байта 4<). Для меня это большая загадка, в уме не складывается как такое можно. Соответственно возникает вопрос, может кто - нибудь знает? Или это очередной МИФ? )))


Последний раз редактировалось Aibek_Reale Пт дек 23, 2011 12:14, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 12:14 
Не в сети

Зарегистрирован: Чт дек 16, 2010 16:46
Сообщения: 6
Откуда: Москва
Не стал создавать новую тему, т.к. вопрос тот же:
Разложить WORD побитово.

Единственное отличие, нужно это на языке FBD.

У меня стоит Simatic S7 Basic. Он не поддерживает STL.

Кто-нибудь может помочь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 12:20 
Не в сети
Известный Писатель

Зарегистрирован: Пн окт 18, 2010 9:28
Сообщения: 158
Откуда: Казахстан
porter писал(а):

У меня стоит Simatic S7 Basic. Он не поддерживает STL.



Пробуйте в SCL Source!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 13:36 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
porter, напишите блок преобразования на SCL, скомпилируйте и используйте в вашей программе на FBD.

Код:
function WordToBits : void

var_input
     InWord:    word;
    vInWord at InWord:    array[1..16] of bool;     
end_var

var_output
    OutBits: array [1..16] of bool;
end_var

begin 
OutBits := vInWord;
end_function


Последний раз редактировалось Alexey_Spb_82 Сб дек 24, 2011 2:48, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 13:44 
Не в сети

Зарегистрирован: Чт дек 16, 2010 16:46
Сообщения: 6
Откуда: Москва
Можно поподробнее?

Могу использовать только 2 языка: FBD и LAD


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 13:49 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
К сожалению, не работал с FBD, но думаю что концепция Siemens едина для всех языков программирования, поддерживаемых Step 7.

Идея в том что на выходе компиляции всегда получаются блоки (OB/FC/FB/DB). При этом не важно на каком языке они написаны (например, в SCL можно использовать блоки, написанные на STL и наоборот).

Я вам предлагаю скопировать в ваш проект уже скомпилированный блок преобразования и использовать его в вашей программе FB.

Только нужно проект подготовить и выслать с этим блоком, у меня пока нет возможности выложить файл на файлообменник.

Ах да, еще вариант, работает с любым языком.

Берете один меркер размера Word (например, MW100) и в Symbol Table объявляете следующее:

MW100 In_Word
M100.0 Out_Bit_08
...
M100.7 Out_Bit_15
M101.0 Out_Bit_00
...
M101.7 Out_Bit_07

Записываете в In_Word ваше слово, читаете биты из Out_Bit_XX. Непрямая нумерация связана с порядком Big Endian.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 14:27 
Не в сети

Зарегистрирован: Чт дек 16, 2010 16:46
Сообщения: 6
Откуда: Москва
Alexey_Spb_82 писал(а):
Ах да, еще вариант, работает с любым языком.

Берете один меркер размера Word (например, MW100) и в Symbol Table объявляете следующее:

MW100 In_Word
M100.0 Out_Bit_08
...
M100.7 Out_Bit_15
M101.0 Out_Bit_00
...
M101.7 Out_Bit_07

Записываете в In_Word ваше слово, читаете биты из Out_Bit_XX. Непрямая нумерация связана с порядком Big Endian.


Спасибо за совет. Этот вариант я уже рассматривал. Но у меня будет несколько слов на входе в FB, а внутри FB я хотел использовать отдельные биты.
Таким образом мне нужно или все биты делать входными (что по мне - перебор, FB c 64 входами), или сделать входным 4 слова и разложить их внутри FB (что сейчас и пытаюсь сделать)

Надеюсь, понятно объяснил.

Нашел на оф сайте сименса готовые блоки как раз для S7 Basic.
Есил кому нужно, то они здесь http://support.automation.siemens.com/W ... aller=view

В любом случае спасибо за помощь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 18:11 
Не в сети
Это точно не человек

Зарегистрирован: Вт май 03, 2005 17:11
Сообщения: 3547
Alexey_Spb_82: S7 Basic - это для микросистем. Там язык несколько отличен, там нет ни SCL, ни STL в чистом виде:, разве что Tia portal SP2 scl должен появиться


Последний раз редактировалось gre_m Пт дек 23, 2011 18:33, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 18:33 
Не в сети
Это точно не человек

Зарегистрирован: Вт май 03, 2005 17:11
Сообщения: 3547
еще раз относительно типов.

Не сильно вчитавшись в текст и желая того, я втянул сообщество в своеобразную дискуссию. Как уже отмечалось тип инт - он знаковый. Поэтому все разговоры о беззнаковости с точки зрения типов были с моей стороны неправильны. Он перекликался с представлением чисел в процессоре. Поэтому говорить о типах применительно к процессору неправильно: тип - это уровень абстракции и процессору поэтому недоступен. Поэтому можно говорить об интерпретации беззнакового слова как Int, т.е. только как числа со знаком, или как числа без знака - но тогда под понятие INT оно не попадает. Но byte это эквивалент word, и если мы хотим задействовать его в каких-то операциях преобразования типов, то здесь это нужно показать функцией типа Byte_to_int, которая осуществляет типизацию. И не надо путать типизацию с действиями процессора, его арифметики, что возможно, у меня получилась в предыдущих постах.
Но при программировании на STL, который может оперировать с объектами разных типов без явного указания их типов, нужно учитывать моменты внутреннего машинного представления.
Вроде сейчас и покаялся, и написал все правильно. Поэтому предлагаю остановиться


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 23, 2011 22:13 
Не в сети
Известный Писатель

Зарегистрирован: Пн окт 18, 2010 9:28
Сообщения: 158
Откуда: Казахстан
Alexey_Spb_82 писал(а):
porter, напишите блок преобразования на SCL, скомпилируйте и используйте в вашей программе на FBD.

Код:
function WordToBits : void

var_input
     InWord:    word;
    vInWord:    array[1..16] of bool;     
end_var

var_output
    OutBits: array [1..16] of bool;
end_var

begin 
OutBits := vInWord;
end_function


Alexey_Spb_82, мне не понятно как этот код работает.
Вы объявили входные и выходные переменные функции, далее в основной части кода присваиваете массив к массиву, то и есть будет сводиться один к одному, но действия и обработка над переменной InWord отсутствует?!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 24, 2011 2:49 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
Aibek_Reale, я не добавил ключевое слово "at". Кроме того, надо использовать дополнительную переменную т.к. компилятор не разрешает подобное объявление представлений.

Код:
function fc1000 : void

var_input
      InWord:    word;
end_var

var_temp
   TmpWord: word;
  vTmpWord at TmpWord:    array[1..16] of bool;
end_var

var_output
     OutBits: array [1..16] of bool;
end_var

begin 
  TmpWord := InWord;
  OutBits := vTmpWord;
end_function


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 24, 2011 6:44 
Не в сети
Известный Писатель

Зарегистрирован: Пт июл 06, 2007 6:41
Сообщения: 325
Откуда: г. Тюмень, Россия
Aibek_Reale писал(а):
Некоторые "знающие" подсказали мне про применение только старшего и младшего байта для преобразование в дв. слово (если количество байта 4<). Для меня это большая загадка, в уме не складывается как такое можно. Соответственно возникает вопрос, может кто - нибудь знает? Или это очередной МИФ? )))


Это какая-то чушь.
Не стоит даже ломать голову.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 24, 2011 6:45 
Не в сети
Известный Писатель

Зарегистрирован: Пт июл 06, 2007 6:41
Сообщения: 325
Откуда: г. Тюмень, Россия
gre_m писал(а):
Вроде сейчас и покаялся, и написал все правильно. Поэтому предлагаю остановиться


На том и договоримся, коллега :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 27, 2011 13:37 
Не в сети
Известный Писатель

Зарегистрирован: Пн окт 18, 2010 9:28
Сообщения: 158
Откуда: Казахстан
FUNCTION "BIT_TO_WORD" : VOID

VAR_INPUT
IN_BIT0 : BOOL ;
IN_BIT1 : BOOL ;
IN_BIT2 : BOOL ;
IN_BIT3 : BOOL ;
IN_BIT4 : BOOL ;
IN_BIT5 : BOOL ;
IN_BIT6 : BOOL ;
IN_BIT7 : BOOL ;
IN_BIT8 : BOOL ;
IN_BIT9 : BOOL ;
IN_BIT10 : BOOL ;
IN_BIT11 : BOOL ;
IN_BIT12 : BOOL ;
IN_BIT13 : BOOL ;
IN_BIT14 : BOOL ;
IN_BIT15 : BOOL ;

END_VAR

VAR_OUTPUT
VAR_OUT_WORD : WORD ;
END_VAR

BEGIN
NETWORK
TITLE =
L #IN_BIT0;
L #IN_BIT1;
SLD 1;
OD ;
L #IN_BIT2;
SLD 2;
OD ;
L #IN_BIT3;
SLD 3;
OD ;
L #IN_BIT4;
SLD 4;
OD ;
L #IN_BIT5;
SLD 5;
OD ;
L #IN_BIT6;
SLD 6;
OD ;
L #IN_BIT7;
SLD 7;
OD ;
L #IN_BIT8;
SLD 8;
OD ;
L #IN_BIT9;
SLD 9;
OD ;
L #IN_BIT10;
SLD 10;
OD ;
L #IN_BIT11;
SLD 11;
OD ;
L #IN_BIT12;
SLD 12;
OD ;
L #IN_BIT13;
SLD 13;
OD ;
L #IN_BIT14;
SLD 14;
OD ;
L #IN_BIT15;
SLD 15;
OD ;

T #VAR_OUT_WORD;

END_FUNCTION

Не пойму, вроде конструкция понятная:

L #IN_BIT0; // гружу IN_BIT0 в ACCU1
L #IN_BIT1; // гружу содержимое ACCU1 в
ACCU2, затем IN_BIT1 в ACCU1
SLD 1; // сдвигаю на 1 бит влево
OD ; // объединяю биты ACCU1 и ACCU2 по ИЛИ
T #VAR_OUT_WORD; // сохраняю результат в VAR_OUT_WORD.

Если вы заметили речь идет упаковка бит в слово.
Код не работает!!! Хочу найти ошибку, быть может вы в силах увидеть!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group