Пример #1
0
        /// <summary>
        /// 设置DataPiont的值
        /// </summary>
        /// <param name="setDpDto"></param>
        public void AddDataPointToSetValue(SetDataPointValue setDpDto)
        {
            var toFindModbusUnit = FindModbusUnit(this.ModbusUnits, setDpDto.DataPointNumber);

            if (toFindModbusUnit != null)
            {
                List <DataPoint> toWriteDataPoints = new List <DataPoint>();
                var toWriteDataPoint = toFindModbusUnit.AllDataPoints.FirstOrDefault(p => p.Number == setDpDto.DataPointNumber);
                if (toWriteDataPoint != null)
                {
                    var copyDp = toWriteDataPoint.CopyNew();
                    copyDp.ValueToSet = setDpDto.ValueToSet;
                    toWriteDataPoints.Add(copyDp);
                }

                List <List <byte> > requestBytes = ModbusTCP.CreateWriteRegisterCommands(toFindModbusUnit.DataAnalyzeMode, toWriteDataPoints);
                foreach (var requestByte in requestBytes)
                {
                    lock (writeMobusThreadLoker)
                    {
                        WriteRegisterCommand writeRegisterCommand = new WriteRegisterCommand();
                        writeRegisterCommand.WriteCommand = requestByte;
                        toFindModbusUnit.ToWriteRegisterCommands.Enqueue(writeRegisterCommand);
                    }
                }
            }
        }
Пример #2
0
        private void StopDrivers()
        {
            if (modbusTCP != null)
            {
                foreach (ModbusTCPClient client in modbusTCP)
                {
                    client.Dismiss();
                }

                if (dbhelper != null)
                {
                    modbusTCP.SetAllDevicesDisconnected();

                    while (dbhelper.HasAnyValuAtBuffers())
                    {
                    }
                }
                modbusTCP = null;
            }
            if (mailClient != null)
            {
                mailClient = null;
            }
            if (archivist != null)
            {
                archivist = null;
            }
            IsDriverStarted = false;

            Log.Instance.Info("EnMon Sürücü Yöneticisi durduruldu.");
        }
Пример #3
0
 public void Init()
 {
     // Disable SO_REUSEPORT to prevent https://github.com/grpc/grpc/issues/10755
     server = new Server(new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) })
     {
         Services = { ModbusTCP.BindService(new ModbusImpl()) },
         Ports    = { { Hostname, Port, ServerCredentials.Insecure } }
     };
     server.Start();
     channel = new Channel(Hostname, Port, ChannelCredentials.Insecure);
     client  = new ModbusTCP.ModbusTCPClient(channel);
 }
        private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                IModbus objModbus = new ModbusTCP(txtCurrentIp.Text);
                objModbus.Start();

                ShowMsg(MessageBoxIcon.Information, "Connection Success!");
            }
            catch (Exception ex)
            {
                ShowMsg(MessageBoxIcon.Error, "Connection Fail!");
            }
        }
