Что такое user data types, и как его едят ??????

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
a_gricaj
Posts: 202
Joined: Wed Mar 19, 2008 1:12 pm
Location: Ukraine

Что такое user data types, и как его едят ??????

Post by a_gricaj »

Собственно вопрос в теме, обясните на пальцах плз
Schtiel
Site Admin
Posts: 1122
Joined: Wed Sep 06, 2006 12:03 pm
Location: CIS

Re: Что такое user data types, и как его едят ??????

Post by Schtiel »

Ну так в документации Сименса и так на пальцах объяснено:

Пользовательские типы данных (User Data Types)
Пользовательские типы данных – это специальные структуры данных (комбинации компонентов любых типов).
Типы UDT обладают глобальным действием; то есть, они описываются один раз и доступны для использования во всех блоках (FC, FB, OB).

Ну т.е. например, UDT - структура, состоящая из трех целых чисел и т.п.
a_gricaj
Posts: 202
Joined: Wed Mar 19, 2008 1:12 pm
Location: Ukraine

Re: Что такое user data types, и как его едят ??????

Post by a_gricaj »

Это в доках Сименса я прочитал, а вот осмыслить не могу, что да как........
Schtiel
Site Admin
Posts: 1122
Joined: Wed Sep 06, 2006 12:03 pm
Location: CIS

Re: Что такое user data types, и как его едят ??????

Post by Schtiel »

Ну создаешь свой собственный тип данных, состоящий из простых (базовых) типов данных, и дальше используешь его в программе, как и любой друг тип данных.

Например так:

Image

Image
a_gricaj
Posts: 202
Joined: Wed Mar 19, 2008 1:12 pm
Location: Ukraine

Re: Что такое user data types, и как его едят ??????

Post by a_gricaj »

А если по моему примеру

Блок UDT

Image

Блок данных

Image


Почему в дб 30 байт, а в UDT 1 бит????
CHANt
Posts: 501
Joined: Tue Jun 27, 2006 5:52 am
Location: Russia

Re: Что такое user data types, и как его едят ??????

Post by CHANt »

если на пальцах ), то вся твоя таблица UDT1501 и есть пользовательский тип данных - одна переменная, просто сложная.
Она у тебя еще и из структурных типов данных состоит, в которых нужный тебе бит.
Т.е. ты можешь написать например FC или FB c одной входной переменной с типом данных UDT, а внутри функции работать хоть со структурным типом, хоть с битом, как тебе удобней.
Вызов будет:

Code: Select all

CALL FC1
INPUT:=UDT1501
Соответственно, внутри FC1 придется обратится к нужному биту" длинным адресом"

Code: Select all

А #INPUT.Status.Zal
= #INPUT.Sterowanie.rez1
Это нужно когда требуется большое кол-во одинаковых массивов разнотипных данных.
Вот они у тебя в DB и объявлены (по 30 байт). Т.е. ты можешь обратиться к ним:

Code: Select all

A  DB1501.P01RM.Status.Zal
= DB1501.P02RM.Status.Zal
a_gricaj
Posts: 202
Joined: Wed Mar 19, 2008 1:12 pm
Location: Ukraine

Re: Что такое user data types, и как его едят ??????

Post by a_gricaj »

Спасибо вроде понятно, ток надо попробовать...
CHANt
Posts: 501
Joined: Tue Jun 27, 2006 5:52 am
Location: Russia

Re: Что такое user data types, и как его едят ??????

Post by CHANt »

Это называется структурное программирование.
Т.е., как пример, в части приводимого примера ранее, в FC1 ты завел одну переменную UDT. Внутри FC1 ты работаешь с переменными "Status" и "Sterowanie", которые подаешь на входа/выхода следующих блоков, а внутри последних уже работаешь с низовой структурой - элементарными типами данных. Налицо резкое сокращение кол-во тегов в случае применения повторяющихся участков кода (однотипного оборудования). Еще как пример - представь какие возможности для динамического обращения через косвенную адресацию. :)