Example #1
0
 private void btnSetY2_Click(object sender, EventArgs e)
 {
     try
     {
         objFatekCommunication.WriteSingleDiscrete(1, CommandCode.SINGLE_DISCRETE_CONTROL, RunningCode.Set, MemoryType.Y, 2, DataType.BOOL);
         btnReadDiscretes_Click(sender, e);
     }
     catch (Exception ex)
     {
         MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
        public void WriteTag(string TagName, dynamic Value)
        {
            SendDone.Reset();
            try
            {
                var strArrays = TagName.Split('.');
                var str       = $"{strArrays[0]}.{strArrays[1]}.{strArrays[2]}";
                foreach (var ch in Channels)
                {
                    foreach (var dv in ch.Devices)
                    {
                        foreach (var db in dv.DataBlocks)
                        {
                            var bEquals = $"{ch.ChannelName}.{dv.DeviceName}.{db.DataBlockName}".Equals(str);
                            if (bEquals)
                            {
                                FatekCommunication modbusMaster = null;

                                modbusMaster = mbe[ch.ChannelName];
                                var bmodbus = modbusMaster == null;
                                if (bmodbus)
                                {
                                    return;
                                }
                                var        obj        = modbusMaster;
                                DataType   dataType   = (DataType)Enum.Parse(typeof(DataType), TagCollection.Tags[TagName].DataType);
                                MemoryType memoryType = (MemoryType)Enum.Parse(typeof(MemoryType), db.MemoryType);
                                lock (obj)
                                {
                                    switch (TagCollection.Tags[TagName].DataType)
                                    {
                                    case "BOOL":
                                        if (Value == "1")
                                        {
                                            modbusMaster.WriteSingleDiscrete((byte)dv.SlaveId, CommandCode.SINGLE_DISCRETE_CONTROL, RunningCode.Set, memoryType, ushort.Parse(TagCollection.Tags[TagName].Address), dataType);
                                        }

                                        else
                                        {
                                            modbusMaster.WriteSingleDiscrete((byte)dv.SlaveId, CommandCode.SINGLE_DISCRETE_CONTROL, RunningCode.Reset, memoryType, ushort.Parse(TagCollection.Tags[TagName].Address), dataType);
                                        }

                                        break;

                                    case "INT":
                                    case "DINT":
                                    case "WORD":
                                    case "DWORD":
                                    case "REAL":
                                    {
                                        string[] DataAsArray = { Value };
                                        var      dataPacket  = new List <object>();
                                        var      x           = new byte[2];
                                        for (var i = 0; i < DataAsArray.Length; i++)
                                        {
                                            x = BitConverter.GetBytes(Convert.ToInt16(DataAsArray[i]));

                                            dataPacket.Add(x[1]);
                                            dataPacket.Add(x[0]);
                                        }


                                        modbusMaster.WriteMultipeRegisters((byte)dv.SlaveId, 1, memoryType, ushort.Parse(TagCollection.Tags[TagName].Address), dataType, dataPacket.ToArray());

                                        break;
                                    }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var err = new HMIException.ScadaException(this.GetType().Name + "   XModbus.WriteTag", ex.Message);
            }
            finally
            {
                SendDone.Set();
            }
        }