Цитата Сообщение от 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 можно заменить на умножение,возможно код будет еще меньше