if open()=FFFFFFFF then close() open() end_if. - нормальная последовательность, попробовал открыть - неудачно - значит уже открыт ранее, закрою и попробую снова.

16#FFFFFFFF - Это (-1), кто не догадался. Господин Петров подробно разъяснил ранее на форуме, откуда тут ноги растут.

Если после SysComWrite() сразу делать SysComClose(), write(), похоже не работает. Нужно "подождать". Интересно, для файлов тоже нужно ждать, пока буфер сбросится?

А как Вы хотите? Байты, они не мгновенно отсылаются, а один за одним.

Для файлов опасен только сброс, закрывайте без опаски, скорость записи ~60-100 кБайт в секунду. Размер буфера записи 30 кбайт.