Добрый день!
Подскажите пожалуйста, как правильно подключить две панели Weintek к одному плк S-1200
test.test писал(а):пока мы находимся на первом экране ,кнопка перехода на первый экран становиться зеленого цвета
tangra.god писал(а):Добрый день!
Подскажите пожалуйста, как правильно подключить две панели Weintek к одному плк S-1200
Gray-Gray писал(а):Здравствуйте.
Имеется блок данных ПЛК в котором каждый бит вызывает всплывающее сообщение на панели оператора. Самый простой способ использовать нужное кол-во объектов Direct Window со стилем Popup window и экранов с сообщениями.
Есть ли другие варианты всплывающих сообщений?
ArtemPM писал(а):Number17 писал(а):При определении тегов вроде как ставиться двоеточие, и тут по аналогии.
Вы что-то путаете. Двоеточие не ставится ни где. Возможно в определении тегов такая конструкция и работает, как работают и точка и запятая, но макросы в этом плане строже.
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
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 становится отрицательной величиной код генерирует “мусор”. Что нужно сделать чтобы макрос правильно рассчитывал?
dikh писал(а):Добрый день.
Пытаюсь пересчитать температуру в давление с помощью следующего кода:
Код работает отлично когда а > 0, но когда a становится отрицательной величиной код генерирует “мусор”. Что нужно сделать чтобы макрос правильно рассчитывал?
j = a / 100
j = a / 100.0
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.
a = ROUND(i * 100)
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 писал(а)://полученное значение фактическое -10.58, переводим в формат -1058
j = i * 100.0
a = j
//полученное значение фактическое -10.58, переводим в формат -1058
j = i * 100.0
TRACE( "j = %f", j )
a = j
TRACE( "a = %d", a )
Сейчас этот форум просматривают: Bing [Bot] и гости: 85