Чуть конкретней. Без буклетно-рекламных "быстрее-выше-сильней"
?
Чуть конкретней. Без буклетно-рекламных "быстрее-выше-сильней"
?
Привет! Если чуть конкретней, без букетно-рекламных - Сейчас ведется разработка новой среды программирования ПЛК под названием ALTA IDE.
Среда полностью написанная с нуля, не базируется на Codesys, Беремис и пр. В начале следующего года планируем выпустить бета версию, совместно с выпуском обновленного ПЛК110.
В среде будут поддержаны языки МЭК. В начале будет ST, далее будем добавлять по "популярности" - FBD, CFC, LD и т.д.
То же самое с протоколами комм. Сначала Modbus, далее OPC UA, SNMP, MQTT и пр.
Будем понемногу добавлять в поддержку устройства ОВЕН, это наши ПЛК и старшие модели ПР, хотя так же планируем сотрудничать и с другими производителями ПЛК. Поддержка будет внедрятся по мере развития среды и добавления нового функционала в нее.
Среда заточена под удобство и простоту (извиняюсь за маркетинговый сленг), но мы действительно хотим сделать среду более понятной для пользователей которые еще не такие матерые в АСУ ТП и приблизить удобство пром. программирования к уровню современных редакторов верхнеуровневых ЯП.
А так, надеюсь через небольшое время уже сможем провести презентацию и рассказать чуть более подробно и показать над чем мы работаем уже довольно давно!
на чем реализация среды? язык?
Кроссплатформенность среды ?
C# с Avalonia.
Кроссплатформенность среды - Win, Linux, как популярные самые дистрибутивы так и под ру ОСи тестируем
Интересно... надо будет тестировать... смотрел в строну Avalonia, но какой вообще ужас делать окошкидаже в WindowsForm не ожидал, что потребуется столько логики писать. А там вообще мрак полный как по мне....
Видел один продукт на Avalonia, не впечатлило... Опять же проблема в том, что пытаетесь все впихнуть в одно общее окно для работы.
Поставьте себе CAD программы для примера как это должно выглядеть, ну хотя бы NanoCAD наш в триал варианте на месяц. Поймите наконец что требуется при работе с интерфейсом. (CAD программы максимально заточены на работу, когда требуется большой холст, слева часть окна Свойства. Все остальное поверх, с возможностью перетягивания на второй монитор, максимум пространства для рабочего пространства).
Не делайте пожалуйста убогое подобие MasterScada, где впихнули все и вся в одно окно....
Ну хотя вам сама VisualStudio прекрасно показывает, как это должно выглядеть тоже.
з.ы. и пожалста, не применяйте ср... json, он требует полного повторения структуры для сериализации, стоит стереть параметр из файла и привет... xml тут гораздо гибче, можно атрибуты в игнор ставить и не писать по чем зря...
Последний раз редактировалось melky; 12.08.2025 в 13:14.
когда Вас уже забанят, ежедневный бред несете, свое личное мнение выдаете за общепринятое, что вот за пурга про json и xml, ну для начала изучите документацию, посмотрите примеры, если Вы слабы в программировании то не надо здесь давать советы как программы писать
илиКод:using System; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System.Reflection; public class User { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } } public class CustomContractResolver : DefaultContractResolver { protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); // Установка значений по умолчанию для всех свойств if (property.PropertyType == typeof(int)) property.DefaultValue = 10; else if (property.PropertyType == typeof(string)) property.DefaultValue = "не указано"; // Важно: включаем обработку значений по умолчанию property.DefaultValueHandling = DefaultValueHandling.Populate; return property; } } class Program { static void Main() { var options = new JsonSerializerSettings { ContractResolver = new CustomContractResolver(), ObjectCreationHandling = ObjectCreationHandling.Replace, NullValueHandling = NullValueHandling.Include }; string json = @"{ ""Name"": ""Иван"" }"; User user = JsonConvert.DeserializeObject<User>(json, options); Console.WriteLine($"Имя: {user.Name}"); // выведет: Иван Console.WriteLine($"Возраст: {user.Age}"); // выведет: 10 Console.WriteLine($"Email: {user.Email}"); // выведет: не указано } }рашают эту задачу так же как парсер xmlКод:using System; using System.Text.Json; public class User { public string? Name { get; set; } public int Age { get; set; } //= 25; public string Email { get; set; } //= "Не указано"; } class Program { static void Main() { string json = @"{ ""Name"": ""Иван"" }"; var options = new JsonSerializerOptions { IncludeFields = true, PropertyNameCaseInsensitive = true }; User user = JsonSerializer.Deserialize<User>(json, options); Console.WriteLine($"Имя: {user.Name}"); // выведет: Иван Console.WriteLine($"Возраст: {user.Age}"); // выведет: 0 Console.WriteLine($"Email: {user.Email}"); // выведет: (null) } }
Последний раз редактировалось capzap; 12.08.2025 в 16:04.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Расширенный?В начале будет ST,
при объявлении переменой - вызов функций?
union, property, указатели, adrinst()? эквивалент syslibmem?
ФБ как структуры в КДС2 или как "более объекты" КДС3?
Тип - функция? //для человеческого колбэка?
Самостоятельный доступ к портам? эквиваленты syslibcom, syslibsocket? синхрон/асинхрон?Код:Сначала Modbus, далее OPC UA, SNMP, MQTT и пр
эквивалент syslibfile? синхрон/асинхрон? флеш (ресурс) - тот же?
Прогнозируемое время цикла при проекте из ";"?
Доступ к прерываниям?
Увидеть из проекта первый и особенно(!!) последний выдох проекта перед отключением?
Программное чтение/запись для ip/маска/гейт и т.п...?
Возможность самостоятельных либ на c# ...?C#
Возможность прикрепить к чужому проекту свою уже компилированную либу?
Возможность загрузки компилированного проекта без среды (а-ля "plc_io.exe")?
Последний раз редактировалось Валенок; 12.08.2025 в 15:32.
capzap сохраните файл сериализацией. А потом делаем пасы руками: заходите в файл, удаляете нафик любую переменную (например у вас переменная с пустой строкой занимает место в файле), потом попробуйте десериализовать обратно.
Если у вас получится такое с json, покажите как и я возьму свои слова обратно.
Чтобы было понятнее, вот примитивный пример
Код:<DevTemplate Bus="M4" Address="0" Name="SPT941-20" Descriptor="" readLastErr="false" RemindEvery="true" TimeCode="Time" DateCode="Date">Во втором примере отсутствует запись Descriptor и readLastErr - xml сериализатор даже не поперхнется от их отсутствия и выдаст пустую строку и false для данных переменных.Код:<DevTemplate Bus="M4" Address="0" Name="SPT941-20" RemindEvery="true" TimeCode="Time" DateCode="Date">
Так что пожалуйста - покажите такой же фокус с json. Мне очень надо и для него то же самое...
На счет json я использовал System.Text.Json а не Newtonsoft.Json (его пробовал ранее, те же, только в профиль)
з.ы. я почему собственно за подобный вариант? - он позволяет организовать структуру так, что при добавлении новых полей продолжать использовать ПО старой версии, если изменения не касались этой старой версии. Некоторая обратная совместимость сохраняется, пока полностью не перелопатишь классы.
Последний раз редактировалось melky; 12.08.2025 в 15:21.
Screenshot 2025-08-12 153040.png на сколько это возможно, у меня работает
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
capzap покажите результирующий файл (txt или во что вы сохраняете?)
Еще раз, вы тестируете код прямо так. Вы в файле удалите переменную и потом десериализуйте. Это первое. А второе, при сериализации в файл если строка null сделайте так, чтобы она просто не записалась в файл. Я не знаю, как еще объяснить этот фокус. Для XML есть такая штука как
[XmlIgnore]
public bool readLastErrSpecified { get { return readLastErr == true; } }
То есть если у нас переменная false - то в файл даже записи не произойдет. Только если она true. И при обратном чтении из файла никто никуда не выпадет в осадок (Исключение)
Я не нашел подобной реализации для json. И если вы посмотрите, сколько записей в файле ОЛ по типу uuid="00000000000000000000000000000" (нули тут от балды) а еще если их все удалите из файла, то поймете, на сколько можно было сократить этот самый файл...
Последний раз редактировалось melky; 12.08.2025 в 15:43.