/// <summary>
        /// отправка пакета с изменением статуса
        /// </summary>
        public void SendStatusforSlave(ushort status)
        {
            ushort startAddress = 0;
            ushort numOfPoints  = 1;

            master.WriteSingleRegister(slaveID, startAddress, status);
        }
Beispiel #2
0
        public void SendConfigurationMessage(Slave slave, ConfigurationMessage configurationMessage)
        {
            var startAddress = GetStartAddress(slave.DeviceNumber, 12);
            var valueConfigurationMessage = GetValueToConfigurationMessage(configurationMessage);

            _modbusSerial.WriteSingleRegister(slave.SlaveId, startAddress, valueConfigurationMessage);
        }
        public void Write(int addr, EUT55ARegisterAddress register, float value)
        {
            if (Mode == EEthernetMode.Virtual)
            {
                return;
            }

            if ((addr < SlaveAddr) || (addr >= (SlaveAddr + SlaveCount)))
            {
                Log(EEthernetLogItem.Exception,
                    "Occurred invalid address error in UlUT55AEthernetClient.Write");
                throw new UT55AException(
                          "Occurred invalid address error in UlUT55AEthernetClient.Write",
                          EUT55AException.InvalidAddress);
            }

            try
            {
                lock (master)
                {
                    ushort nValue = FixedDecimalBeforeWrite(addr, register, value);
                    master.WriteSingleRegister((byte)addr, (ushort)register, nValue);
                }

                Log(EEthernetLogItem.Send, $"Address : {addr:X2}, Register : {register} - {value:F1}");
            }
            catch (Exception e)
            {
                Log(EEthernetLogItem.Exception, e.Message);
                throw new UT55AException(
                          "Occurred TCP stream sending error in UlUT55AEthernetClient.Write",
                          EUT55AException.Send);
            }
        }
Beispiel #4
0
 public int SetDataSingle(out byte[] requestBytes, out byte[] responseBytes, ushort start, ushort reg, out string errCode)
 {
     errCode = "OK";
     try
     {
         if (_config.SelectedMemType == Memtype.Coils)
         {
             _modbus.WriteSingleCoil(_config.Slaves, start, reg > 0);
         }
         if (_config.SelectedMemType == Memtype.HoldingRegisters)
         {
             _modbus.WriteSingleRegister(_config.Slaves, start, reg);
         }
         return(0);
     }
     catch (SlaveException ex)
     {
         errCode = ex.Message;
         return(1);
     }
     catch (Exception ex)
     {
         if (ex is InvalidOperationException)
         {
             throw;
         }
         errCode = ex.Message;
         return(2);
     }
     finally
     {
         requestBytes  = _modbus.Transport.RequestFrame;
         responseBytes = _modbus.Transport.ResponseFrame;
     }
 }
        private static void WriteRegister <TResult>(HoldRegister index, byte slaveId, ModbusSerialMaster master, decimal value) where TResult : struct
        {
            //Как хранится Int8??? в первом байте или во втором ushort?
            //возможно надо будет Buffer.BlockCopy(s, 0, dest, 0, readsize * 2); и брать dest[1]
            var address = index.RealAddress;
            //int32 = 4
            var size = index.DataType.GetDataTypeSize();
            //кол-во ushort для записи
            var readSize = (ushort)(size / 2);

            if (size < 2)
            {
                readSize = 1;
            }
            var dest      = new ushort[readSize];
            var realValue = new[] { (TResult)Convert.ChangeType(index.Multiplier * value, typeof(TResult)) };

            Buffer.BlockCopy(realValue, 0, dest, 0, size);
            if (readSize == 1)
            {
                master.WriteSingleRegister(slaveId, address, dest[0]);
            }
            else
            {
                master.WriteMultipleRegisters(slaveId, address, dest);
            }
        }
Beispiel #6
0
 private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
 {
     try {
         //MessageBox.Show(String.Format("{0}", e.NewValue));
         serialTransportRS485.WriteSingleRegister(1, 49999, STATUSW);
         Thread.Sleep(100);
         serialTransportRS485.WriteSingleRegister(1, 50009, Convert.ToUInt16(e.NewValue));
         Thread.Sleep(100);
         //MessageBox.Show("All write!");
     }
     catch (Exception ex)
     {
         String sMessage = String.Format("{0} {1}", DateTime.Now.ToString("hh:mm:ss "), ex.Message);
         logBox.Items.Add(sMessage);
     }
 }
