예제 #1
0
        }//обновляем данные о менеджере(ставим ему в поле задачу)

        private bool CreateCommand(int TId, int CID, int adId)
        {
            comand           c  = new comand();
            ComandRepository _c = new ComandRepository();

            c.comandId = TId;
            c.chatidID = CID;
            c.adminID  = adId;
            c.taskID   = TId;
            _c.Create(c);
            _c.Save();
            return(true);
        }//создаем команду для задачи
예제 #2
0
        int intReadData(UInt16 adr, UInt16 count, comand cmd)
        {
            byte[] buff = new byte[] { btDevAdr, (byte)cmd, (byte)(adr >> 8), (byte)adr, (byte)(count >> 8), (byte)count, 0, 0 };
            UInt16 crc  = chMBCRC16(buff, 6);
            int    size = count * 2 + 6;

            buff[7] = (byte)(crc >> 8);
            buff[6] = (byte)(crc & 0xFF);
#if DEBUG
            if (cmd == comand.RD_HOLDING)
            {
                //Debug.WriteLine(cmd.ToString() + " adr=" + adr.ToString() + " count=" + count.ToString());
                //Debug.WriteLine("<-" + sBtoS(buff, 8));
                logger.Add(cmd.ToString() + " adr=" + adr.ToString() + " count=" + count.ToString());
            }
#endif
            try
            {
                if (!spPort.IsOpen)
                {
                    this.blDevCnctd = false;  return(-1);
                }
                spPort.ReadExisting();
                spPort.Write(buff, 0, 8);

                // while (spPort.BytesToRead != count * 2 + 5) { if (!spPort.IsOpen) break; };

                int i = 0;
                while (spPort.BytesToRead < count * 2 + 5)
                {
                    i++;
                    if (!spPort.IsOpen)
                    {
                        break;
                    }
                    if (i > 500)
                    {
                        break;
                    }
                    Thread.Sleep(1);
                }
                ;

                size = spPort.BytesToRead;
                buff = new byte[size];
                try { spPort.Read(buff, 0, size); }
                catch (TimeoutException ex) { logger.Add("Нет Ответа");  return(-1); };
            }
            catch (Exception ex) { logger.Add("Ошибка записи в порт");  return(-1); };

            if (size < 3)
            {
                logger.Add("Нет ответа"); return(-1);
            }

            //   Debug.WriteLine(sBtoS(buff, size));
            crc = chMBCRC16(buff, (ushort)(size - 2));
            if ((crc >> 8) != buff[size - 1] || (crc & 0xFF) != buff[size - 2])
            {
                logger.Add("Ошибка CRC"); return(-1);
            }

            if (buff[1] == (byte)cmd)
            {
                int k = 0;
                for (int i = 3; i < buff[2] + 2; i += 2)
                {
                    UInt16 temp = (UInt16)(buff[i + 1] + (buff[i] << 8));

                    if (cmd == comand.RD_HOLDING)
                    {
                        uiHoldingReg[adr + k] = temp;
                    }
                    ;
                    if (cmd == comand.RD_INPUT)
                    {
                        uiInputReg[adr + k] = temp;
                    }
                    k++;
                }
#if DEBUG
                if (cmd == comand.RD_HOLDING)
                {
                    logger.Add("-> " + sBtoS(buff, (UInt16)buff.Length));
                }
#endif
            }
            else
            {
                logger.Add("ModBus ошибка команды чтения. Код" + buff[1].ToString()); return(-1);
            };

            return(0);
        }