예제 #1
0
        private void writeMultipleCoils_Click(object sender, EventArgs e)
        {
            //connect to modbus...
            TcpClient      tcpClient = ConnectTcpClient();
            ModbusIpMaster master    = ConnectModbusMaster(tcpClient);

            master.Transport.ReadTimeout = Convert.ToInt16(textBox5.Text);

            bool   selectedState = Convert.ToBoolean(comboBox2.SelectedItem.ToString());
            int    startAddress  = 512;
            int    o             = startAddress;
            ushort readAddress   = (ushort)o;
            ushort numberOfCoils = 16; // 2 x 8 outputs

            bool[] boolArray = new bool[numberOfCoils];

            for (int i = 0; i <= 15; i++)
            {
                boolArray[i] = selectedState;
            }

            try
            {
                master.WriteMultipleCoils(readAddress, boolArray);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception: " + ex.ToString());
                throw;
            }

            tcpClient.Close();
            master.Dispose();
        }
예제 #2
0
        /// <summary>
        /// Simple Modbus UDP master write coils example.
        /// </summary>
        public static void ModbusUdpMasterWriteCoils()
        {
            using (UdpClient client = new UdpClient())
            {
                IPEndPoint endPoint = new IPEndPoint(new IPAddress(new byte[] { 127, 0, 0, 1 }), 502);
                client.Connect(endPoint);

                ModbusIpMaster master = ModbusIpMaster.CreateIp(client);

                ushort startAddress = 1;

                // write three coils
                master.WriteMultipleCoils(startAddress, new bool[] { true, false, true });
            }
        }
 public bool WriteCoils(int address, bool[] values)
 {
     if (this.CheckConnection())
     {
         try {
             using TcpClient client = new TcpClient(this.IpAddress, this.Port);
             ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
             if (this.SlaveAddress != 0)
             {
                 master.WriteMultipleCoils(this.SlaveAddress, (ushort)address, values);
             }
             else
             {
                 master.WriteMultipleCoils((ushort)address, values);
             }
             client.Close();
             master.Dispose();
             return(true);
         } catch {
             return(false);
         }
     }
     return(false);
 }
예제 #4
0
        public static void Write_MultipleCoils(ushort write_start_addr, bool[] coils_value)
        {
            coils_value      = _writemultiplecoils_Value;
            write_start_addr = _writestartAddress;
            Start_MBServer();
            Start_MBCLient();
            ModbusSlave slave    = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP);
            var         listener = slave.ListenAsync();

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP);

            master.WriteMultipleCoils(write_start_addr, coils_value);

            Stop_MBClient();
            Stop_MBServer();
        }
예제 #5
0
        public void WriteMultipleCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints, bool[] data)
        {
            if (!status)
            {
                Connect();
            }

            try
            {
                master.WriteMultipleCoils(slaveAddress, startAddress, data);
            }
            catch (Exception ex)
            {
                status = false;
                AddMessage("Catch exception in the function WriteMultipleCoils(). " + ex.Message,
                           DebugLevel.ExceptionLevel);
            }
        }
예제 #6
0
 private static void PutInMaintenceMode()
 {
     Console.Clear();
     Console.WriteLine("Switching To Maintence Mode Please Wait....");
     if (CheckConnection(IpAddress, 500))
     {
         ushort[] regData = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
         using (TcpClient client = new TcpClient(IpAddress, 502)) {
             bool[]         com    = { true, false, false, false };
             ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
             com[1] = true;
             com[2] = false;
             com[3] = false;
             master.WriteMultipleCoils(39, com);
             bool success = false;
             while (true)
             {
                 var check = master.ReadCoils(39, 1);
                 if (!check[0])
                 {
                     Console.WriteLine("Success, Waiting 5 sec then turning off Warning");
                     success = true;
                     break;
                 }
             }
             //if (success) {
             //    System.Threading.Thread.Sleep(5000);
             //    com[1] = false;
             //    com[2] = false;
             //    com[3] = false;
             //    master.WriteMultipleCoils(39, com);
             //}
             client.Close();
         }
         Console.WriteLine("Press any key to continue");
         Console.ReadKey();
     }
     else
     {
         Console.WriteLine("Connection Failed");
     }
 }
