• Как вывести записи во временной зоне с вечера до утра следующего дня?

    denman1985
    @denman1985
    SQL, Oracle Forms/Reports dbd
    Я как-то слабо понял как у тебя там все хранится и что надо выводить.
    Если в таблице данные могут хранится в виде:
    ВремяОт, ВремяДо
    1. 17:31:00, 07:29:00
    2. 20:34:00, 04:40:00
    3. 23:00:00, 07:45:00
    4. 12:00:00, 15:00:00
    5. 18:00:00, 23:00:00
    , и записи типа 1, 2, 5й строки надо вывести:

    SELECT ID, Название, ВремяОт, ВремяДо 
    FROM Table 
    WHERE (ВремяОт > ВремяДо and ВремяОт >= '17:31:00' and ВремяДо <= '07:29:00') /* для обработки 1 и 2 строки */
    or (ВремяОт < ВремяДо and (( ВремяОт >= '17:31:00' and ВремяДо <= '23:59:59'  ) or ( ВремяОт >= '00:00:00' and ВремяДо <= '07:29:00'  )) /* для обработки 5й строки */
    Ответ написан
    Комментировать
  • Клиент TCP C# - Выполнение передачи на всех формах без прерывания?

    petermzg
    @petermzg
    Самый лучший программист
    Создали класс для конекта, а делее при создании новых форм передавайте его инстанс через параметры конструктора формы.
    Ответ написан
    3 комментария
  • C# com-порт получение информации, обработка старт-бита, стоп-бита?

    @vitvov
    Если я правильно понял ваш вопрос, то ваше устройство шлёт постоянно данные и вам нужно только читать.
    Все что вам нужно, это создать подключение к порту и подписаться на событие обновления. При возникновении события вы получите массив данных с порта, этот массив вы сохраняете в буфер или разбираете на лету (как вам удобнее). Напишу для вас маленький пример:
    //  Наследуем наш клас от SerialPort для более красивого кода
    public class MySerialPort : SerialPort
    {
            private const int DataSize = 54;    //  я так и не понял, какой размер данных нужен. Укажите правильное число в байтах
            private readonly byte[] _bufer = new byte[DataSize];
            private int _stepIndex;
            private bool _startRead;
    
            public MySerialPort(string port)
                : base()
            {
                //  все папаметры вы должны указать в соответствии с вашим устройством
                //base.PortName = COM1;
                base.BaudRate = 115200;
                base.DataBits = 8;
                base.StopBits = StopBits.Two;
                base.Parity = Parity.None;
                base.ReadTimeout = 1000;
    
                //  тут подписываемся на событие прихода данных в порт
                //  для вашей задачи это должно подойт идеально
                base.DataReceived += SerialPort_DataReceived;
            }
    
            //  открываем порт передав туда имя
            public void Open(string portName)
            {
                if (base.IsOpen)
                {
                    base.Close();
                }
                base.PortName = portName;
                base.Open();
            }
    
            //  эта функция вызвется каждый раз, когда в порт чтото будет передано от вашего устройства
            void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                var port = (SerialPort)sender;
                try
                {
                    //  узнаем сколько байт пришло
                    int buferSize = port.BytesToRead;
                    for (int i = 0; i < buferSize; ++i)
                    {
                        //  читаем по одному байту
                        byte bt = (byte)port.ReadByte();
                        //  если встретили начало кадра (0xFF) - начинаем запись в _bufer
                        if (0xFF == bt)
                        {
                            _stepIndex = 0;
                            _startRead = true;
                            //  раскоментировать если надо сохранять этот байт
                            //_bufer[_stepIndex] = bt;
                            //++_stepIndex;
                        }
                        //  дописываем в буфер все остальное
                        if (_startRead)
                        {
                            _bufer[_stepIndex] = bt;
                            ++_stepIndex;
                        }
                        //  когда буфер наполнлся данными
                        if (_stepIndex == DataSize && _startRead)
                        {
                            //  по идее тут должны быть все ваши данные.
    
                            //  .. что то делаем ...
                            //  var item = _bufer[7];
    
                            _startRead = false;
                        }
                    }
                }
                catch {}
            }
    }

    использовать это нужно так:
    var port = new MySerialPort();
    port.Open("COM5");

    Это код прототипа, всего лишь техника работы которая может помочь вам.
    Ответ написан
    2 комментария
  • Как организовать передачу данных через протокол OCPP?

    petermzg
    @petermzg
    Самый лучший программист
    То что вы показываете в списке это протоколы Сетевого уровня, а OCPP относится к Прикладному уровню.
    Ответ написан
    6 комментариев