Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › как правильно достать текст
Помечено: #DecodeAscii, #ToAscii
- В этой теме 48 ответов, 4 участника, последнее обновление 1 месяц, 3 недели назад сделано
manjey73.
-
АвторСообщения
-
26.05.2025 в 22:00 #38560
petuhovdmitry
Участниксделать скрипт, например с указанием первого канала, типа
public string GetVersion(int firstNum)МетОда начинает доходить до меня, благодарю!
27.05.2025 в 14:23 #38571
MikhailМодераторНапишите, пожалуйста, получилось ли добиться результата и каким способом.
27.05.2025 в 14:45 #38572petuhovdmitry
УчастникНапишите, пожалуйста, получилось ли добиться результата и каким способомда, конечно, расскажу
16.02.2026 в 18:24 #42000GoodJuK
Участникподниму тему, дума будет польза, очень сложно осваивать программу без форума =(
столкнулся с проблемой вывода текста в канал, следуя инструкциям из этой темы довёл результат до нормального порядка декодирования 7 из 8 символов, не декодируется символ «2», но в ответе от устройства он есть (парсер показал) подозреваю дело в типе данных знаковый/беззнаковый где-то в области скрипта, но знаний моих не хватает что бы разобраться дальше =( подскажите, пожалуйста, как сделать?
картинки конфигурации:
https://disk.yandex.ru/d/fvoqCiSsdcvb_Q16.02.2026 в 19:21 #42001
manjey73УчастникВам надо указать длину данных, и использовать скрипт Split (кажется), чтобы он по каналам разложил.
Ну и убедиться, что там ascii, а не unicode.Было же такое уже
-
Ответ изменён 1 месяц, 3 недели назад пользователем
manjey73.
16.02.2026 в 19:26 #42003GoodJuK
Участникя не топик стартер темы, у меня 1 канал, из которого корректно декодируются 7 из 8 символов по вашему скрипту,
должно быть: 2TRM1.RS
получаю: (странный символ)TRM1.RSв чём может быть проблема ?
16.02.2026 в 19:29 #42004
manjey73УчастникСтранные символы обычно от кодировки.
С мобилы плохо скрины вижу, так понимаю вы ответ из прибора декодирует?
Киньте сюда hex строку и оберните ее в code, чтобы со скрина не печатать.16.02.2026 в 19:32 #42005
manjey73УчастникПопробуйте в шаблоне оставить его в double.
Лишние преобразования происходят, когда вы ставите ulong мне кажется, и чтобы преобразовать правильно, тоже будут требоваться лишние преобразования.16.02.2026 в 19:41 #42006GoodJuK
Участникя уже в ручную ответ от прибора проверил на корректность там все символы приходят какие нужно, скрипт в канале запарывает первый символ в строке.
ответ от прибора:
5432 4D50 2E31 5352надеюсь правильно сделал…
16.02.2026 в 19:42 #42007
manjey73Участникну 2-ка тут 2-ой байт очевидно (32)
16.02.2026 в 19:57 #42008
manjey73УчастникУ меня работает вариант, когда я формулой последовательные регистры преобразую, 2-ка на месте.
Пример 2ТРМ16.02.2026 в 20:00 #42009GoodJuK
Участникчто вы указываете в формуле? я пробовал из этой ветки форума это:
// Converts the specified value to an ASCII string up to 8 characters long.
// Преобразует заданное значение в строку ASCII длиной до 8 символов.
public string ToAscii(double val)
{
long ll = Convert.ToInt64(val);
byte[] buf = BitConverter.GetBytes(ll);
return Encoding.ASCII.GetString(buf).TrimEnd((char)0);
}немного другая формула для этого — ToAscii при необходимости переставьте байты драйвером
не помогает =(
16.02.2026 в 20:07 #42010
manjey73УчастникНу у меня там формула сборки каналов, когда регистры читаются отдельно по 2 и их может быть более 4-х. Типа для длинных строк.
я последовательно ввел в десятичном виде пары байт (видно выше строки) кроме последнего эмулируемого регистра.
Если у вас всегда 4 регистра, то есть 8 байт, то формула должна быть проще. Просто не преобразуйте ее в ulong для начала.
16.02.2026 в 20:15 #42011GoodJuK
Участникспасибо вам за желание помочь, но я не программист, мне словесное описание принципа абсолютно ничего не даёт, вы можете в формате инструкции для домохозяйки сказать как мне вывести текст ?
16.02.2026 в 21:41 #42012
manjey73Участник3254 504D 312E 5253 — в канал байты должны попасть вот так — выставьте правильную перестановку байт
Во входной формуле просто DecodeAscii(Cnl), формат канала String
Тип данных по умолчанию, то есть Double, соответственно в шаблоне тип оставьте doubleЕсли я не ошибся. Так как я эмулирую, подавая в канал 16-ричный вариант числа
-
Ответ изменён 1 месяц, 3 недели назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.