Beispiel #7
0
        /// <summary>
        /// 设定指定通道温度
        /// </summary>
        /// <param name="Address">站号地址</param>
        /// <param name="Channel">通道地址</param>
        /// <param name="Temp">设定的温度</param>
        /// <returns>成功或失败</returns>
        public static bool Set_SP(byte Address, ushort Channel, short Temp)
        {
            if (PMAMaster == null)
            {
                return(false);
            }
            byte   SlaveAddress = Address;
            ushort StartAddress = (ushort)(17526 + Channel * 512);
            ushort Value        = Auxiliary.ShortToUshort((short)(Temp * 10));
            float  PV           = 0;

            try
            {
                lock (LockValue)
                {
                    PMAMaster.WriteSingleRegister(SlaveAddress, StartAddress, Value);
                }
                if (Get_PV(SlaveAddress, StartAddress, ref PV) == false)
                {
                    return(false);
                }

                if (PV != Temp)
                {
                    return(false);
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
        /// <summary>
        /// Отключение от устройства
        /// </summary>
        /// <param name="_portName">Имя порта</param>
        /// <param name="_errMessage">Сообщение</param>
        /// <returns></returns>
        internal void DisconnectToDevice()
        {
            if (_serial.IsOpen && _timer.IsEnabled)
            {
                // <Сброс регистров>
                var cleanRegs = new ushort[3] {
                    6, 7, 8
                };
                for (int i = 0; i < cleanRegs.Length; i++)
                {
                    _master.WriteSingleRegister(slaveID, cleanRegs[i], 0);
                }
                //</Сброс регистров>
            }
            _countTimes = 0;

            CleanSeriesWithChart();
            _timer.Stop();
            _serial.Close();
            _serial.Dispose();
            _master.Dispose();
            _errMessage      = "Остановлено";
            _stateSerialPort = "Подключить";
            _queryRegisters  = "Start";
        }
Beispiel #9
0
        /// <summary>
        /// 修改当前运行速度
        /// </summary>
        /// <param name="address">地址0-31</param>
        /// <param name="speed">设定的速度</param>
        /// <param name="IsUse">是否更新当前速度</param>
        public static bool SetSpeed(byte Address, ushort speed)
        {
            try
            {
                lock (LockValue)
                {
                    Thread.Sleep(2);
                    if (speed > 1000)
                    {
                        speed = 1000;
                    }
                    PanasonicA6Master.WriteSingleRegister(Address, 17920, speed);

                    A6_Channel[Address - 1].SetSpeed = speed;
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Beispiel #10
0
        private void MasterWrite()
        {
            try
            {
                byte   slaveAddress    = Convert.ToByte(txtSlaveAdress.Text);
                ushort registerAddress = Convert.ToUInt16(txtRegiAdress.Text); //ex)40003->3
                ushort value           = Convert.ToUInt16(txtValue.Text);      //0~10V : 0~10000

                master.WriteSingleRegister(slaveAddress, registerAddress, value);
                lblStatus.Text = "master write";
            }
            catch (Exception ex)
            {
                lblStatus.Text = ex.Message;
            }
        }
Beispiel #11
0
 public void WritemASet(byte slaveAddress, SerialPort serialPort1)
 {
     try
     {
         ModbusSerialMaster master     = ModbusSerialMaster.CreateRtu(serialPort1);
         ushort             mASetValue = (ushort)(mASet * 4096 / PowerSupplyType.MaxmA);
         master.WriteSingleRegister(slaveAddress, 40001, mASetValue);//写管电流,先不做验证是否写成功
         ComStateFlag = true;
     }
     catch (Exception)
     {
         MessageBox.Show("请检查端口设置", "错误提示");
         ComStateFlag = false;
         //throw;
     }
 }
        public void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value)
        {
            if (!serialPort.IsOpen)
            {
                Open();
            }

            try
            {
                master.WriteSingleRegister(slaveAddress, registerAddress, value);
            }
            catch (Exception ex)
            {
                AddMessage("Catch exception in the function WriteSingleRegister(). " + ex.Message,
                           DebugLevel.ExceptionLevel);
                Close();
            }
        }
Beispiel #13
0
 public void WriteFilLimitSet(byte slaveAddress, SerialPort serialPort1)
 {
     try
     {
         ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort1);
         if (FilLimitSet > PowerSupplyType.MaxFilLimit)//不要超过最大值
         {
             FilLimitSet = PowerSupplyType.MaxFilLimit;
         }
         ushort FilLimitSetValue = (ushort)(FilLimitSet * 4096 / 10);
         master.WriteSingleRegister(slaveAddress, 40005, FilLimitSetValue);//写管电压,先不做验证是否写成功
         ComStateFlag = true;
     }
     catch (Exception)
     {
         MessageBox.Show("请检查端口设置", "错误提示");
         ComStateFlag = false;
         //throw;
     }
 }
Beispiel #14
0
        //set AO
        private void AO_click(object sender, EventArgs e)
        {
            byte          slaveID    = 1;
            frmInputValue inputvalue = new frmInputValue();

            if (serialPort.IsOpen == true)
            {
                ushort index = ushort.Parse(((TextBox)sender).Tag.ToString());
                inputvalue.StringValue = ((TextBox)sender).Text;
                inputvalue.ShowDialog();
                if (inputvalue.DialogResult == DialogResult.OK)
                {
                    double value   = inputvalue.Value;
                    ushort aovalue = (ushort)value;

                    //use gain=20/32767, offset=0
                    //ushort aovalue = (ushort)(value * 32767 / 20.0);
                    master.WriteSingleRegister(slaveID, index, aovalue);
                }
            }
        }
 public void WriteRegisters(IMsgUart msg)
 {
     try
     {
         short startAddress = GetStartAddress(msg);
         if (startAddress != -1)
         {
             var propsInfo = msg.GetType().GetProperties();
             if ((propsInfo != null) && (propsInfo.Length > 0))
             {
                 for (int i = 0; i < propsInfo.Length; i++)
                 {
                     ushort data = Convert.ToUInt16(propsInfo[i].GetValue(msg, null));
                     _Master.WriteSingleRegister(_SlaveId, (ushort)(startAddress + i), data);
                 }
             }
         }
     }
     catch (Exception e)
     {
     }
 }
Beispiel #16
0
 private void Stop_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         ushort adress = 19;
         ushort value  = 0;
         master.WriteSingleRegister(slaveID, adress, value);
         rezh = 0;
     }
     catch
     {
         MessageBox.Show("Ошибка подключения");
     }
 }