public List <PLCDataDomain> GetData(List <PLCDataDomain> listAddresses) { foreach (var item in listAddresses) { try { switch (item.TypePLC) { case PLCDataType.Register: item.Data = modbusClient.ReadHoldingRegisters(item.Address, 1).FirstOrDefault().ToString(); break; case PLCDataType.Coils: item.Data = modbusClient.ReadCoils(item.Address, 1).FirstOrDefault().ToString(); break; default: item.Data = "None data"; break; } } catch (Exception) { item.Data = "None data"; } } return(listAddresses); }
private void ReadVr_Click(object sender, RoutedEventArgs e) { //读取多个寄存器的值 int[] ReadVrVal = modbusClient.ReadHoldingRegisters(0, 3); textBoxVr0.Text = ReadVrVal[0].ToString(); textBoxVr1.Text = ReadVrVal[1].ToString(); textBoxVr2.Text = ReadVrVal[2].ToString(); }
private void timer1_Tick(object sender, EventArgs e) { try { //Client tanımlama ModbusClient tcpclient = new ModbusClient(Convert.ToString(textBox1.Text), 502); // //Bağlan tcpclient.Connect(); // //okuma // int a = Convert.ToInt32(textBox2.Text); int b = Convert.ToInt32(textBox3.Text); int c = Convert.ToInt32(textBox4.Text); int d = Convert.ToInt32(textBox5.Text); // //okuma // bool[] mb = tcpclient.ReadCoils(a - 1, 1); int [] mw = tcpclient.ReadHoldingRegisters((b - 1), 1); int[] mi = tcpclient.ReadHoldingRegisters((c - 1), 2); int[] mf = tcpclient.ReadHoldingRegisters((d - 1), 2); // double mii = ModbusClient.ConvertRegistersToDouble(mi); // float mff = ModbusClient.ConvertRegistersToFloat(mf); // //labela yazma // label7.Text = Convert.ToString(mb[0]); label8.Text = Convert.ToString(mw[0]); label12.Text = Convert.ToString(mii); label13.Text = Convert.ToString(mff); } // //hata yakalama catch (Exception) { timer1.Stop(); MessageBox.Show("Hata"); } }
private void button1_Click(object sender, EventArgs e) { istemci.Connect(); istemci.WriteSingleCoil(0, true); //istemci.WriteSingleRegister(0, Convert.ToInt32(textBox1.Text)); int[] a = new int[5]; etiket: a = istemci.ReadHoldingRegisters(0, 1); if (a[0] == 5) { goto etiket2; } goto etiket; etiket2: textBox1.Text = a[0].ToString(); istemci.ReceiveDataChanged += İstemci_ReceiveDataChanged; istemci.Disconnect(); }
private void FetchFromModbusServer() { if (ModbusHost.HasValue && ModbusAddress1.Value > 0) { ModbusClient modbusClient = null; try { modbusClient = new ModbusClient(ModbusHost.Value, ModbusPort.Value); modbusClient.Connect(); modbusClient.UnitIdentifier = (byte)ModbusID.Value; // Register 1 // read + 1 register ???!!! bug in the EasyModbus ????!!! lowest byte 0x00 !!! // [0] Hugh Byte // [1] Low Byte // [2] Dummy (High Byte) // [3] Dummy (Low Byte) = 0x00 in X1 (not in the X1 SImulation!) int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(ModbusAddress1.Value, ReadCount1.Value + 2); double result = 0; string result_str = ""; //byte[] tmp; for (int i = 0; i < (readHoldingRegisters.Length - 2); i++) { int tmp = readHoldingRegisters[i]; if (tmp == -32768) // fix for 0x00 { tmp = 0; } if (tmp < 0) // no negative values ! { tmp = tmp + (int)Math.Pow(2, 16); } result = result + (tmp * Math.Pow(2, (16 * ((readHoldingRegisters.Length - 2) - (i + 1))))); result_str = result_str + " 0x" + tmp.ToString("X4"); } OutputValue1.Value = result; ErrorMessage.Value = result_str; this.SchedulerService.InvokeIn(new TimeSpan(0, 0, TimeSpan.Value), FetchFromModbusServer); } catch (Exception e) { this.ErrorMessage.Value = e.ToString(); this.SchedulerService.InvokeIn(new TimeSpan(0, 1, 0), FetchFromModbusServer); } finally { if (modbusClient != null) { modbusClient.Disconnect(); } } } }
public static int[] LayDuLieuTCPHoldingRegister(ModbusClient modbus, ushort quantityHoldingRegisters, ushort minAddressHoldingRegister, ThietBiModel thietBiModel) { List <int> readHoldingRegister = new List <int>(); if (quantityHoldingRegisters != 0) { try { int soNguyenSauChia = quantityHoldingRegisters / DonViQuantityMoiLanDoc; for (int i = 0; i <= soNguyenSauChia; i++) { if (i != soNguyenSauChia) { int startAddress = i * DonViQuantityMoiLanDoc + minAddressHoldingRegister; int quantity = DonViQuantityMoiLanDoc - minAddressHoldingRegister; var temp = modbus.ReadHoldingRegisters(startAddress, (ushort)(quantity)); readHoldingRegister.AddRange(temp.ToList()); } else if (i == soNguyenSauChia) { int startAddress = i * DonViQuantityMoiLanDoc + minAddressHoldingRegister; int quantity = quantityHoldingRegisters % DonViQuantityMoiLanDoc - minAddressHoldingRegister; if (quantity != 0) { var temp = modbus.ReadHoldingRegisters(startAddress, (ushort)(quantity)); readHoldingRegister.AddRange(temp.ToList()); } } } } catch (ModbusException ex) { ExceptionFunctionCode(ex, thietBiModel); throw; } catch (Exception ex)//Lỗi lấy dữ liệu thất bại { ExceptionErrorConnection(ex, thietBiModel); throw; } } return(readHoldingRegister.ToArray()); }
public static float[] getMomentAndDate() { float[] data = new float[2]; try { int[] a = modbusClient.ReadHoldingRegisters(1034, 2); data[0] = ModbusClient.ConvertRegistersToFloat(a); int[] b = modbusClient.ReadHoldingRegisters(1040, 2); data[1] = ModbusClient.ConvertRegistersToFloat(b); } catch (Exception ex) { return(null); //TODO } return(data); }
private void timerWork(object sender, EventArgs e) { ushort adr = 6; ushort adr2 = 20; ushort adrd = 1; int[] register1 = modbusClient.ReadHoldingRegisters(adr, adrd); int[] register2 = modbusClient.ReadHoldingRegisters(adr2, adrd); SeriesCollection[0].Values.Add(register1[0]); SeriesCollection[1].Values.Add(register2[0]); if (SeriesCollection[0].Values.Count > 50) { SeriesCollection[0].Values.RemoveAt(0); SeriesCollection[1].Values.RemoveAt(0); } label.Content = register2[0].ToString(); }
// 2. Run the Read-Part on a Threadpool Thread private Task <string> ReadRegAsync(int address, ModbusClient client) { return(Task.Run(() => { return ModbusClient.ConvertRegistersToFloat( client.ReadHoldingRegisters(address, 2), ModbusClient.RegisterOrder.HighLow) .ToString(); })); }
private void modbustcp() { //this is modbus connectşon part of code ipadres = textBox1.Text; if (int.TryParse(textBox2.Text, out int a)) { portnumber = Convert.ToInt32(textBox2.Text); } else { MessageBox.Show("Port giriş hatası", "uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error); } try { //kolay gelsin reis ModbusClient modbustcp = new ModbusClient(ipadres, portnumber); modbustcp.Connect(); //MessageBox.Show("sdg"); pictureBox3.BackColor = Color.DarkGreen; int[] readHoldingRegisters1 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox3.Text), 1); int[] readHoldingRegisters2 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox4.Text), 1); int[] readHoldingRegisters3 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox5.Text), 1); int[] readHoldingRegisters4 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox6.Text), 1); int[] readHoldingRegisters5 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox7.Text), 1); adres1 = readHoldingRegisters1[0]; adres2 = readHoldingRegisters2[0]; adres3 = readHoldingRegisters3[0]; adres4 = readHoldingRegisters4[0]; adres5 = readHoldingRegisters5[0]; modbustcp.Disconnect(); modbus_error = false; } catch (Exception e) { modbus_error = true; if (!showed) { MessageBox.Show(e.Message); showed = true; } } }
private static void ReadHoldingRegsBarcode(ModbusClient client) { try { client.ReadHoldingRegisters(0, 0); } catch (Exception) { // ignored } }
/// <summary> /// Read the motor state. /// </summary> public void GetPosition() { if (this.mbClient == null) { return; } int fields = 2; int[] result = mbClient.ReadHoldingRegisters(MemoryMap.MOTOR_POSITION, fields); if (result != null) { if (result.Length == fields * 2) { } } // TODO: Return position. }
public void readPlc() { _client.Connect(); //Thread.Sleep(100); registers = _client.ReadHoldingRegisters(0, 4); _client.Disconnect(); register1 = registers[0]; register2 = registers[1]; register3 = registers[2]; register4 = registers[3]; }
public async Task ClientEventsTest() { int connectEvents = 0; int disconnectEvents = 0; using (var server = new MiniTestServer()) { server.Start(); using (var client = new ModbusClient(IPAddress.Loopback, server.Port, new ConsoleLogger())) { client.Connected += (sender, args) => { connectEvents++; }; client.Disconnected += (sender, args) => { disconnectEvents++; }; Assert.AreEqual(0, connectEvents); Assert.AreEqual(0, disconnectEvents); await client.Connect(); Assert.IsTrue(client.IsConnected); await EnsureWait(); // get events raised Assert.AreEqual(1, connectEvents); Assert.AreEqual(0, disconnectEvents); await server.Stop(); await client.ReadHoldingRegisters(0, 0, 1); await EnsureWait(); // time to set all information Assert.IsFalse(client.IsConnected); await EnsureWait(); // get events raised Assert.AreEqual(1, connectEvents); Assert.AreEqual(1, disconnectEvents); server.Start(); await client.ConnectingTask; Assert.IsTrue(client.IsConnected); } await EnsureWait(); // get events raised Assert.AreEqual(2, connectEvents); Assert.AreEqual(2, disconnectEvents); } }
private void modbusTimer_Tick(object sender, EventArgs e) { if (modbusClient.Connected == true) { _holdings = modbusClient.ReadHoldingRegisters(0, 4); double aiDeger = _holdings[3]; double ph = (aiDeger * 14) / 4095; phLbl.Text = "PH: " + Math.Round(ph, 1).ToString(); //modbusClient.Disconnect(); } }
public int RegisterValueConvertToInt(ModbusClient modbusClient, int b) { try { int[] a = modbusClient.ReadHoldingRegisters(b - 1, 1); return(a[0]); } catch (Exception) { return(0); } }
static void Main(string[] args) { ModbusClient modbusClient = new ModbusClient("192.168.18.10", 502); while (true) { DateTime myDateTime = DateTime.Now; // Read time value string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // Store timestamp as formatted string try { if (modbusClient.Connected) //Controlling of the system is connected. { int[] csd3_1_14Array = modbusClient.ReadHoldingRegisters(0, 30); //Read data from MODBUS TCP IP, start in memory block 0 and read 30 memory blocks. //int[] csd3_1_15Array = modbusClient.ReadHoldingRegisters(101, 100); //int[] csd3_1_16Array = modbusClient.ReadHoldingRegisters(101, 100); using (PLC_dbEntities db = new PLC_dbEntities()) // Entity framework linQ { CSD3_1_14 dataset_14 = new CSD3_1_14 { Timestamp = sqlFormattedDate, // Store timestamp, is used as primary key CO2 = csd3_1_14Array[0], // Store CO2 value 400 - 10000 ppm Temperatur = (float)csd3_1_14Array[1] / 10, // Convert Temperature integer to float with 1 decimal and store. Fugtighed = csd3_1_14Array[2], // Store Fugtighed value 0 - 100 % Strøm = (float)csd3_1_14Array[3] / 100, // Convert Strøm integer to float with 2 decimals and store. (Do we need to remove negative values) Spænding = (float)csd3_1_14Array[4] / 100, // Convert Spænding integer to float with 2 decimals and store. (Do we need to remove negative values) Effekt = csd3_1_14Array[5], // Store Effekt value (Do we need to remove negative values) Energi = csd3_1_14Array[6] + csd3_1_14Array[7] // Convert the two integers for Energi to one and store. (What operation is needed?) }; db.CSD3_1_14.Add(dataset_14); // Save dataset to variable db.SaveChanges(); //Save changes to SQL database } Console.WriteLine("[Data recieved] [" + sqlFormattedDate + "]"); Thread.Sleep(60000); // Sleeps for 60 s to limit data storing } else { Console.WriteLine("[" + sqlFormattedDate + "]: Connection not established, trying to connect."); modbusClient.Connect(); // Connect to ModBUS TCPIP } } catch (Exception ex) { Console.WriteLine("[ERROR] " + ex.ToString()); modbusClient.Disconnect(); Thread.Sleep(30000); } } }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Timer for data reading: private void timer_Modbus_Tick(object sender, EventArgs e) { timer_Modbus.Enabled = false; //Modbus Timer Part: int[] Read = modbusClient.ReadHoldingRegisters(180, 6); // ReadHoldingRegister from 180, Total registers read = 6 Fx = Convert.ToSingle(Read[0]) / 100; Fy = Convert.ToSingle(Read[1]) / 100; Fz = Convert.ToSingle(Read[2]) / 100; Mx = Convert.ToSingle(Read[3]) / 1000; My = Convert.ToSingle(Read[4]) / 1000; Mz = Convert.ToSingle(Read[5]) / 1000; if (Tamper_To_Zero.Text == "Tampering") { Fx -= tempFx; Fy -= tempFy; Fz -= tempFz; Mx -= tempMx; My -= tempMy; Mz -= tempMz; textBox1.Text = Convert.ToString(Math.Round(Fx, 2)); textBox2.Text = Convert.ToString(Math.Round(Fy, 2)); textBox3.Text = Convert.ToString(Math.Round(Fz, 2)); textBox4.Text = Convert.ToString(Math.Round(Mx, 3)); textBox5.Text = Convert.ToString(Math.Round(My, 3)); textBox6.Text = Convert.ToString(Math.Round(Mz, 3)); } else { textBox1.Text = Convert.ToString(Fx); textBox2.Text = Convert.ToString(Fy); textBox3.Text = Convert.ToString(Fz); textBox4.Text = Convert.ToString(Mx); textBox5.Text = Convert.ToString(My); textBox6.Text = Convert.ToString(Mz); } //Serial Timer Part: //FT300Port.Write(readHoldingRegister(0x09, 0x00B4, 6), 0, 8); //FT300Port.Write(request, 0, request.Length); //byte[] response = ReadExact(FT300Port.BaseStream, 1); //textBox2.Text = Convert.ToString(response[0]); //for (int i = 0; i < response.Length; i++) //{ // //float FT = Convert.ToSingle(response[i]) / 100; // textBox1.Text = Convert.ToString(response[i]); //} timer_Modbus.Enabled = true; }
public void connectAndrzej() { //ModbusClient modbusClient = new ModbusClient("COM1"); ModbusClient modbusX = new ModbusClient("127.0.0.1", 502); modbusX.ConnectionTimeout = 500; modbusX.Connect(); int[] readHoldingRegisters = modbusX.ReadHoldingRegisters(0, 10); foreach (int i in readHoldingRegisters) { Debug.WriteLine("Value of register " + i + "is" + readHoldingRegisters[i] + "\n"); } }
private void button_givedata_Click(object sender, EventArgs e) { dataGridView1.Rows.Clear(); modbusClient = new ModbusClient("192.168.100.8", 502); //Ip-Address and Port of Modbus-TCP-Server modbusClient.Connect(); try { int Address = Convert.ToInt32(startingAddress.Text); int kolvo = Convert.ToInt32(quantity.Text); if (RadioHolding.Checked == true) { int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters((Address - 40001), (kolvo - Address + 1)); for (int i = 0; i < readHoldingRegisters.Length; i++) { if (i < readHoldingRegisters.Length - 1) { dataGridView1.Rows.Insert(i, 1); } dataGridView1.Rows[i].Cells[1].Value = readHoldingRegisters[i].ToString(); dataGridView1.Rows[i].Cells[0].Value = (Address + i); } } if (RadioInput.Checked == true) { int[] ReadInputRegisters = modbusClient.ReadInputRegisters((Address - 30001), (kolvo - Address + 1)); for (int i = 0; i < ReadInputRegisters.Length; i++) { if (i < ReadInputRegisters.Length - 1) { dataGridView1.Rows.Insert(i, 1); } dataGridView1.Rows[i].Cells[1].Value = ReadInputRegisters[i].ToString(); dataGridView1.Rows[i].Cells[0].Value = (Address + i); } } button_changedata.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message.ToString() + "\n\nДиапазон адрессов:\n\nInputRegister - 30001\nHoldingRegisters - 40001"); } }
// GET api/values public double Get() { plc.Connect(); int[] read = plc.ReadHoldingRegisters(2, 1); analogValue = read[0]; // I mAValue = analogValue / 1000; temperature = ((pvHigh - pvLow) / (iHigh - iLow)) * (mAValue - iLow) + pvLow; result = Math.Round(temperature, 1); return(result); }
public void lerDados(int tipo) { int startadd, quant; string[] dados = new string[1]; try { if (modbus.Connected) { if (int.TryParse(tb_endi.Text, out startadd) && int.TryParse(tb_quantidade.Text, out quant) { tb_dados.Text = ""; switch (tipo) { case 1: bool[] dadosCo = modbus.ReadCoils(startadd, quant); dados = dadosCo.Select(x => x.ToString()).ToArray(); break; case 2: bool[] dadosDI = modbus.ReadDiscreteInputs(startadd, quant); dados = dadosDI.Select(x => x.ToString()).ToArray(); break; case 3: int[] dadosHR = modbus.ReadHoldingRegisters(startadd, quant); dados = dadosHR.Select(x => x.ToString()).ToArray(); break; case 4: int[] dadosIR = modbus.ReadInputRegisters(startadd, quant); dados = dadosIR.Select(x => x.ToString()).ToArray(); break; } for (int i = 0; i < dados.Length; i++) { tb_dados.Text += "Dado " + i.ToString() + ": " + dados[i].ToString() + "\r\n"; } } } else { MessageBox.Show("Servidor MODBUS TCP Desconectado"); } } catch (Exception err) { MessageBox.Show("Erro na leitura dos dados MODBUS. \r\nErro: " + err.Message); } }
public float RegisterValueConvertToFloat(ModbusClient modbusClient, int b) { try { int[] a = modbusClient.ReadHoldingRegisters(b - 1, 1); int[] fromfloat = new int[2]; fromfloat[1] = a[0]; float registr = ModbusClient.ConvertRegistersToFloat(fromfloat); return(registr); } catch (StartingAddressInvalidException) { return(999); } }
//private void UpdateLoop(object sender, DoWorkEventArgs e) //{ // do // { // try // { // OnUpdateCurrentPositions(); // Thread.Sleep(100); // } // catch(Exception ex) // { // U.Log(ex); // return; // } // } while (!_destroy); //} public void CheckStatus(int timeout) { Stopwatch timeoutStopw = new Stopwatch(); timeoutStopw.Start(); while (true) { try { //lock (this) //{ int[] regStatus = _modbusClient.ReadHoldingRegisters(IAIConstAddr.DSS1, 1); if (regStatus != null) { break; } if (timeoutStopw.ElapsedMilliseconds > timeout) { //U.LogAlarmPopup("IAI SCON [{0}] Check Status timeout waiting for Origin State signal to be ON.", this.Nickname); throw new MCoreExceptionPopup("IAI SCON [{0}] Check Status timeout waiting for Origin State signal to be ON.", this.Nickname); } //} } catch (Exception ex) { //U.LogAlarmPopup(ex, "CheckStatus Fail {0}", this.Nickname); throw new MCoreExceptionPopup(ex, "CheckStatus Fail {0}", this.Nickname); } Thread.Sleep(100); } }
private int[] lerDoisRegistros(int posicaoDoPrimeiro) { int[] registros = null; try { //modbusClient.WriteMultipleCoils(4, new bool[] { true, true, true, true, true, true, true, true, true, true }); //Write Coils starting with Address 5 //bool[] readCoils = modbusClient.ReadCoils(9, 10); //Read 10 Coils from Server, starting with address 10 registros = modbusClient.ReadHoldingRegisters(posicaoDoPrimeiro - 1, 2); //Read 2 Holding Registers from Server, starting with Address passed by a parameter } catch (Exception ex) { logger.Error("Não foi possível acessar o registro do Heart-Beat: " + ex.ToString()); throw ex; } return(registros); }
private void tmr_Modbus_Com_Tick(object sender, EventArgs e) { tmr_Modbus_Com.Enabled = false; modbusClient.WriteMultipleCoils(4, new bool[] { true, true, true, true, true, true, true, true, true, true }); //Write Coils starting with Address 5 bool[] readCoils = modbusClient.ReadCoils(0, 10); //Read 10 Coils from Server, starting with address 0 int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10); //Read 10 Holding Registers from Server, starting with Address 1 aGauge1.Value = readHoldingRegisters[0]; cb_coil_1.Checked = readCoils[0]; cb_coil_2.Checked = readCoils[1]; tmr_Modbus_Com.Enabled = true; }
public double ReadValues() { Console.WriteLine("connected!"); double Wh = 0; for (int i = 0; i < 50; i++) { Wh = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(65, 2), ModbusClient.RegisterOrder.HighLow); System.Threading.Thread.Sleep(1000); } return(Wh); }
private string ReadDataFromSlave(int FunctionCode, int startingAddress) { try // 데이터 Gathering 시도 { switch (FunctionCode) { case 0: return(modbusClient.ReadCoils(startingAddress, 1)[0].ToString()); // FC 1 00000-100000 시작번지 부터 지정한 개수 읽기 case 1: return(modbusClient.ReadDiscreteInputs(startingAddress, 1)[0].ToString()); // FC 2 100001-200000 case 2: return(modbusClient.ReadHoldingRegisters(startingAddress, 1)[0].ToString()); // FC 3 400001-500000 case 3: return(modbusClient.ReadInputRegisters(startingAddress, 1)[0].ToString()); // FC 4 300000-400000 default: // 이외의 값이 들어올 때 처리 return(null); } } catch (Exception) { return(null); } #region 예외처리 보관함 /*catch (ModbusException) // 모드버스 예외 발생 시 * { * i--; // 예외 발생한 부분 다시 반복 * } * catch (TimeoutException) // 타임 아웃 에러 시 * { * i--; // 예외 발생한 부분 다시 반복 * } * catch (StackOverflowException) // 데이터 과다복용 사망 시 * { * i--; * } * catch (NullReferenceException) * { * readData[i] = "Null 붙잡을 노래"; * } */ #endregion }
private void timer1_Tick(object sender, EventArgs e) { //Connect to Server if (modbusClient.Connected && modbusClient.Available(1)) { try { int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10); //Read 10 Holding Registers from Server, starting with Address 1 var new_text = String.Join(" - ", readHoldingRegisters); if (old_registers != new_text) { old_registers = new_text; var to_print = readHoldingRegisters[0]; if (to_print == 1) { var number = readHoldingRegisters[1].ToString(); listBox1.SelectedIndex = -1; for (int i = 0; i < listBox1.Items.Count; i++) { if (listBox1.Items[i].ToString().StartsWith(number)) { listBox1.SelectedIndex = i; var selected_prn = listBox1.Items[i].ToString(); var selected_bin = Path.ChangeExtension(selected_prn, "bin"); listBox2.Items.Add("printing " + selected_bin); var text_to_print = File.ReadAllText(trabajo_folder + "\\" + selected_bin); RawPrinterHelper.SendStringToPrinter(printerName.Text, text_to_print); print_count++; label7.Text = print_count.ToString(); } } } listBox2.Items.Add(new_text); } } catch (Exception ex) { plcStatus.Text = ex.Message; modbusClient.Disconnect(); } } else { modbusClient.Disconnect(); connect_to_plc(); } }
public Task <float> GetCurrentGenerationAsync() { if (_modbusClient == null) { throw new InvalidOperationException("Not yet connected. Call ConnectAsync first."); } //var data = _modbusClient.ReadHoldingRegistersRaw(SUNSPEC_I_MODEL_BLOCK_START, 39); //Console.Write(string.Join(", ", data.Select(b => b.ToString()))); var response = _modbusClient.ReadHoldingRegisters(SOLAR_EDGE_DC_POWER, 2); var power = response[0] * Math.Pow(10, response[1]); return(Task.FromResult(Convert.ToSingle(power))); }