private void ModbusScan_Tick(object sender, EventArgs e) { try { byte slaveAddress = 1; uint startAddress = 1280; // Start Address: Y0 ushort numberOfPoints = 8; // Reads 6 coils. byte[] bytes = objIModbusMaster.ReadCoilStatus(slaveAddress, startAddress, numberOfPoints); if (bytes != null) { bool[] result = Bit.ToArray(bytes); txtResult.Text = string.Empty; // clear text. for (int i = 0; i < numberOfPoints; i++) { txtResult.Text += string.Format("{0} # ", result[i]); } } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void SendPackage(IModbusMaster modbus, Device dv, DataBlock db) { try { SendDone.WaitOne(-1); switch (db.DataType) { case "Bit": byte[] bitArys = null; switch (db.TypeOfRead) { case "ReadCoilStatus": bitArys = modbus.ReadCoilStatus((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); break; case "ReadInputStatus": bitArys = modbus.ReadInputStatus((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); break; default: break; } var BitRs = Bit.ToArray(bitArys); if (bitArys.Length > db.Tags.Count) { return; } for (var j = 0; j < db.Tags.Count; j++) { db.Tags[j].Value = BitRs[j]; db.Tags[j].Checked = BitRs[j]; db.Tags[j].Enabled = BitRs[j]; db.Tags[j].Visible = BitRs[j]; db.Tags[j].ValueSelect1 = BitRs[j]; db.Tags[j].ValueSelect2 = BitRs[j]; db.Tags[j].Timestamp = DateTime.Now; } break; case "Int": var IntArys = modbus.ReadHoldingRegisters((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); var IntRs = Int.ToArray(IntArys); if (IntRs.Length > db.Tags.Count) { return; } for (var j = 0; j < IntRs.Length; j++) { db.Tags[j].Value = IntRs[j]; db.Tags[j].Timestamp = DateTime.Now; } break; case "DInt": var DIntArys = modbus.ReadHoldingRegisters((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); var DIntRs = Int.ToArray(DIntArys); if (DIntRs.Length > db.Tags.Count) { return; } for (var j = 0; j < DIntRs.Length; j++) { db.Tags[j].Value = DIntRs[j]; db.Tags[j].Timestamp = DateTime.Now; } break; case "Word": byte[] wdArys = null; switch (db.TypeOfRead) { case "ReadHoldingRegisters": wdArys = modbus.ReadHoldingRegisters((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); break; case "ReadInputRegisters": wdArys = modbus.ReadInputRegisters((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); break; default: break; } var wdRs = Word.ToArray(wdArys); if (wdRs.Length > db.Tags.Count) { return; } for (var j = 0; j < wdRs.Length; j++) { db.Tags[j].Value = wdRs[j]; db.Tags[j].Timestamp = DateTime.Now; } break; case "DWord": var dwArys = modbus.ReadHoldingRegisters((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); var dwRs = DWord.ToArray(dwArys); for (var j = 0; j < dwRs.Length; j++) { db.Tags[j].Value = dwRs[j]; db.Tags[j].Timestamp = DateTime.Now; } break; case "Real": var rl1Arys = modbus.ReadHoldingRegisters((byte)dv.SlaveId, $"{db.StartAddress}", db.Length); var rl1Rs = Real.ToArray(rl1Arys); for (var j = 0; j < rl1Rs.Length; j++) { db.Tags[j].Value = rl1Rs[j]; db.Tags[j].Timestamp = DateTime.Now; } break; } } catch (Exception ex) { IsConnected = false; EventscadaException?.Invoke(this.GetType().Name + " XModbus.SendPackage", ex.Message); } }