Я для удобства подсчётов использовал разрядность битов - ничего личного, мне так удобнее считать и запоминать. Каждый, в данном случае, волен выбирать, что душе угодно.fsergei70 писал(а):Здравствуйте. Подскажите откуда взялась формула пересчета в вашем проектеСобрали сек, мин, час в один интегер по формулесек(0-60)/5 + мин(0-60) * 16 + час(0-24)*1024запись с периодом 5 сек, поэтому максимум от сек 12,Если писать раз в 5 секунд то должно бытьсек(0-60)/5 + мин(0-60) * 12 + час(0-24)*720ведь в одну минуту пишется 12 значений а в час 12*60
Считать остаток ИЗВРАЩЁННЫМИ методами, нет не я. Скормите Ваше творение IDE, посмотрите код, а потом сравните с X=Y%Z А???? Разницу видите???fsergei70 писал(а):По поводу остатка разве нельзя его так посчитать? файл прикрепил внизу, если можно то все это можно загнать в блок.
Пользовательские блоки, точнее их входы/выходы - это уже переменные, задекларированные.fsergei70 писал(а):Я в железе не пробовал, но мне кажется что значения с датчика надо писать в переменные, а уже с переменных считывать и подавать на блок записи в память. Ну а в блоке чтения наоборот.
Ответ:fsergei70 писал(а):Пересчет времени не совсем удобен, потому как не универсален, если нужен другой период опроса то в проекте надо переделывать формулы а если мне нужно будет вместо секунды/минуты/часы, сохранять например месяц/день/час вообще начнутся сложности, ведь количество дней каждый месяц разное. Да и переменной Integer со своим максимальным значением 32767 не бесконечная, при использовании другой микросхемы памяти с большим объемом ее точно не хватит, а использовать другой тип переменной вместо Integer это уже 4 байта. Поэтому лучше все таки хранить значения секунды/минуты/часы или скажем месяц/день/час каждую в своей переменной типа Byte.
Добавлено (05.08.2017, 09:10)Sancho писал(а):Пример программы для понимания, насколько всё несложно прилагается.
ВСЕ данные в контролере представляют собой байты, поэтому хранить можно хоть чёрта лысого, если его описать этими самыми байтами.fsergei70 писал(а):P.S. И еще раз у нас целых 4096 байта может имеет смысл сделать еще один блок по 16 байт и часть данных сделать строковой переменно, а часть в integer. Ведь не всегда нам нужно сохранять именно время или дату, например если использовать блоки для хранения настроек.......
Что Вам мешает получить из двух байтов инт, а из двух инт - лонг инт?fsergei70 писал(а):инуты/часы, сохранять например месяц/день/час вообще начнутся сложности, ведь количество дней каждый месяц разное. Да и переменной Integer со своим максимальным значением 32767 не бесконечная, при использовании другой микросхемы памяти с большим объемом ее точно не хватит, а использовать другой тип переменной вместо Integer это уже 4 байта
если знаете где править то какие проблемы. Мне бы например очень пригодились переменные unsigned s hort и unsigned char для обмена по modbus, но их к сожалению нет, да и в float порядок следования бит не настраивается. У каждого из пользователей есть свои хотелки, а автор программы у нас один, он при всем желании физически не в состоянии помочь всем. Сейчас вот Scada допиливает на языке FBD, штука безусловно нужная, хотя как по мне есть куча сторонних программ, взять хотя бы овен телемеханика, тот же язык FBD, работает правда она 2 часа а потом перезапускать ее нужно.Sancho писал(а):А чего ещё не хватает в нашей либимой FLProg, кроме MODULO % ???Правильно, типа переменной, который, также, как и MODULO %, приходится править(делать) руками, но стандартен.
Ещё не догадались?
Да, думаю, все знают.
Правильно, unsigned int, который позволяет работать в диапазоне 0-65535....
Особенно актуально, в моих случаях, в счетчиках, для выборки адресов - опять-же, правлю руками уже в коде.
Я не адресное пространство имел ввиду а получившееся число при расчете времени, если измерений будет больше писаться на другую микросхему, то мы можем выйти за диапазон 32767Sancho писал(а):Что Вам мешает получить из двух байтов инт, а из двух инт - лонг инт?У 24С256 адрес последнего бита 32767, хватит.
Чем отличается от unsigned int в IDE?fsergei70 писал(а):Мне бы например очень пригодились переменные unsigned short
А Вы проверили, как он реализован в IDE?fsergei70 писал(а):и unsigned char
О каком режиме идёт речь?fsergei70 писал(а):для обмена по modbus
Где проблема - я не понимаю!!! У Вас не получается принять флоат сторонними программами от FLProg? Расскажите, ОБЯЗАТЕЛЬНО поможем!fsergei70 писал(а):да и в float порядок следования бит не настраивается
Вот я и писал, чтоfsergei70 писал(а):Я не адресное пространство имел ввиду а получившееся число при расчете времени, если измерений будет больше писаться на другую микросхему, то мы можем выйти за диапазон 32767
Добавлено (05.08.2017, 15:48)Sancho писал(а):Правильно, unsigned int, который позволяет работать в диапазоне 0-65535....Особенно актуально, в моих случаях, в счетчиках, для выборки адресов - опять-же, правлю руками уже в коде.
Можно так разобрать...Sancho писал(а):Разобрать строку (String) на символы простыми средствами С++ не могу. Даже не знаю, возможно-ли...
Код: Выделить всё
String str = "HelloWorld"; //Инициализируем строку
void setup() {
Serial.begin(9600);
}
void loop() {
char charBufVar[11]; //Создаем буфер на 11 символов (HelloWorld=10 + 1)
str.toCharArray(charBufVar, 11); //Копируем символы из стринга в буфер длиной 11 символов
//Выводим в компорт сомволы
Serial.print ("Char1=");
Serial.print (charBufVar[0]); //Символ из буфера под 1 номером (в обычном исчислении)
Serial.print (" Char2=");
Serial.print (charBufVar[1]); //Символ из буфера под 2 номером
Serial.print (" Char3=");
Serial.print (charBufVar[2]); //Символ из буфера под 3 номером
Serial.print (" Char4=");
Serial.print (charBufVar[3]); //Символ из буфера под 4 номером
Serial.print (" Char5=");
Serial.print (charBufVar[4]); //Символ из буфера под 5 номером
Serial.print (" Char6=");
Serial.print (charBufVar[5]); //Символ из буфера под 6 номером
Serial.print (" Char7=");
Serial.print (charBufVar[6]); //Символ из буфера под 7 номером
Serial.print (" Char8=");
Serial.print (charBufVar[7]); //Символ из буфера под 8 номером
Serial.print (" Char9=");
Serial.print (charBufVar[8]); //Символ из буфера под 9 номером
Serial.print (" Char10=");
Serial.println (charBufVar[9]); //Символ из буфера под 10 номером
delay(1000);
}
Александр, интересно взглянуть на допиленный блок для передачи сразу 64 байт через modbus. Планирую подружить память с дисплеем на МАХ7219 чтоб дистанционно текст в бегущей строке менять через блютуз или rs485. Извини за не скромный вопрос, новые блоки для других типов данных выкладывать не собираешься? Думаю народу на форуме будет очень интересно.Sancho писал(а):Не составляет большого труда организовать считывание памяти 24Cxx через ModBus сразу по 32/64 байта (16/32 регистра) - смотреть архивы, логи, например. И записью тоже.
Обновил, появился флоат, конструируйте по шаблону наборы под любые переменные.fsergei70 писал(а):новые блоки для других типов данных выкладывать не собираешься? Думаю народу на форуме будет очень интересно.
Вопрос не совсем понятен - где будет текст изначально? Если в памяти - то просто считывать нужный блок(страницу). Если просто передавать - то память здесь причём. Проясните идею.fsergei70 писал(а):Планирую подружить память с дисплеем на МАХ7219 чтоб дистанционно текст в бегущей строке менять через блютуз или rs485
Пожалуйста, п.1. Необходимо, ОБЯЗАТЕЛЬНО, создать необходимое количество Input Register(аналоговые входы) на отдельной плате, создать условие для платы, при котором она никогда не будет выполнятся или удалить её в IDE. Эти действия создадут массив для модбаса в программе.fsergei70 писал(а):Александр, интересно взглянуть на допиленный блок для передачи сразу 64 байт через modbus.
Хочу через блютуз или rs485 загонять текст в память а потом выводить на дисплей.Sancho писал(а):Вопрос не совсем понятен - где будет текст изначально? Если в памяти - то просто считывать нужный блок(страницу). Если просто передавать - то память здесь причём. Проясните идеюХочу
Я вносил текст в память через терминал. Но текст у меня содержал номер(файл в архиве), по которому он полу-автоматически заносился в соответствующую страницу, только нажимал Write.fsergei70 писал(а):Хочу через блютуз или rs485 загонять текст в память а потом выводить на дисплей.
Sancho писал(а):Я вносил текст в память через терминал. Но текст у меня содержал номер(файл в архиве), по которому он полу-автоматически заносился в соответствующую страницу, только нажимал Write.Для остальных случаев нужно сделать блок записи с выбором страницы.
Пришли микрухи пообъёмнее, буду переделывать на 64 байтные страницы - первые 32, как и раньше, личные данные, вторые 32 байта - для записи времени последних и общего количества "проходов". А есть ещё у меня и на 128 и 256 байт/страница...
Пишем из терминала, читаем на дисплее.fsergei70 писал(а):Нужен блок чтоб только строковые переменные можно было писать/читать в eeprom с ком порта