EasyBuilder - Скорая помощь новичкам

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Re: EasyBuilder - Скорая помощь новичкам

Сообщение tangra.god » 01 дек 2021, 16:45

Добрый день!
Подскажите пожалуйста, как правильно подключить две панели Weintek к одному плк S-1200
tangra.god
 
Сообщения: 33
Зарегистрирован: 10 июн 2021, 11:45

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Gray-Gray » 01 дек 2021, 17:30

test.test писал(а):пока мы находимся на первом экране ,кнопка перехода на первый экран становиться зеленого цвета

у вас получилось расположить на экране такую кнопку?
Gray-Gray
 
Сообщения: 9
Зарегистрирован: 30 сен 2020, 15:15

Re: EasyBuilder - Скорая помощь новичкам

Сообщение tangra.god » 01 дек 2021, 19:32

tangra.god писал(а):Добрый день!
Подскажите пожалуйста, как правильно подключить две панели Weintek к одному плк S-1200

Узнал, что при подключении 2ух панелей к ПЛК S-1200, по собственному протоколу Сименс, проблем не возникнет, т.к. ПЛК поддерживает до 2ух панелей.
Для общего развития, расскажите пожалуйста, как можно реализовать систему где нужно больше 2ух панелей Weintek (например 5)
tangra.god
 
Сообщения: 33
Зарегистрирован: 10 июн 2021, 11:45

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ArtemPM » 02 дек 2021, 03:24

Gray-Gray писал(а):Здравствуйте.
Имеется блок данных ПЛК в котором каждый бит вызывает всплывающее сообщение на панели оператора. Самый простой способ использовать нужное кол-во объектов Direct Window со стилем Popup window и экранов с сообщениями.
Есть ли другие варианты всплывающих сообщений?

Самый простой способ использовать битовый индикатор с пустым нулевым состоянием.
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Number17 » 02 дек 2021, 14:18

ArtemPM писал(а):
Number17 писал(а):При определении тегов вроде как ставиться двоеточие, и тут по аналогии.

Вы что-то путаете. Двоеточие не ставится ни где. Возможно в определении тегов такая конструкция и работает, как работают и точка и запятая, но макросы в этом плане строже.


В определении тегов точно работает.
Изображение
Number17
 
Сообщения: 152
Зарегистрирован: 06 мар 2018, 12:08

Re: EasyBuilder - Скорая помощь новичкам

Сообщение dikh » 03 дек 2021, 08:32

Добрый день.
Пытаюсь пересчитать температуру в давление с помощью следующего кода:
Код: Выделить всё
macro_command main()

int a
float i, j

GetData(a, "Local HMI", LW, 501, 1)
//считываем значение в формате -1058, фактическое -10.58
j = a / 100

i = (0.00000005*j*j*j*j + 0.00001347*j*j*j + 0.00228302*j*j + 0.19636593*j + 5.32258081)

//полученное значение фактическое -10.58, переводим в формат -1058
a = i * 100

SetData(a, "Local HMI", LW, 502, 1)

end macro_command

Код работает отлично когда а > 0, но когда a становится отрицательной величиной код генерирует “мусор”. Что нужно сделать чтобы макрос правильно рассчитывал?
dikh
 
Сообщения: 24
Зарегистрирован: 02 дек 2021, 08:29

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Number17 » 03 дек 2021, 10:59

dikh писал(а):Добрый день.
Пытаюсь пересчитать температуру в давление с помощью следующего кода:
Код: Выделить всё
macro_command main()

int a
float i, j

GetData(a, "Local HMI", LW, 501, 1)
//считываем значение в формате -1058, фактическое -10.58
j = a / 100

i = (0.00000005*j*j*j*j + 0.00001347*j*j*j + 0.00228302*j*j + 0.19636593*j + 5.32258081)

//полученное значение фактическое -10.58, переводим в формат -1058
a = i * 100

SetData(a, "Local HMI", LW, 502, 1)

end macro_command

Код работает отлично когда а > 0, но когда a становится отрицательной величиной код генерирует “мусор”. Что нужно сделать чтобы макрос правильно рассчитывал?


Возможно дело в типах данных и их неявном преобразовании. а у вас int, остальное float. В экселе ваши формулы вроде как адекватно считаются.
Number17
 
Сообщения: 152
Зарегистрирован: 06 мар 2018, 12:08

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ArtemPM » 03 дек 2021, 11:20