Пример #5
0
        private void WriteModbus()
        {
            try
            {
                foreach (var modbusUint in this.ModbusUnits)
                {
                    if (!modbusUint.Connector.IsConnect())
                    {
                        modbusUint.Connector.Connect();
                    }
                }

                while (CanWirteModbus())
                {
                    foreach (var modbusUint in this.ModbusUnits)
                    {
                        if (modbusUint.ToWriteRegisterCommands != null && modbusUint.ToWriteRegisterCommands.Count > 0)
                        {
                            WriteRegisterCommand currentWriteRegisterCommand = null;
                            List <byte>          recvBytes = null;
                            lock (writeMobusThreadLoker)
                            {
                                currentWriteRegisterCommand = modbusUint.ToWriteRegisterCommands.Dequeue();
                            }

                            if (currentWriteRegisterCommand != null)
                            {
                                recvBytes = modbusUint.Connector.Send(currentWriteRegisterCommand.WriteCommand);
                                if (recvBytes != null)
                                {
                                    AnalyzeRecivedDataReponse reponse = ModbusTCP.AnalyzeRecivedDataStatic(modbusUint.DataAnalyzeMode, currentWriteRegisterCommand.WriteCommand, recvBytes);
                                    if (reponse.ModbusReponseSuccess && reponse.AnalyzeRecivedDataSuccess)
                                    {
                                        var dataPointsWhoseRealTimeDataChanged = ModbusTCP.SetDataPointValueFromRegisterValue(reponse.Registers, modbusUint.AllDataPoints);

                                        List <DataPointRealValue> dataPointRealValues = DataObjectMapper.ConvertToListFrom(dataPointsWhoseRealTimeDataChanged);
                                        RaiseCurrentReceiveDataChangedEvent(dataPointRealValues);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                WriteModbus();
            }
        }
Пример #6
0
        private List <ReadRegisterCommand> GetReadRegisterCommands(List <DataPoint> dataPoints)
        {
            List <ReadRegisterCommand> readRegisterCommands = new List <ReadRegisterCommand>();

            List <List <byte> > requestBytes = ModbusTCP.CreateReadRegisterCommands(dataPoints);

            foreach (var requestByte in requestBytes)
            {
                var readRegisterCommand = new ReadRegisterCommand();
                readRegisterCommand.ReadCommand = requestByte;

                readRegisterCommands.Add(readRegisterCommand);
            }

            return(readRegisterCommands);
        }
Пример #7
0
       public Item(int ItemID,ModbusTCP.IRTU rtu,string ItemType,tblItemConfig ItemConfig)
       {

           
           this.rtu = rtu;
           
           this.ItemConfig = ItemConfig;
           this.ItemType = ItemType;

           this.ItemID = ItemID;
           this._Value = ItemConfig.Value??0;
           this._Degree = ItemConfig.Degree;
           new System.Threading.Thread(ReadindAction).Start();
           
         //  Task task = Task.Run(new Action(ReadindAction));
           
       }
Пример #8
0
        static void Main(string[] args)
        {
            /*Application.Init();
             *
             * var app = new Application("org.gtksharp.gtksharp", GLib.ApplicationFlags.None);
             * app.Register(GLib.Cancellable.Current);
             *
             * var win = new MainWindow();
             * app.AddWindow(win);
             *
             * win.Show();
             * Application.Run();*/

            var modbusTcp = new ModbusTCP();

            modbusTcp.Start();
        }
Пример #9
0
 private async void StartModbusDriver()
 {
     // ModbusTCP Config dosyası mevcutsa
     if (File.Exists(Constants.ModbusTCPDriverConfigFileLocation))
     {
         // Ayrı bir thread içerisinde ModbusTCP driver'ı çalıştırılıyor.
         Task t1 = Task.Factory.StartNew(() =>
         {
             modbusTCP = new ModbusTCP(Constants.ModbusTCPDriverConfigFileLocation);
             modbusTCP.SetAllDevicesDisconnected();
             modbusTCP.StartCommunication();
         });
         await t1;
     }
     else
     {
         Log.Instance.Error("{0}: Modbus Driver Config dosyası bulunamadığı için ModbusDriver başlatılamadı.", this.GetType().Name);
     }
 }
        public void GetDataPointRealValueTest()
        {
            ModbusTCPServer modbusTCPServer = new ModbusTCPServer();

            modbusTCPServer.InitializeFromConfigFile(modbusConfigFile);

            List <DataPoint> allDataPointsWhoseRealTimeDataChanged = new List <DataPoint>();

            foreach (var modbusUint in modbusTCPServer.ModbusUnits)
            {
                if (modbusUint.Connector.Connect())
                {
                    int i = 0;
                    foreach (var readRegisterCommand in modbusUint.AllReadRegisterCommands)
                    {
                        ++i;
                        var recvBytes = modbusUint.Connector.Send(readRegisterCommand.ReadCommand);
                        var sendMsg   = string.Format("{0}SendBytes:{1} ", i, readRegisterCommand.ReadCommand.ToString());

                        Debug.WriteLine(sendMsg);

                        if (recvBytes != null)
                        {
                            var recvMsg = string.Format("{0}RecvBytes:{1} ", i, recvBytes.ToString());
                            Debug.WriteLine(recvMsg);

                            AnalyzeRecivedDataReponse reponse = ModbusTCP.AnalyzeRecivedDataStatic(modbusUint.DataAnalyzeMode, readRegisterCommand.ReadCommand, recvBytes);
                            if (reponse.ModbusReponseSuccess && reponse.AnalyzeRecivedDataSuccess)
                            {
                                List <DataPoint> dataPointsWhoseRealTimeDataChanged = ModbusTCP.SetDataPointValueFromRegisterValue(reponse.Registers, modbusUint.AllDataPoints);
                                allDataPointsWhoseRealTimeDataChanged.AddRange(dataPointsWhoseRealTimeDataChanged);
                            }
                        }
                        else
                        {
                            Debug.WriteLine(i + ".RecvBytes: null");
                        }
                    }
                }
            }
        }
        public void SetDataPointRealValueByFunNun16Test()
        {
            ModbusTCPServer modbusTCPServer = new ModbusTCPServer();

            modbusTCPServer.InitializeFromConfigFile(modbusConfigFile);

            foreach (var modbusUint in modbusTCPServer.ModbusUnits)
            {
                List <DataPoint> dataPointsWhoseRealTimeDataChanged = new List <DataPoint>();

                List <DataPoint> dataPoints = new List <DataPoint>();

                dataPoints.Add(new DataPoint()
                {
                    DeviceAddress        = 1,
                    StartRegisterAddress = 83,
                    DataPointType        = DataPointType.WriteAndReadByFunNum03,
                    DataPointDataType    = DataPointDataType.F32,
                    RealTimeValue        = -1,
                    ValueToSet           = 101.7
                });

                List <List <byte> > writeRegisterCommandBytes = ModbusTCP.CreateWriteRegisterCommands(DataAnalyzeMode.DataHighToLow, dataPoints);

                if (modbusUint.Connector.Connect())
                {
                    foreach (var writeBytes in writeRegisterCommandBytes)
                    {
                        var recvBytes = modbusUint.Connector.Send(writeBytes);
                        if (recvBytes != null)
                        {
                            AnalyzeRecivedDataReponse reponse = ModbusTCP.AnalyzeRecivedDataStatic(modbusUint.DataAnalyzeMode, writeBytes, recvBytes);
                            if (reponse.ModbusReponseSuccess && reponse.AnalyzeRecivedDataSuccess)
                            {
                                dataPointsWhoseRealTimeDataChanged = ModbusTCP.SetDataPointValueFromRegisterValue(reponse.Registers, dataPoints);
                            }
                        }
                    }
                }
            }
        }
Пример #12
0
        public Program()
        {
            modbusTCP = new ModbusTCP(ipAddress, port);
            modbusTCP.Connect();
            //int[] response = modbusTCP.ReadInputRegisters(startAddress, qty);
            bool[] response = modbusTCP.ReadDiscreteInputs(40001, qty);


            modbusTCP.Disconnect();

            System.Console.WriteLine("Reg 1: " + response[0].ToString());
            System.Console.WriteLine("Reg 2: " + response[1].ToString());
            System.Console.WriteLine("Reg 1: " + response[2].ToString());
            System.Console.WriteLine("Reg 1: " + response[3].ToString());
            System.Console.WriteLine("Reg 1: " + response[4].ToString());
            System.Console.WriteLine("Reg 1: " + response[5].ToString());
            System.Console.WriteLine("Reg 1: " + response[6].ToString());
            System.Console.WriteLine("Reg 1: " + response[7].ToString());
            System.Console.WriteLine("Reg 1: " + response[8].ToString());
            System.Console.WriteLine("Reg 1: " + response[9].ToString());
        }
Пример #13
0
        private void ReadModbus()
        {
            try
            {
                foreach (var modbusUint in this.ModbusUnits)
                {
                    if (!modbusUint.Connector.IsConnect())
                    {
                        modbusUint.Connector.Connect();
                    }
                }

                while (CanReadModbus())
                {
                    foreach (var modbusUint in this.ModbusUnits)
                    {
                        foreach (var readRegisterCommand in modbusUint.AllReadRegisterCommands)
                        {
                            var recvBytes = modbusUint.Connector.Send(readRegisterCommand.ReadCommand);
                            if (recvBytes != null)
                            {
                                AnalyzeRecivedDataReponse reponse = ModbusTCP.AnalyzeRecivedDataStatic(modbusUint.DataAnalyzeMode, readRegisterCommand.ReadCommand, recvBytes);
                                if (reponse.ModbusReponseSuccess && reponse.AnalyzeRecivedDataSuccess)
                                {
                                    List <DataPoint> dataPointsWhoseRealTimeDataChanged = ModbusTCP.SetDataPointValueFromRegisterValue(reponse.Registers, modbusUint.AllDataPoints);

                                    List <DataPointRealValue> dataPointRealValues = DataObjectMapper.ConvertToListFrom(dataPointsWhoseRealTimeDataChanged);
                                    RaiseCurrentReceiveDataChangedEvent(dataPointRealValues);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ReadModbus();
            }
        }
Пример #14
0
        public static void Main(string[] args)
        {
            var server = new Server
            {
                Services = { ModbusTCP.BindService(new ModbusImpl()) },
                Ports    = { new ServerPort(Hostname, Port, ServerCredentials.Insecure) }
            };

            server.Start();

            Console.WriteLine("Modbus gRPC server listening on port " + Port);
            // Console.WriteLine("Press any key to stop the server...");
            // Console.ReadKey();

            // TODO: Fix this mock later
            while (true)
            {
                Thread.Sleep(1000);
            }

            server.ShutdownAsync().Wait();
        }
Пример #15
0
        static void Main(string[] args)
        {
            ModbusTCP modbus = new ModbusTCP("192.168.0.115", 502);

            modbus.OnException    += Modbus_OnException;
            modbus.OnResponseData += Modbus_OnResponseData;

            modbus.ReadCoilsAsync(1, 1, 0, 2);
            var conn = modbus.Connected;

            ushort start  = 16;
            ushort lenght = 2;

            // calculate the number of bytes data needs
            int numBytes = (lenght / 8 + (lenght % 8 > 0 ? 1 : 0));

            byte[] data          = new byte[numBytes];
            byte[] multipleCoils = new byte[lenght];
            multipleCoils[0] = 255;
            multipleCoils[1] = 255;

            // write data to device
            byte[] result = new byte[numBytes];
            modbus.WriteMultipleCoils(1, 1, start, lenght, multipleCoils, ref result);
            //modbus.WriteSingleCoil(1, 1, start, false, ref result);

            //read data from device
            modbus.ReadHoldingRegisters(1, 1, start, lenght, ref data);

            // convert data into int value
            int length2 = data.Length / 2 + Convert.ToInt16(data.Length % 2 > 0);
            var word    = new int[length2];

            for (int x = 0; x < length2; x++)
            {
                word[x] = data[x * 2] * 256 + data[x * 2 + 1];
                Console.WriteLine(word[x]);
            }



            //convert data into bit value
            BitArray bitArray = new BitArray(data);

            int[] numbers = new int[bitArray.Count];
            for (int i = 0; i < bitArray.Length; i++)
            {
                numbers[i] = bitArray[i] ? 1 : 0;
                Console.WriteLine($"Coil {i} : {numbers[i]}");
            }

            //var data1 = Convert.ToBoolean(Convert.ToByte("3"));

            //var coils = Convert.ToString(data[0],2);
            //var reversed = coils.ToArray();
            //Array.Reverse(reversed);
            //foreach (var item in reversed)
            //{
            //    Console.WriteLine(item);
            //}

            modbus.OnException    -= Modbus_OnException;
            modbus.OnResponseData -= Modbus_OnResponseData;
            modbus.Disconnect();

            Console.ReadLine();
        }
        public void SetDataPointRealValueByTest()
        {
            ModbusTCPServer modbusTCPServer = new ModbusTCPServer();

            modbusTCPServer.InitializeFromConfigFile(modbusConfigFile);

            foreach (var modbusUint in modbusTCPServer.ModbusUnits)
            {
                List <DataPoint>            allDataPointsWhoseRealTimeDataChangeds = new List <DataPoint>();
                List <WriteRegisterCommand> allWriterRegisterCommands = new List <WriteRegisterCommand>();

                List <DataPoint> canWriteDataPoints =
                    modbusUint.AllDataPoints.FindAll(p => p.DataPointType == DataPointType.WriteAndReadByFunNum01 ||
                                                     p.DataPointType == DataPointType.WriteAndReadByFunNum03);

                #region 模拟数据

                foreach (var writeDataPoint in canWriteDataPoints)
                {
                    if (writeDataPoint.DataPointType == DataPointType.WriteAndReadByFunNum01)
                    {
                        var dataPointNo = Convert.ToInt32(writeDataPoint.Number);
                        if (dataPointNo % 2 == 0)
                        {
                            writeDataPoint.ValueToSet = 1;
                        }
                        else
                        {
                            writeDataPoint.ValueToSet = 0;
                        }
                    }
                    else if (writeDataPoint.DataPointType == DataPointType.WriteAndReadByFunNum03)
                    {
                        writeDataPoint.ValueToSet = Convert.ToDouble(writeDataPoint.Number);
                    }
                }


                #endregion

                List <List <byte> > requestBytes = ModbusTCP.CreateWriteRegisterCommands(modbusUint.DataAnalyzeMode, canWriteDataPoints);

                foreach (var requestByte in requestBytes)
                {
                    WriteRegisterCommand writeRegisterCommand = new WriteRegisterCommand();
                    writeRegisterCommand.WriteCommand = requestByte;

                    allWriterRegisterCommands.Add(writeRegisterCommand);
                }

                if (modbusUint.Connector.Connect())
                {
                    int i = 0;
                    foreach (var writeRegisterCommand in allWriterRegisterCommands)
                    {
                        ++i;
                        var recvBytes = modbusUint.Connector.Send(writeRegisterCommand.WriteCommand);
                        if (recvBytes != null)
                        {
                            AnalyzeRecivedDataReponse reponse = ModbusTCP.AnalyzeRecivedDataStatic(modbusUint.DataAnalyzeMode, writeRegisterCommand.WriteCommand, recvBytes);
                            if (reponse.ModbusReponseSuccess && reponse.AnalyzeRecivedDataSuccess)
                            {
                                var dataPointsWhoseRealTimeDataChanged = ModbusTCP.SetDataPointValueFromRegisterValue(reponse.Registers, modbusUint.AllDataPoints);

                                allDataPointsWhoseRealTimeDataChangeds.AddRange(dataPointsWhoseRealTimeDataChanged);
                            }
                        }
                    }
                }
            }
        }
Пример #17
0
        void rtu_OnCommStateChanged(ModbusTCP.IRTU sender, int comm_state)
        {
            SecureDBEntities1 db = new SecureDBEntities1();
           tblControllerConfig ctl= db.tblControllerConfig.Where(n => n.ControlID == sender.ControlID).FirstOrDefault();

           if (ctl != null)
           {
               ctl.Comm_state = comm_state;
               db.tblDeviceStateLog.Add(

                  new tblDeviceStateLog()
                  {
                       TypeID=10, TypeCode=(short)comm_state, TimeStamp=DateTime.Now, ControlID=sender.ControlID
                  }
                   );



               db.SaveChanges();
           }
           db.Dispose();
            //throw new NotImplementedException();
        }