Так ужеж предлагали к терапевту, пардон автору .. не хотит!
Если станок куплен с обязательством NDA (так бывает), то данная проблема - прямое юридическое основание для ТРЕБОВАНИЯ от автора устранения косяка в программе. Можете смело подавать в суд, если автор заартачится и требовать найма экспертов для доказательства косяка в суде и возложении всех судбных издержек и потерь времени (неполученной прибыли) на писателя этого сектретного дерьма. Точка.
Если этот путь вас НЕ устраивает по каким-либо причинам, и автор отказывается править - публикуйте программу, возможно тут найдутся желающие вам помочь (в чем я уже сильно сомневаюсь, разве что за бабки), ибо "лимит бесплатной помощи" имхо - исчерпан.
утром я трезвее, а значит - хоть немного добрее ;)
1. Вы не понимаете про 8-чные константы. Это НИГДЕ не задается, просто любое число, начинающееся с "0" - является 8-чной константой. Это правила языка программирования. Вот поэтому остальные числа - у Вас в порядке, на них компилятор не ругается, и на "8" и на "9", потому, что они с "0" не начинаются.
{75, 075} АБСОЛЮТНО ТОЖЕ САМОЕ, что {75, 61}, а {85, 085} - существовать не может, вообще, никогда, ни при каких изощрениях!
Надеюсь с тем, что "компилятор на "9" ругается" больше непонимания нет?
Запятая, по правилам языка, разделяет числа, одно от другого.
Ответьте на этот вопрос, тогда можно медленно перейти дальше.
Мне не понятно другое, все мои расчёты сделаны в десятичной системе и станок результат выводит тот, что я и расчитал. А вот некоторые шаги резьбы, получаются, по мнению программы, в восьмеричной системе. Как тогда объснить целую часть числа ?
Про нуль понятно. Запятая отделяет целое число от дробной части, того же числа.
Блять, ты упоротый или где? Сказано тебе, что в языках С/С++ разделителем целой и дробной частей числа является точка, ты опять херню несёшь!
У тебя там поля структуры заполняются, это видно по использованию фигурных скобок. А через запятую указываются члены этой структуры. Я щас тебе примерно накидаю её определение:
//{ 25, 2954, 12, 8571, "0.35mm", " 999rpm" }
typedef struct
{
int x;
int xFract;
int y;
int yFract;
const char* description1;
const char* description2;
} command;
Глянь, не тупи - примерно так оно описано в секретном, сука, счетче?
давайте пока отрешимся от всего и отвечаем только на мои вопросы. Без "извините", без "все так работает". Что, где, как и почему работает - разберемся потом. Я еще вчера писал, что у меня нет оснований Вам не довереять. ОК?
Мне не понятно другое, все мои расчёты сделаны в десятичной системе и станок результат выводит тот, что я и расчитал. А вот некоторые шаги резьбы, получаются, по мнению программы, в восьмеричной системе. Как тогда объснить целую часть числа ?
Потому что тот, кто писал твой секретный скетч - быдлокодер. И не учёл того, что при требовании точности в 4 знака после запятой нельзя тупо загонять четыре циферки в поле структуры, держащее дробную часть числа, потому как ВНЕЗАПНО эти циферки могут начинаться с 0, как итог - компилятор может ругнуться, если циферки правее содержат 8 или 9. Поскольку ведущий 0 - это ПРЯМОЕ указание компилятору на то, что последующие циферки представляют число в ВОСЬМЕРИЧНОЙ системе счисления.
Тебя не удивляет сам факт того, что в исходном коде можно писать числа в различных системах счисления? Если не удивляет, тогда не должно удивлять и то, что компилятору похер, какое число ты записал в переменную - синтаксический анализатор для начала проверяет, правильно ли написан код, в том числе - правильно ли указаны числа в соответствии с выбранной системой счисления. И если ты пишешь у числа 0 в начале - в нём не могут быть 8 и 9.
Если ты пишешь 0x в начале числа - то это представление числа в шестнадцатеричной системе, там крайняя буква - это F. Попробуй туда вставить что-то иное, например, 0xFUCK, и посмотри, как оно - поймётся компилятором или нет.
Хорошо. Теперь в токарно-винторезных терминах поясните наименования
Ks_Div;
Km_Div;
Kcs_Div;
Kcm_Div;
---------------
И еще - просящий Вы, поэтому сбавьте тон. Мы, после Ваших тупых вопросов, имеем моральное право хоть говном назвать, хоть нах послать, а ВЫ ПРОСИТЕ ПОМОЩИ, поэтому терпите любое обращение и будьте вежливы, так понятно? Если помощь нужна - терпите, если не желаете терпеть - разбирайтесь сами, так понятно?
Мне не понятно другое, все мои расчёты сделаны в десятичной системе и станок результат выводит тот, что я и расчитал. А вот некоторые шаги резьбы, получаются, по мнению программы, в восьмеричной системе. Как тогда объснить целую часть числа ?
Автор исходного ПО сам себе придумал некий способ записи исходных данных. Ему по неизвестной причине (уперлось) понравилось разделить запятыми, т.е. записать как отдельные числа целую и дробную части. Поскольку целая часть нигде с 0 не начинается, то компиллятор переводит ее на машинный язык правильно. А с дробной частью получается некорректная запись. Автор по сути пишет так, как дробная часть должна выглядеть при записи на бумаге, но по правилам программирования запись означает совсем другое. Автору этого ПО это было неизвестно (не программист). А теперь - ...опа.
Пользуясь вашим жаргоном отвечаю, блять, тупица, вот фрагмент из скетча
Вот, вижу, что ты самокритично отнёсся к своим способностям, похвально.
mat пишет:
// ***** Threads *****
typedef struct
{
byte Ks_Div;
int Km_Div;
byte Kcs_Div;
int Kcm_Div;
char Text[7];
char Sp_Lim[8];
}THREAD_INFO;
};
ЧТД, цуко. Целая часть числа отдельно, дробная - отдельно. Если хочется оперировать точностью после запятой в 4 знака - пиши числа после запятой без ведущего нуля, точка. Править надо не определение массива, а код, в котором работается с параметрами структуры Km_Div, Kcm_Div - там и смотреть: если число меньше 1000, то предпринимать дополнительные действия (например, дополнительно делить на 10*нужное_кол_во_разрядов).
Да, человек писавший это, по вашей терминологии, быдлокодер. Но, он написал это и оно работает, а профессиональные программисты утверждали что, Arduino не сможет это обработать, не хватит быстродействия, ресурсов и прочее, а нужно как минимум STM32.
Хорошо. Теперь в токарно-винторезных терминах поясните наименования
Ks_Div;
Km_Div;
Kcs_Div;
Kcm_Div;
---------------
И еще - просящий Вы, поэтому сбавьте тон. Мы, после Ваших тупых вопросов, имеем моральное право хоть говном назвать, хоть нах послать, а ВЫ ПРОСИТЕ ПОМОЩИ, поэтому терпите любое обращение и будьте вежливы, так понятно? Если помощь нужна - терпите, если не желаете терпеть - разбирайтесь сами, так понятно?
Это подачи, продольные и поперечные. На счёт тона, прошу, не сердитесь. Не я начал таким тоном вести беседу.
Да, человек писавший это, по вашей терминологии, быдлокодер. Но, он написал это и оно работает, а профессиональные программисты утверждали что, Arduino не сможет это обработать, не хватит быстродействия, ресурсов и прочее, а нужно как минимум STM32.
ТЬы нахер сюда припёрся-то? Оно же, блять, работает? Или - уже не работает, т.к. в быдлокоде ВНЕЗАПНО вылезла архитектурная дыра? Тебе об этом и говорят, а ты - исходишь на гавно. Чуется мне, что ты сам тоже приложил руку к написанию сего поделия, вот и бомбит у тебя.
Если бы не спесивничал и нормально отвечал на вопросы и просьбы показать кусок кода изначально - отношение к тебе было бы другое, а так, извини - сам напросился.
Я тебе уже написал выше, в чём проблема и как её можно подправить. Вопросы?
Да, человек писавший это, по вашей терминологии, быдлокодер. Но, он написал это и оно работает, а профессиональные программисты утверждали что, Arduino не сможет это обработать, не хватит быстродействия, ресурсов и прочее, а нужно как минимум STM32.
ТЬы нахер сюда припёрся-то? Оно же, блять, работает? Или - уже не работает, т.к. в быдлокоде ВНЕЗАПНО вылезла архитектурная дыра? Тебе об этом и говорят, а ты - исходишь на гавно. Чуется мне, что ты сам тоже приложил руку к написанию сего поделия, вот и бомбит у тебя.
Если бы не спесивничал и нормально отвечал на вопросы и просьбы показать кусок кода изначально - отношение к тебе было бы другое, а так, извини - сам напросился.
Я тебе уже написал выше, в чём проблема и как её можно подправить. Вопросы?
Вот, как с тобой разговаривать ? Ты с какого места читать начал ? Написано же, винт и движки, заменили. Что ж ты тут куражишься ?
Вот, как с тобой разговаривать ? Ты с какого места читать начал ? Написано же, винт и движки, заменили. Что ж ты тут куражишься ?
Я всё прочитал, не волнуйся. Вот тебе и ответ на твоё замечание "всё работало": оно работало, потому что звёзды так сошлись. Я тебе даже больше скажу - судя по определению структуры и тому, чем она заполняется - так потенциальных дыр - ещё вагон. Впрочем, это уже лирика, конечно.
Почему не работает сейчас - тебе уже ответили: раньше не попадался 0 в начале дробной части числа (которая хранится как целое число в одном из полей структуры). Теперь - попался, а после ноля - цифры, которых не может быть в восьмеричной системе счисления. Этот урок мы усвоили? Если да - продолжим.
Как поправить? Очевидно, что требуется точность в N знаков дробной части числа. Очевидно, что хранить все эти N знаков в целом числе - не выйдет, т.к. будут косяки с ведущими нолями.
Следовательно, очевидно, что хранить надо число без ведущих нолей, а в коде проводить дополнительные действия, если хранимое число меньше 1000, т.е. меньше 10 в третьей степени. Если число, хранящееся в структуре как дробная часть, меньше 1000, например, 999, то (опять же, судя по указанию в названиях переменных _DIV - это делители) в случае числа 999 надо дополнительно разделить на 10, в случае числа 99 - на 100, в случае числа 9 - на 1000 - и будет тебе требуемая точность в четыре знака после запятой.
Естественно, раз скетч секретный, то ты должен будешь разобраться сам - найти место, где вычисляются нужные данные и подправить там.
Вот, нашёл что- то
Ks_Divisor = Thread_Info[Thread_Step].Ks_Div;
Km_Divisor = Thread_Info[Thread_Step].Km_Div;
Ks_Count = 0;
Km_Count = 0;
Это оно ?
Почти. Ниже смотри, где используются Ks_Divisor и Km_Divisor. Вот тудыть надо вставить дополнительный код, если число, находящееся в Km_Divisor, меньше 1000. Аналогично и с дробной частью второго числа (Kcm_Div).
Я веду нашего ТС к тому, что мы в первых строках setup() пересчитаем инициализацию, вообще не вмешиваясь в работающий код.
Просто добавим цикл пересчета , если он требуется. Пока мне не все ясно. Очень трудно написать программу так, чтобы {12,5} интерпретировать как 12.5, а не 12.0005. Я пока еще не могу поверить в такое. Поэтому буду искать куски кода вместе с ТС. Которые какую-то херню делают.
--------------------------------
Ладно, дайте спокойно втрорую серию нового сезона досмотреть... Все-таки это главное событие весны - новый сезон "Игры престолов".
Я же написал Вам... Вы хоть читаете что Вам пишут или рогом упираетесь?
Коли дробная часть хранится отдельно от целой, то складывать их надо не простой склейкой визульного отображения со вставкой запятой как строку, а вычислением. Ksm=Ks_DIV+Km_DIV/1000. Тогда никаких ведущих нулей не потребуется. Если у Вас там что-то неверно пилится - значения неверные вводите.
Если станку данные передаются в текстовом виде, и страстная попытка избежать вещественных вычислений присутствует, то после конвертации дробной части в строку, полученную строку необходимо дополнить нулями слева до требуемой разрядности. Думаю, для Вас это окажется непосильной задачей, попросите кого-то помочь, завязав ему глаза чтобы секретный супер-пупер скетч не подсмотрел.
Km_STR=IntToStr(Km_DIV);
while (Length(Km_STR)<4) {Km_STR='0'+Km_STR;}
Ksm_STR=IntToStr(Ks_DIV)+'.'+Km_STR;
Возможно ошибаюсь, но автор настойчиво пытается дать понять, что первые два значения записи - это целая и дробная часть одного числа. В то же время, из приведенного кода, можно увидеть, что это два неких делителя, т. е. два отдельных числа. Если это так, то есть вероятность, что автор вычиляет одно, а программе требуются совсем другое.
Очень трудно написать программу так, чтобы {12,5} интерпретировать как 12.5, а не 12.0005.
Как по мне, напротив - очень легко :) Впрочем, не видя самого кода - гадать можно до бесконечности. Но я пока склоняюсь к тому, что налицо архитектурная дыра, которая вылезла, когда числа после запятой стали меньше 1000, следовательно, возникла необходимость в ведущем нуле. Вот смотрите:
12, 1234 - это 12.1234
10, 234 - это 10.2340
5, 0123 - это не 5.0123 вовсе, что очевидно.
Исходя из того, что ошибка компиляции вылезла только после смены аппаратной части, делаю вывод - в старой версии не было нужды в дробной части, меньшей 1000. Следовательно, проблема может быть и в коде, не только в инициализации.
Логик! А что с ним делать, если он код не показывает? Я вчера пьяный был и злой! ;) И ведь сегодня вечером опять таким же буду. Пока трезвый - христианское милосердие стучит в сердце.. ;)
Если данные таблицы используютс так, как уже показал ТС, то пересчетом нихера не исправить. Ты об этом?
Я про пересчет писал, пока надеялся, что возможно автор скетча пересчитывал значения, объединяя целую и дробную части. ТС вернется - пусть еще поищет тиспользование этих Ks_div в коде.
Но это ТОЛЬКО в том случае, если ТС правльно расчитывает всю таблицу.
Придется поставить эксперимент: расчитать любую таблицу без лидирующих "0" и выточить винт. Если получится - значит нужно разбирать код дальше, если нет - ТС неправильно считает таблицу, тогда спот-машина, мы бессильны.
Возможно ошибаюсь, но автор настойчиво пытается дать понять, что первые два значения записи - это целая и дробная часть одного числа. В то же время, из приведенного кода, можно увидеть, что это два неких делителя, т. е. два отдельных числа. Если это так, то есть вероятность, что автор вычиляет одно, а программе требуются совсем другое.
Ошибаешься: это мы у автора выпытали, что это не одно число, а два отдельных, запиханных в структуру. Ты перечитай сначала топик - там такой "секретности" нагнали, аж жуть. При том, что банальный простенький ЧПУ, к тому же с кривым кодом.
Да и определение структуры автор выложил только после того, как я, собственно, воспроизвёл его навскидку, попав почти на 100% сходу.
Ну а дальше - попкорн и ещё раз попкорн, по мнению ТС - мы тут все лохи позорные и всё равно ему не поможем (проскальзывало у него такое).
Логик! А что с ним делать, если он код не показывает? Я вчера пьяный был и злой! ;) И ведь сегодня вечером опять таким же буду. Пока трезвый - христианское милосердие стучит в сердце.. ;)
С милосердием боротся, накрайняк направлять его на достойных..
А ежели чувак, после того как ему все обяснено трижды позволяет себе такие реплики, не буду цитировать, в отношении форумчан и программистов вообще то делай с ним как я...
Logik пишет:
после этого пожалуй пошел нах...
Думаю это единственное чего он заслужил. Ошибка у него генетическая, и прогрессирующая. Т.к протокол ТСР не позволяет вломить ему промеж рог - ползуемся доступным. Пусть этот болторез запорет партейку заготовок, и его начальство ему ноль в очко запостит. Тогда награда найдет героя.
P.S. Господ участвующих настоятельно прошу матерную лексику без особой надобности не употреблять. Во избежание.
Не не не, так не пойдёт - тебя, значит, лохом кличут, а ты не ругайся?
mat пишет:
Я могу только одно сказать про Вас, Вы всё знаете но, ничего не умеете. Все Ваши реплики об этом красноречиво свидетельствуют.
mat пишет:
Хотя, я сомневаюсь что, что это в восьмеричной системе
mat пишет:
Какое странное место, Ватсон ! Программисты пасут коров...
Но как, Холмс ?!! Как Вы пришли к такому заключению ??
Их ответы, абсолютно точные и абсолютно бесполезные.
вот схожу на почту, экранчик 1602, I2C переходник, несколько нанок, далласы термодатчики, симисторы... уже не помню, что там еще в посылке... - вот это все получу, самогончику приму, грамчиков 600 и продолжим веселится!
Так ужеж предлагали к терапевту, пардон автору .. не хотит!
Если станок куплен с обязательством NDA (так бывает), то данная проблема - прямое юридическое основание для ТРЕБОВАНИЯ от автора устранения косяка в программе. Можете смело подавать в суд, если автор заартачится и требовать найма экспертов для доказательства косяка в суде и возложении всех судбных издержек и потерь времени (неполученной прибыли) на писателя этого сектретного дерьма. Точка.
Если этот путь вас НЕ устраивает по каким-либо причинам, и автор отказывается править - публикуйте программу, возможно тут найдутся желающие вам помочь (в чем я уже сильно сомневаюсь, разве что за бабки), ибо "лимит бесплатной помощи" имхо - исчерпан.
Прочитал всё на одном дыхании - прямо роман :) Автору топика: не тупи и покажи определение структуры...
Автору топика не помешало бы, для начала, закончить среднюю школу, а то он судя по всему он мимо прошел...
Вот впихнет "такое" что-то там в станок, а потом людям руки поотрывает...
Никаких секретов нет. Даже если я его и покажу, вы всё равно ничем не поможете, я уже проходил это.
Так что, не нужно тут изгаляться, над бедным ТС.
утром я трезвее, а значит - хоть немного добрее ;)
1. Вы не понимаете про 8-чные константы. Это НИГДЕ не задается, просто любое число, начинающееся с "0" - является 8-чной константой. Это правила языка программирования. Вот поэтому остальные числа - у Вас в порядке, на них компилятор не ругается, и на "8" и на "9", потому, что они с "0" не начинаются.
{75, 075} АБСОЛЮТНО ТОЖЕ САМОЕ, что {75, 61}, а {85, 085} - существовать не может, вообще, никогда, ни при каких изощрениях!
Надеюсь с тем, что "компилятор на "9" ругается" больше непонимания нет?
Запятая, по правилам языка, разделяет числа, одно от другого.
Ответьте на этот вопрос, тогда можно медленно перейти дальше.
Про нуль понятно. Запятая отделяет целое число от дробной части, того же числа.
нет, запятая разделяет различные числа, никак друг с другом не связанные.
Я говорю не про Ваш случай, а "про всегда" это правила языка, которые не может поменять програмист.
Снова вопрос - понятно?
Мне не понятно другое, все мои расчёты сделаны в десятичной системе и станок результат выводит тот, что я и расчитал. А вот некоторые шаги резьбы, получаются, по мнению программы, в восьмеричной системе. Как тогда объснить целую часть числа ?
Про нуль понятно. Запятая отделяет целое число от дробной части, того же числа.
Блять, ты упоротый или где? Сказано тебе, что в языках С/С++ разделителем целой и дробной частей числа является точка, ты опять херню несёшь!
У тебя там поля структуры заполняются, это видно по использованию фигурных скобок. А через запятую указываются члены этой структуры. Я щас тебе примерно накидаю её определение:
Глянь, не тупи - примерно так оно описано в секретном, сука, счетче?
С Правилами понятно. Вы наверное не поймёте но, текст в программе, написан именно так, как я его здесь привожу. Извините но, это не я.
Пользуясь вашим жаргоном отвечаю, блять, тупица, вот фрагмент из скетча
// ***** Threads *****
typedef struct
{
byte Ks_Div;
int Km_Div;
byte Kcs_Div;
int Kcm_Div;
char Text[7];
char Sp_Lim[8];
}THREAD_INFO;
THREAD_INFO const Thread_Info[] =
{
{ 36, 2956, 18, 0, "0.25mm", " 999rpm" },
{ 30, 2230, 15, 0, "0.30mm", " 999rpm" },
{ 25, 2954, 12, 8571, "0.35mm", " 999rpm" },
{ 22, 6847, 11, 2500, "0.40mm", " 999rpm" },
{ 18, 1478, 9, 0, "0.50mm", " 999rpm" },
{ 15, 1226, 7, 5000, "0.60mm", " 950rpm" },
{ 12, 9628, 6, 4286, "0.70mm", " 810rpm" },
{ 12, 986, 6, 0, "0.75mm", " 760rpm" },
{ 11, 3424, 5, 6250, "0.80mm", " 710rpm" },
{ 10, 829, 4, 5000, "x.xxmm", " 560rpm" },
{ 9, 739, 3, 6000, "x.xxmm", " 460rpm" },
{ 7, 2591, 3, 0, "1.25mm", " 380rpm" },
{ 6, 492, 2, 5714, "x.xxmm", " 320rpm" },
{ 5, 1850, 2, 2500, "1.75mm", " 280rpm" },
{ 4, 5370, 1, 8000, "2.00mm", " 220rpm" },
{ 3, 6296, 1, 5000, "2.50mm", " 190rpm" },
{ 3, 0247, 1, 1250, "3.00mm", " 140rpm" },
};
#define Total_Threads (sizeof(Thread_Info) / sizeof(Thread_Info[0]))
давайте пока отрешимся от всего и отвечаем только на мои вопросы. Без "извините", без "все так работает". Что, где, как и почему работает - разберемся потом. Я еще вчера писал, что у меня нет оснований Вам не довереять. ОК?
Мне не понятно другое, все мои расчёты сделаны в десятичной системе и станок результат выводит тот, что я и расчитал. А вот некоторые шаги резьбы, получаются, по мнению программы, в восьмеричной системе. Как тогда объснить целую часть числа ?
Потому что тот, кто писал твой секретный скетч - быдлокодер. И не учёл того, что при требовании точности в 4 знака после запятой нельзя тупо загонять четыре циферки в поле структуры, держащее дробную часть числа, потому как ВНЕЗАПНО эти циферки могут начинаться с 0, как итог - компилятор может ругнуться, если циферки правее содержат 8 или 9. Поскольку ведущий 0 - это ПРЯМОЕ указание компилятору на то, что последующие циферки представляют число в ВОСЬМЕРИЧНОЙ системе счисления.
Тебя не удивляет сам факт того, что в исходном коде можно писать числа в различных системах счисления? Если не удивляет, тогда не должно удивлять и то, что компилятору похер, какое число ты записал в переменную - синтаксический анализатор для начала проверяет, правильно ли написан код, в том числе - правильно ли указаны числа в соответствии с выбранной системой счисления. И если ты пишешь у числа 0 в начале - в нём не могут быть 8 и 9.
Если ты пишешь 0x в начале числа - то это представление числа в шестнадцатеричной системе, там крайняя буква - это F. Попробуй туда вставить что-то иное, например, 0xFUCK, и посмотри, как оно - поймётся компилятором или нет.
Ну я вроде и отвечаю. Или нет ? Возможно, мы говорим на разных языках ?
Хорошо. Теперь в токарно-винторезных терминах поясните наименования
Ks_Div;
Km_Div;
Kcs_Div;
Kcm_Div;
---------------
И еще - просящий Вы, поэтому сбавьте тон. Мы, после Ваших тупых вопросов, имеем моральное право хоть говном назвать, хоть нах послать, а ВЫ ПРОСИТЕ ПОМОЩИ, поэтому терпите любое обращение и будьте вежливы, так понятно? Если помощь нужна - терпите, если не желаете терпеть - разбирайтесь сами, так понятно?
Мне не понятно другое, все мои расчёты сделаны в десятичной системе и станок результат выводит тот, что я и расчитал. А вот некоторые шаги резьбы, получаются, по мнению программы, в восьмеричной системе. Как тогда объснить целую часть числа ?
Автор исходного ПО сам себе придумал некий способ записи исходных данных. Ему по неизвестной причине (уперлось) понравилось разделить запятыми, т.е. записать как отдельные числа целую и дробную части. Поскольку целая часть нигде с 0 не начинается, то компиллятор переводит ее на машинный язык правильно. А с дробной частью получается некорректная запись. Автор по сути пишет так, как дробная часть должна выглядеть при записи на бумаге, но по правилам программирования запись означает совсем другое. Автору этого ПО это было неизвестно (не программист). А теперь - ...опа.
Пользуясь вашим жаргоном отвечаю, блять, тупица, вот фрагмент из скетча
Вот, вижу, что ты самокритично отнёсся к своим способностям, похвально.
typedef struct
{
byte Ks_Div;
int Km_Div;
byte Kcs_Div;
int Kcm_Div;
char Text[7];
char Sp_Lim[8];
}THREAD_INFO;
};
ЧТД, цуко. Целая часть числа отдельно, дробная - отдельно. Если хочется оперировать точностью после запятой в 4 знака - пиши числа после запятой без ведущего нуля, точка. Править надо не определение массива, а код, в котором работается с параметрами структуры Km_Div, Kcm_Div - там и смотреть: если число меньше 1000, то предпринимать дополнительные действия (например, дополнительно делить на 10*нужное_кол_во_разрядов).
Да, человек писавший это, по вашей терминологии, быдлокодер. Но, он написал это и оно работает, а профессиональные программисты утверждали что, Arduino не сможет это обработать, не хватит быстродействия, ресурсов и прочее, а нужно как минимум STM32.
Хорошо. Теперь в токарно-винторезных терминах поясните наименования
Ks_Div;
Km_Div;
Kcs_Div;
Kcm_Div;
---------------
И еще - просящий Вы, поэтому сбавьте тон. Мы, после Ваших тупых вопросов, имеем моральное право хоть говном назвать, хоть нах послать, а ВЫ ПРОСИТЕ ПОМОЩИ, поэтому терпите любое обращение и будьте вежливы, так понятно? Если помощь нужна - терпите, если не желаете терпеть - разбирайтесь сами, так понятно?
Это подачи, продольные и поперечные. На счёт тона, прошу, не сердитесь. Не я начал таким тоном вести беседу.
это можно поправить, недочет кода в инициализации (задании начальных значений) параметров. Все-таки поясните термины, как я выше просил.
---ОК уже увидел.
Да, человек писавший это, по вашей терминологии, быдлокодер. Но, он написал это и оно работает, а профессиональные программисты утверждали что, Arduino не сможет это обработать, не хватит быстродействия, ресурсов и прочее, а нужно как минимум STM32.
ТЬы нахер сюда припёрся-то? Оно же, блять, работает? Или - уже не работает, т.к. в быдлокоде ВНЕЗАПНО вылезла архитектурная дыра? Тебе об этом и говорят, а ты - исходишь на гавно. Чуется мне, что ты сам тоже приложил руку к написанию сего поделия, вот и бомбит у тебя.
Если бы не спесивничал и нормально отвечал на вопросы и просьбы показать кусок кода изначально - отношение к тебе было бы другое, а так, извини - сам напросился.
Я тебе уже написал выше, в чём проблема и как её можно подправить. Вопросы?
Меня интересует почему "что-то-m" и "что-то-s", m и s это про что?
Да, человек писавший это, по вашей терминологии, быдлокодер. Но, он написал это и оно работает, а профессиональные программисты утверждали что, Arduino не сможет это обработать, не хватит быстродействия, ресурсов и прочее, а нужно как минимум STM32.
ТЬы нахер сюда припёрся-то? Оно же, блять, работает? Или - уже не работает, т.к. в быдлокоде ВНЕЗАПНО вылезла архитектурная дыра? Тебе об этом и говорят, а ты - исходишь на гавно. Чуется мне, что ты сам тоже приложил руку к написанию сего поделия, вот и бомбит у тебя.
Если бы не спесивничал и нормально отвечал на вопросы и просьбы показать кусок кода изначально - отношение к тебе было бы другое, а так, извини - сам напросился.
Я тебе уже написал выше, в чём проблема и как её можно подправить. Вопросы?
Вот, как с тобой разговаривать ? Ты с какого места читать начал ? Написано же, винт и движки, заменили. Что ж ты тут куражишься ?
Тут нет лички, но я прошу пока что говорить только со мной, иначе опять ничем закончится. Возможно мы размеремся.
Честно говорю, не знаю. Но, предполагаю что m это целая часть числа, а s это дробная.
найдите в коде строчки, если такие есть, где СЛЕВА от знака "=" использованы Ks_Div или Km_Div. Возможен вид такой:
Thread_Info[i].Ks_Div или (Thread_Info+i)->Ks_Div
Эти строчки могут находиться где- то в другом месте текста кода ? Во всяком случае, я ничего похожего не нашёл.
Вот, как с тобой разговаривать ? Ты с какого места читать начал ? Написано же, винт и движки, заменили. Что ж ты тут куражишься ?
Я всё прочитал, не волнуйся. Вот тебе и ответ на твоё замечание "всё работало": оно работало, потому что звёзды так сошлись. Я тебе даже больше скажу - судя по определению структуры и тому, чем она заполняется - так потенциальных дыр - ещё вагон. Впрочем, это уже лирика, конечно.
Почему не работает сейчас - тебе уже ответили: раньше не попадался 0 в начале дробной части числа (которая хранится как целое число в одном из полей структуры). Теперь - попался, а после ноля - цифры, которых не может быть в восьмеричной системе счисления. Этот урок мы усвоили? Если да - продолжим.
Как поправить? Очевидно, что требуется точность в N знаков дробной части числа. Очевидно, что хранить все эти N знаков в целом числе - не выйдет, т.к. будут косяки с ведущими нолями.
Следовательно, очевидно, что хранить надо число без ведущих нолей, а в коде проводить дополнительные действия, если хранимое число меньше 1000, т.е. меньше 10 в третьей степени. Если число, хранящееся в структуре как дробная часть, меньше 1000, например, 999, то (опять же, судя по указанию в названиях переменных _DIV - это делители) в случае числа 999 надо дополнительно разделить на 10, в случае числа 99 - на 100, в случае числа 9 - на 1000 - и будет тебе требуемая точность в четыре знака после запятой.
Естественно, раз скетч секретный, то ты должен будешь разобраться сам - найти место, где вычисляются нужные данные и подправить там.
.
везде по тексту, но вероятнее всего в setup() ищите в нем.
Я прошу прощения но, мне нужно срочно уехать. Если не возражаете, я как вернусь, опять зайду сюда. Это будет, наверное часика через три.
Разберемся, у меня тоже дела - новая серия "Игры престолов" сама - не посмотрится!
Вот, нашёл что- то
Ks_Divisor = Thread_Info[Thread_Step].Ks_Div;
Km_Divisor = Thread_Info[Thread_Step].Km_Div;
Ks_Count = 0;
Km_Count = 0;
Это оно ?
Вот, нашёл что- то
Ks_Divisor = Thread_Info[Thread_Step].Ks_Div;
Km_Divisor = Thread_Info[Thread_Step].Km_Div;
Ks_Count = 0;
Km_Count = 0;
Это оно ?
Почти. Ниже смотри, где используются Ks_Divisor и Km_Divisor. Вот тудыть надо вставить дополнительный код, если число, находящееся в Km_Divisor, меньше 1000. Аналогично и с дробной частью второго числа (Kcm_Div).
DIYMan! (mat - НЕ ЧИТАЙТЕ!)
Я веду нашего ТС к тому, что мы в первых строках setup() пересчитаем инициализацию, вообще не вмешиваясь в работающий код.
Просто добавим цикл пересчета , если он требуется. Пока мне не все ясно. Очень трудно написать программу так, чтобы {12,5} интерпретировать как 12.5, а не 12.0005. Я пока еще не могу поверить в такое. Поэтому буду искать куски кода вместе с ТС. Которые какую-то херню делают.
--------------------------------
Ладно, дайте спокойно втрорую серию нового сезона досмотреть... Все-таки это главное событие весны - новый сезон "Игры престолов".
Хм. Почему бы в структуре не указать мразу десятичное дробное число, убрав в коде кусок с формированием оного из байта и инта?
хотя кто его знает, что там в коде. Может статься, что байт применяется для шагов, а инт для микрошагов шаговика.
можно спорные цифры вводить как строку и потом преобразовывать ее во что угодно
// ***** Threads *****
typedef struct
{
byte Ks_Div;
int Km_Div;
byte Kcs_Div;
int Kcm_Div;
char Text[7];
char Sp_Lim[8];
}THREAD_INFO;
THREAD_INFO const Thread_Info[] =
{
{ 36, 2956, 18, 0, "0.25mm", " 999rpm" },
{ 30, 2230, 15, 0, "0.30mm", " 999rpm" },
{ 25, 2954, 12, 8571, "0.35mm", " 999rpm" },
{ 22, 6847, 11, 2500, "0.40mm", " 999rpm" },
{ 18, 1478, 9, 0, "0.50mm", " 999rpm" },
{ 15, 1226, 7, 5000, "0.60mm", " 950rpm" },
{ 12, 9628, 6, 4286, "0.70mm", " 810rpm" },
{ 12, 986, 6, 0, "0.75mm", " 760rpm" },
{ 11, 3424, 5, 6250, "0.80mm", " 710rpm" },
{ 10, 829, 4, 5000, "x.xxmm", " 560rpm" },
{ 9, 739, 3, 6000, "x.xxmm", " 460rpm" },
{ 7, 2591, 3, 0, "1.25mm", " 380rpm" },
{ 6, 492, 2, 5714, "x.xxmm", " 320rpm" },
{ 5, 1850, 2, 2500, "1.75mm", " 280rpm" },
{ 4, 5370, 1, 8000, "2.00mm", " 220rpm" },
{ 3, 6296, 1, 5000, "2.50mm", " 190rpm" },
{ 3, 0247, 1, 1250, "3.00mm", " 140rpm" },
};
#define Total_Threads (sizeof(Thread_Info) / sizeof(Thread_Info[0]))
Я же написал Вам... Вы хоть читаете что Вам пишут или рогом упираетесь?
Коли дробная часть хранится отдельно от целой, то складывать их надо не простой склейкой визульного отображения со вставкой запятой как строку, а вычислением. Ksm=Ks_DIV+Km_DIV/1000. Тогда никаких ведущих нулей не потребуется. Если у Вас там что-то неверно пилится - значения неверные вводите.
Если станку данные передаются в текстовом виде, и страстная попытка избежать вещественных вычислений присутствует, то после конвертации дробной части в строку, полученную строку необходимо дополнить нулями слева до требуемой разрядности. Думаю, для Вас это окажется непосильной задачей, попросите кого-то помочь, завязав ему глаза чтобы секретный супер-пупер скетч не подсмотрел.
Сегодня продолжение будет?
Сегодня продолжение будет?
+
тоже крайне интересно окончание истории
Сегодня продолжение будет?
Думаю нет. mat таки прочитал.
DIYMan! (mat - НЕ ЧИТАЙТЕ!)
Я веду нашего ТС к...
и понял, что ведут его не "к" а "на"
Возможно ошибаюсь, но автор настойчиво пытается дать понять, что первые два значения записи - это целая и дробная часть одного числа. В то же время, из приведенного кода, можно увидеть, что это два неких делителя, т. е. два отдельных числа. Если это так, то есть вероятность, что автор вычиляет одно, а программе требуются совсем другое.
Очень трудно написать программу так, чтобы {12,5} интерпретировать как 12.5, а не 12.0005.
Как по мне, напротив - очень легко :) Впрочем, не видя самого кода - гадать можно до бесконечности. Но я пока склоняюсь к тому, что налицо архитектурная дыра, которая вылезла, когда числа после запятой стали меньше 1000, следовательно, возникла необходимость в ведущем нуле. Вот смотрите:
12, 1234 - это 12.1234
10, 234 - это 10.2340
5, 0123 - это не 5.0123 вовсе, что очевидно.
Исходя из того, что ошибка компиляции вылезла только после смены аппаратной части, делаю вывод - в старой версии не было нужды в дробной части, меньшей 1000. Следовательно, проблема может быть и в коде, не только в инициализации.
Логик! А что с ним делать, если он код не показывает? Я вчера пьяный был и злой! ;) И ведь сегодня вечером опять таким же буду. Пока трезвый - христианское милосердие стучит в сердце.. ;)
Если данные таблицы используютс так, как уже показал ТС, то пересчетом нихера не исправить. Ты об этом?
Я про пересчет писал, пока надеялся, что возможно автор скетча пересчитывал значения, объединяя целую и дробную части. ТС вернется - пусть еще поищет тиспользование этих Ks_div в коде.
Но это ТОЛЬКО в том случае, если ТС правльно расчитывает всю таблицу.
Придется поставить эксперимент: расчитать любую таблицу без лидирующих "0" и выточить винт. Если получится - значит нужно разбирать код дальше, если нет - ТС неправильно считает таблицу, тогда спот-машина, мы бессильны.
Возможно ошибаюсь, но автор настойчиво пытается дать понять, что первые два значения записи - это целая и дробная часть одного числа. В то же время, из приведенного кода, можно увидеть, что это два неких делителя, т. е. два отдельных числа. Если это так, то есть вероятность, что автор вычиляет одно, а программе требуются совсем другое.
Ошибаешься: это мы у автора выпытали, что это не одно число, а два отдельных, запиханных в структуру. Ты перечитай сначала топик - там такой "секретности" нагнали, аж жуть. При том, что банальный простенький ЧПУ, к тому же с кривым кодом.
Да и определение структуры автор выложил только после того, как я, собственно, воспроизвёл его навскидку, попав почти на 100% сходу.
Ну а дальше - попкорн и ещё раз попкорн, по мнению ТС - мы тут все лохи позорные и всё равно ему не поможем (проскальзывало у него такое).
Логик! А что с ним делать, если он код не показывает? Я вчера пьяный был и злой! ;) И ведь сегодня вечером опять таким же буду. Пока трезвый - христианское милосердие стучит в сердце.. ;)
А ежели чувак, после того как ему все обяснено трижды позволяет себе такие реплики, не буду цитировать, в отношении форумчан и программистов вообще то делай с ним как я...
после этого пожалуй пошел нах...
Думаю это единственное чего он заслужил. Ошибка у него генетическая, и прогрессирующая. Т.к протокол ТСР не позволяет вломить ему промеж рог - ползуемся доступным. Пусть этот болторез запорет партейку заготовок, и его начальство ему ноль в очко запостит. Тогда награда найдет героя.
Да ! Всем попкорна ! Тема просто феерическая, давно не получал столько удовольствия на этом форуме.
P.S. Господ участвующих настоятельно прошу матерную лексику без особой надобности не употреблять. Во избежание.
Молодец ТС! Столько народу затроллил! Снимаю шляпУ!
Во, заметно. Это единственное что вам в реальности и нравится. А вовсе не "кузявый код". Потроллить, да посраться с кем нибудь..
P.S. Господ участвующих настоятельно прошу матерную лексику без особой надобности не употреблять. Во избежание.
Не не не, так не пойдёт - тебя, значит, лохом кличут, а ты не ругайся?
Я могу только одно сказать про Вас, Вы всё знаете но, ничего не умеете. Все Ваши реплики об этом красноречиво свидетельствуют.
Хотя, я сомневаюсь что, что это в восьмеричной системе
Какое странное место, Ватсон ! Программисты пасут коров...
Но как, Холмс ?!! Как Вы пришли к такому заключению ??
Их ответы, абсолютно точные и абсолютно бесполезные.
ТС либо упоротый, либо тролль.
ТС либо упоротый, либо тролль.
Никаких "либо". Хороший, грамотный тролль.
вот схожу на почту, экранчик 1602, I2C переходник, несколько нанок, далласы термодатчики, симисторы... уже не помню, что там еще в посылке... - вот это все получу, самогончику приму, грамчиков 600 и продолжим веселится!