К сожалению, сам стандарт 61131 крайне странный.
Технически, там BYTE-WORD-DWORD это не числа, а bit strings. Т.е. они предназначены только для работы с битами.
При этом, сложение-вычитание этих самых BYTE в стандарте не предусмотрено.
Но программисты (почему-то!) хотят писать код в духе dwordVar := 1; или dwordVar := dwordVar + 1;
С точки зрения стандарта вообще непонятно как оно должно работать (и должно ли), но заставлять программистов указывать вручную что-то типа dwordVar := DINT_TO_DWORD(DWORD_TO_DINT(dwordVar) + 1); было бы совсем дико (а, может, и нет).
CoDeSys пошли по пути автоматических неявных приведений типов (почти любых к любым). А, значит, будут случаи, когда "автоматика" сработает самым неожиданным образом.
По какому пути пойдут разработчики MS -- интересно.





Ответить с цитированием