Это происходит когда не соблюдается выравнивание (доступ к REAL по некратному 4 адресу или к WORD по некратному 2 адресу, например), либо от неудачного вылета за границы массива. Скорее всего, первое, потому что строки попадают на «кривые» адреса, которые вы потом разыменовываете. Можете попробовать SysLibMem — там есть SysMemCpy.
Код:SysMemSet(ADR(modbus_group1), PACK(parameter11, parameter12...), 1); SysMemCpy(ADR(modbus_group2) + 0, ADR(parameter21), SIZEOF(parameter21)); SysMemCpy(ADR(modbus_group2) + 2, ADR(parameter22), SIZEOF(parameter22)); tmp := REAL_TO_INT(parameter31 * 100); SysMemCpy(ADR(modbus_group3) + 0, ADR(tmp), SIZEOF(tmp)); tmp := REAL_TO_INT(parameter32 * 100); SysMemCpy(ADR(modbus_group3) + 2, ADR(tmp), SIZEOF(tmp));




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