dikh писал(а):Добрый день.
Пытаюсь пересчитать температуру в давление с помощью следующего кода:

Код работает отлично когда а > 0, но когда a становится отрицательной величиной код генерирует “мусор”. Что нужно сделать чтобы макрос правильно рассчитывал?

Как уже было сказано ранее - неявное преобразование типов играет против вас в строке:
Код: Выделить всё
j = a / 100

Попробуйте заменить эту конструкцию на
Код: Выделить всё
j = a / 100.0

Так компилятор поймет, что необходимо результат деления записать как Float.
Вот из мануала текст:
By default, integer numbers (1, 2,3..etc) are considered having integer data type; therefore,
when division is carried out involving two integer numbers where the result should have
decimal point, the decimal part will be removed. To avoid this, add .0 (1.0, 2.0, 3.0...etc) behind
the dividend or the divisor to turn it into a floating point number calculation.
Examples:
A = 3 / 2 = 1 » 3 and 2 are both integers; therefore the result is an integer.
B = 3 / 2.0 = 1.5 » 3 is an integer whereas 2.0 is a floating point number, therefore the
result is a floating point number.
C = 3.0 / 2 = 1.5 » 3.0 is a floating point number whereas 2 is an integer, therefore the
result is a floating point number.

Ну и еще для гарантий в строке 13 напишите:
Код: Выделить всё
a = ROUND(i * 100)
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: EasyBuilder - Скорая помощь новичкам

Сообщение dikh » 03 дек 2021, 12:51

ArtemPM писал(а):
dikh писал(а):Добрый день.
Пытаюсь пересчитать температуру в давление с помощью следующего кода:

Код работает отлично когда а > 0, но когда a становится отрицательной величиной код генерирует “мусор”. Что нужно сделать чтобы макрос правильно рассчитывал?

Как уже было сказано ранее - неявное преобразование типов играет против вас в строке:
Код: Выделить всё
j = a / 100

Попробуйте заменить эту конструкцию на
Код: Выделить всё
j = a / 100.0

Так компилятор поймет, что необходимо результат деления записать как Float.
Вот из мануала текст:
By default, integer numbers (1, 2,3..etc) are considered having integer data type; therefore,
when division is carried out involving two integer numbers where the result should have
decimal point, the decimal part will be removed. To avoid this, add .0 (1.0, 2.0, 3.0...etc) behind
the dividend or the divisor to turn it into a floating point number calculation.
Examples:
A = 3 / 2 = 1 » 3 and 2 are both integers; therefore the result is an integer.
B = 3 / 2.0 = 1.5 » 3 is an integer whereas 2.0 is a floating point number, therefore the
result is a floating point number.
C = 3.0 / 2 = 1.5 » 3.0 is a floating point number whereas 2 is an integer, therefore the
result is a floating point number.

Ну и еще для гарантий в строке 13 напишите:
Код: Выделить всё
a = ROUND(i * 100)

Не помогло(((
Код: Выделить всё
macro_command main()

int a
float i, j

GetData(a, "Local HMI", LW, 501, 1)
//считываем значение в формате -1058, фактическое -10.58
j = a / 100.0

i = (0.00000005*j*j*j*j + 0.00001347*j*j*j + 0.00228302*j*j + 0.19636593*j + 5.32258081)

//полученное значение фактическое -10.58, переводим в формат -1058
j = i * 100.0

a = j

SetData(a, "Local HMI", LW, 502, 1)

end macro_command
dikh
 
Сообщения: 24
Зарегистрирован: 02 дек 2021, 08:29

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Number17 » 03 дек 2021, 13:12

dikh писал(а)://полученное значение фактическое -10.58, переводим в формат -1058
j = i * 100.0

a = j


Вы вот тут переменной типа int присваиваете значение типа float.
Посмотрите через TRACE значения переменных на всех этапах вычисления.

Код: Выделить всё
//полученное значение фактическое -10.58, переводим в формат -1058
j = i * 100.0

TRACE( "j = %f", j )

a = j

TRACE( "a = %d", a )



Если значение j адекватное, то дело в присвоении a = j. Если нет, то ищите подобным способом выше где прокол.
Number17
 
Сообщения: 152
Зарегистрирован: 06 мар 2018, 12:08

Пред.След.

Вернуться в Weintek

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

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