Форум » » Вопрос по S+ » Ответить

Вопрос по S+

p.vladi: Доброе время суток! Унаследовал объект, пытаюсь разобрать код - разбит по 4 (!) процессорам PRO2, 2x CP2e, и QM-RMC. Разбил все процессоры в слоты для CP3, чтобы у себя тихо и спокойно поковырять дебагером. Проблема в том, что некоторый код не компилируется, подскажите пожалуйста, как можно поменять эту функцию для совместимости с третей серией.. - ругается на Varialble cannot be passed to read or write file operations [quote] nFileHandle = FileOpen(FileLocation,_O_WRONLY | _O_CREAT | _O_TRUNC | _O_BINARY); if( nFileHandle >= 0 ){ WriteSignedInteger( nFileHandle, ValueIn); FileClose( nFileHandle ); pulse(25, writecomplete); [/quote] Заранее спасибо! P.S. Весь модуль [more]/******************************************************************************************* SIMPL+ Module Information *******************************************************************************************/ /* Dealer Name: Accurro Ltd System Name: Integer Read/Write System Number: UP0004 Programmer: Nitan Patel Comments: Revision: 001 - Initial Release */ /******************************************************************************************* Compiler Directives *******************************************************************************************/ #SYMBOL_NAME "UP0017.Signed Integer.Save.001" // #HINT "" // #DEFINE_CONSTANT // #CATEGORY "" // #DEFAULT_VOLATILE // #DIGITAL_EXPAND // #ANALOG_SERIAL_EXPAND // #OUTPUT_SHIFT #DEFAULT_VOLATILE #ENABLE_STACK_CHECKING /******************************************************************************************* DIGITAL, ANALOG and SERIAL INPUTS and OUTPUTS *******************************************************************************************/ DIGITAL_INPUT Write, Read; ANALOG_INPUT ValueIn; DIGITAL_OUTPUT WriteComplete, ReadComplete; ANALOG_OUTPUT ValueOut; STRING_INPUT Disk[5]; /******************************************************************************************* Global Variables *******************************************************************************************/ volatile string FileLocation[50]; /******************************************************************************************* Functions *******************************************************************************************/ function WriteData(){ signed_integer nFileHandle; startfileoperations(); if ((disk="CF0")&&(checkfordisk()=1)){ nFileHandle = FileOpen(FileLocation,_O_WRONLY | _O_CREAT | _O_TRUNC | _O_BINARY); if( nFileHandle >= 0 ){ WriteSignedInteger( nFileHandle, ValueIn); FileClose( nFileHandle ); pulse(25, writecomplete); } else{ print("\nWRITE FAILED\n"); } } else if ((disk="NVRAM")&&(checkfornvramdisk()=1)){ nFileHandle = FileOpen(FileLocation,_O_WRONLY | _O_CREAT | _O_TRUNC | _O_BINARY); if( nFileHandle >= 0 ){ WriteSignedInteger( nFileHandle, ValueIn); FileClose( nFileHandle ); pulse(25, writecomplete); } else{ print("\nWRITE FAILED\n"); } } else{ print("\nSPECIFIED DISK NOT FOUND\n"); } endfileoperations(); } function ReadData(){ signed_integer nFileHandle; signed_integer i; startfileoperations(); if ((disk="CF0")&&(checkfordisk()=1)){ nFileHandle = FileOpen(FileLocation,_O_RDONLY); if( nFileHandle >= 0 ){ ReadSignedInteger( nFileHandle, i); FileClose( nFileHandle ); ValueOut = i; pulse(25, readcomplete); } else{ print("\nREAD FAILED\n"); } } else if ((disk="NVRAM")&&(checkfornvramdisk()=1)){ nFileHandle = FileOpen(FileLocation,_O_RDONLY); if( nFileHandle >= 0 ){ ReadSignedInteger( nFileHandle, i); FileClose( nFileHandle ); ValueOut = i; pulse(25, readcomplete); } else{ print("\nREAD FAILED\n"); } } else{ print("\nSPECIFIED DISK NOT FOUND\n"); } endfileoperations(); } /******************************************************************************************* Event Handlers *******************************************************************************************/ PUSH Read { makestring(FileLocation,"\\%s\\%s",Disk,GetSymbolReferenceName()); ReadData(); } PUSH Write { makestring(FileLocation,"\\%s\\%s",Disk,GetSymbolReferenceName()); WriteData(); } [/more]

Ответов - 3

Игорь K.: Я бы первым делом, проверил в S+ Редакторе наличие галочки - build --> 3-series control system target И откомпилировать снова.

p.vladi: Первым делом проверил :-) проблема как раз в компиляции для 3 серии. Для второй компилирует, а для 3 нет. Отправил голубому помощнику, сообщу что они скажут

p.vladi: Ответ от голубого помощника: Для третей серии функция WriteSignedInteger не может принять значение из входа (в модуль) Нужно сделать переменную SignedInteger, затем MySignedIntegerVar = ValueIn и уже WriteSignedInteger( nFileHandle, MySignedIntegerVar ); В хелпе конечно это не описано, и почему работает для второй серии, а не третей - тоже вдруг кому пригодится




полная версия страницы