Страница 1 из 1

формирование двоичного файла

СообщениеДобавлено: Чт янв 21, 2010 7:10 am
golportret
Уважаемые коллеги, подскажите, плиз, как сформировать и записать на диск двоичный файл. Проблема в том, что, например, не работает ф-ия StringChar(0) - т.е. я не могу записать в строку байт, равный 0!((
Спасибо.

СообщениеДобавлено: Чт янв 21, 2010 4:00 pm
alex3000plus
А что Вы ожидали вернет эта функция? Просто по-моему нет такого символа, это вроде конец строки.

СообщениеДобавлено: Чт янв 21, 2010 4:23 pm
golportret
alex3000plus писал(а):А что Вы ожидали вернет эта функция? Просто по-моему нет такого символа, это вроде конец строки.


Конец строки - это #13.
А ожидал записи в файл байта с нулевым значением - простой такой байт, где все биты - нули! :)
Тем более, что в доке указан диапазон допустимых входных значений функции StringChar - 0-255. Хочу сформировать двоичный файл, где каждый байт может принимать значения от 0 до 255.

СообщениеДобавлено: Чт янв 21, 2010 5:55 pm
alex3000plus
Не, #13 - это возврат каретки (переход в начало строки).
Про доки согласен, там так написано. Но я бы у того, кто писал эти доки и функции спросил бы тоже самое.

А Вы уже пытались писать в файл? Какой функцией? Другие непечатные символы пишутся? Я ща точно не могу сказать, но мне кажется, что средствами интача такое может и не получиться.

СообщениеДобавлено: Пт янв 22, 2010 2:52 am
golportret
alex3000plus писал(а):Не, #13 - это возврат каретки (переход в начало строки).
Про доки согласен, там так написано. Но я бы у того, кто писал эти доки и функции спросил бы тоже самое.

А Вы уже пытались писать в файл? Какой функцией? Другие непечатные символы пишутся? Я ща точно не могу сказать, но мне кажется, что средствами интача такое может и не получиться.


Пытался, ф-ия: FileWriteMessage - их всего 2 - 2-я пишет данные, разделённые запятыми. В ИнТаче это, кажется, просто баг(( Казалось бы для бинарного файла не должно быть разницы 0 или, к примеру 224?

СообщениеДобавлено: Пт янв 22, 2010 4:49 am
golportret
alex3000plus писал(а):Другие непечатные символы пишутся?


В файл пишутся все остальные 255 символов в диапазоне 1-255, InTouch боится/чурается/не понимает только 0! :shock:
Странно, человечество изобрело 0 уже очень давно - почему в Wonderware ещё об этом не знают? :D

СообщениеДобавлено: Пт янв 22, 2010 6:04 am
golportret
Ситуация оказывается ещё безнадёжнее, чем представлялась: при получении из ОРС-сервера строки, содержащей двоичные нули - все символы после этого двоичного нуля - игнорируются... :evil:

СообщениеДобавлено: Пт янв 22, 2010 9:38 am
Klinkmann_Msk
To golportret:
Как я уже сказал, можно воспользоваться техподдержкой непосредственно WW.
Для этого киньте заявку мне (Mikhail.Gurov@Klinkmann.SPb.ru), а я её переправлю (куда-нибудь :twisted: )
Обязательно укажите свои контактные данные (компания, отдел, должнось, контакты,...), т.к. наша компания не работает с анонимами.
Письма с корпоративных адресов приветствуются :) А всякие Mail.ru оседают в спам-фильтре :)

СообщениеДобавлено: Пт янв 22, 2010 10:31 am
golportret
Klinkmann_Msk писал(а):To golportret:
Как я уже сказал, можно воспользоваться техподдержкой непосредственно WW.
Для этого киньте заявку мне (Mikhail.Gurov@Klinkmann.SPb.ru), а я её переправлю (куда-нибудь :twisted: )
Обязательно укажите свои контактные данные (компания, отдел, должнось, контакты,...), т.к. наша компания не работает с анонимами.
Письма с корпоративных адресов приветствуются :) А всякие Mail.ru оседают в спам-фильтре :)


Интересно, а что - техподдержка баги уберёт? :wink:

СообщениеДобавлено: Пт янв 22, 2010 10:33 am
Klinkmann_Msk
To golportret:
У них может быть "заплатка" или посоветуют что-либо "умное" :)

СообщениеДобавлено: Сб янв 23, 2010 11:19 am
Spaun
Если честно, непонял в чём вопрос и собственно проблема?
StringChar() возвращает символ, соответствующий ASCII коду.
ASCII код 0 это 48
ASCII код 1 это 49 и т.д. и т.п.

Пишем StringChar( 48 ) - получаем в тексте 0,
пишем StringChar( 49 ) - получаем в тексте 1
пишем StringChar( 13 ) - получаем аналог нажатия "Enter"

для обратного используем StringASCII()

СообщениеДобавлено: Вс янв 24, 2010 4:55 pm
golportret
Spaun писал(а):Если честно, непонял в чём вопрос и собственно проблема?
StringChar() возвращает символ, соответствующий ASCII коду.
ASCII код 0 это 48
ASCII код 1 это 49 и т.д. и т.п.

Пишем StringChar( 48 ) - получаем в тексте 0,
пишем StringChar( 49 ) - получаем в тексте 1
пишем StringChar( 13 ) - получаем аналог нажатия "Enter"

для обратного используем StringASCII()


Что же вы, уважаемый не продолжили? :x StringChar(0)?
На самом деле ситуация такая (подсказали добрые люди): в InTouch строка - это StringChar(i), где i в диапазоне 1-255, и это принципиально, по определению и т.п. 0 - это признак конца строки - и это везде!((
Печаль высказана, потому как при приёме данных из ОРС-сервера, когда в качестве одного из значащих символов поступает двоичный ноль, то приём благополучно завершается(( По моему мнению, это жуткий недостаток InTouch, хотя во многих отношениях это хорошая Скада.

СообщениеДобавлено: Пн янв 25, 2010 6:48 am
Spaun
Это не баг.
ASCII состоит из:
1.Стандартного набора символов (от 0 до 127),назначенных буквам, цифрам, знакам препинания и самым употребляемым специальным символам;
Значениями 0-32 и 127 закодированы непечатаемые символы. Они не имеют графического представления;
2.Расширенного набора символов (от 128 до 255), представляющих дополнительные специальные, математические, графические и иностранные символы.

СообщениеДобавлено: Пн янв 25, 2010 8:43 am
Klinkmann_Msk
To golportret:
0 - это признак конца строки - и это везде!
Только там, где используются C-строки, так называемые Null-Terminated. А есть ещё и Pascal-строки :)