예제 #7
0
        public string WriteIoData(CT2.CIoNode node)
        {
            ushort len;

            if (node.CheckIfExistDO())
            {
                len = (ushort)((node.m_DO_AddrEnd + 1 - node.m_DO_AddrStart) * 8);
                if (len != node.m_DataDO.Count)
                {
                    return("ERR_illegalDataLength_DO");
                }
                try
                {
                    Thread.Sleep(5);
                    ushort addrStart = (ushort)(CT2.ECT2Coils.RegionDO + node.m_DO_AddrStart * 8);
                    master.WriteMultipleCoils(addrStart, node.m_DataDO.ToArray());
                }
                catch (Exception e)
                {
                    return(e.Message);
                }
            }
            if (node.CheckIfExistAO())
            {
                len = (ushort)((node.m_AO_AddrEnd + 1 - node.m_AO_AddrStart) / 2);
                if (len != node.m_DataAO.Count)
                {
                    return("ERR_illegalDataLength_DO");
                }
                try
                {
                    Thread.Sleep(5);
                    ushort addrStart = (ushort)(CT2.ECT2HoldReg.RegionAO + (node.m_AO_AddrStart - 200) / 2);
                    master.WriteMultipleRegisters(addrStart, node.m_DataAO.ToArray());
                }
                catch (Exception e)
                {
                    return(e.Message);
                }
            }
            return("NO_ERR");
        }
예제 #8
0
        // 1. Run the Write - Part on a Threadpool Thread ...
        private bool WriteCoil()
        {
            master.WriteMultipleCoils(offset, coil_output);

            return(true);
        }
예제 #9
0
        void cleanQuery()
        {
            // вначале разбираем очередь на запись
            writeComm wr;

            // создание дубликата writeQuveryDuble и освобождение исходной коллеции
            List <writeComm> writeQuveryDuble = new List <writeComm>();

            lock (block)
            {
                for (int i = 0; i < writeQuvery.Count; i++)
                {
                    writeQuveryDuble.Add(writeQuvery[i]);
                }
                writeQuvery.Clear();
            } //lock

            try
            {
                for (int i = 0; i < writeQuveryDuble.Count; i++)
                {
                    wr = writeQuveryDuble[i];
                    if (wr.reg == 0)
                    {
                        if (wr.len == 1)
                        {
                            master.WriteSingleCoil(wr.address, (bool)wr.value);
                        }
                        else
                        {
                            bool[] b = (bool[])wr.value;
                            master.WriteMultipleCoils(wr.address, b);
                        }
                    }
                    if (wr.reg == 3)
                    {
                        if (wr.type == 2 || wr.type == 3) //2 байтный int
                        {
                            if (wr.len == 1)
                            {
                                master.WriteSingleRegister(wr.address, BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 0));
                            }
                            else
                            {
                                ushort[] b = (ushort[])wr.value;
                                master.WriteMultipleRegisters(wr.address, b);
                            }
                        }
                        if (wr.type >= 4 && wr.type <= 7) //4 байтный int
                        {
                            if (wr.len == 1)
                            {
                                ushort[] b = new ushort[2];
                                b[0] = BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 0);
                                b[1] = BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 2);
                                master.WriteMultipleRegisters(wr.address, b);
                            }
                            else
                            {
                                int[] b = (int[])wr.value;
                                for (ushort j = 0; j < wr.len; j++)
                                {
                                    ushort[] bb = new ushort[2];
                                    bb[0] = BitConverter.ToUInt16(BitConverter.GetBytes(b[j]), 0);
                                    bb[1] = BitConverter.ToUInt16(BitConverter.GetBytes(b[j]), 2);
                                    master.WriteMultipleRegisters((ushort)(wr.address + (j * 2)), bb);
                                }
                            }
                        }
                        if (wr.type >= 8 && wr.type <= 9) //4 байтный float
                        {
                            if (wr.len == 1)
                            {
                                byte[]   b  = BitConverter.GetBytes((float)wr.value);
                                ushort[] bb = new ushort[2];
                                bb[0] = BitConverter.ToUInt16(b, 0);
                                bb[1] = BitConverter.ToUInt16(b, 2);
                                master.WriteMultipleRegisters(wr.address, bb);
                            }
                            else
                            {
                                float[] bb = (float[])wr.value;
                                for (int j = 0; j < wr.len; j++)
                                {
                                    byte[]   b   = BitConverter.GetBytes(bb[j]);
                                    ushort[] bbb = new ushort[2];
                                    bbb[0] = BitConverter.ToUInt16(b, 0);
                                    bbb[1] = BitConverter.ToUInt16(b, 2);
                                    master.WriteMultipleRegisters((ushort)(wr.address + (j * 2)), bbb);
                                }
                            }
                        } //if
                    }     //if
                }         //for
            }
            catch (Exception err)
            {
                Util.errorTCP();
                Util.errorMessage(err.Message, description);
                device.status = err.HResult;
                device.ready  = false; //??????????????????????????????/
            }
            //writeQuvery.Clear();
        }