public string ReadString(ushort address, ushort points) { CustomReadHoldingRegistersRequest readAscii = new CustomReadHoldingRegistersRequest(3, 1, address, points); CustomReadHoldingRegistersResponse response = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readAscii); return(System.Text.Encoding.ASCII.GetString(response.Data)); }
public virtual void ExecuteCustomMessage_ReadHoldingRegisters() { CustomReadHoldingRegistersRequest request = new CustomReadHoldingRegistersRequest(3, SlaveAddress, 104, 2); CustomReadHoldingRegistersResponse response = Master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(request); Assert.AreEqual(new ushort[] { 0, 0 }, response.Data); }
public float[] ReadFloat(ushort address, ushort points) { float[] floatval = new float[points]; CustomReadHoldingRegistersRequest readFloat = new CustomReadHoldingRegistersRequest(3, 1, address, points); CustomReadHoldingRegistersResponse response = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readFloat); for (ushort i = 0; i < points; i++) { byte[] floatOr = new byte[] { response.Data[3 + 4 * i], response.Data[2 + 4 * i], response.Data[1 + 4 * i], response.Data[0 + 4 * i] }; floatval[i] = BitConverter.ToSingle(floatOr, 0); } return(floatval); }
public int[] ReadInt32(ushort address, ushort points) { int[] longval = new int[points]; CustomReadHoldingRegistersRequest readLong = new CustomReadHoldingRegistersRequest(3, 1, address, points); CustomReadHoldingRegistersResponse response = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readLong); for (ushort i = 0; i < points; i++) { byte[] longOr = new byte[] { response.Data[3 + 4 * i], response.Data[2 + 4 * i], response.Data[1 + 2 * i], response.Data[0 + 2 * i] }; longval[i] = BitConverter.ToInt32(longOr, 0); } return(longval); }
public virtual void ExecuteCustomMessage_WriteMultipleRegisters() { ushort testAddress = 120; ushort[] testValues = new ushort[] { 10, 20, 30, 40, 50 }; CustomReadHoldingRegistersRequest readRequest = new CustomReadHoldingRegistersRequest(3, SlaveAddress, testAddress, (ushort)testValues.Length); CustomWriteMultipleRegistersRequest writeRequest = new CustomWriteMultipleRegistersRequest(16, SlaveAddress, testAddress, new RegisterCollection(testValues)); var response = Master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readRequest); ushort[] originalValues = response.Data; Master.ExecuteCustomMessage <CustomWriteMultipleRegistersResponse>(writeRequest); response = Master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readRequest); ushort[] newValues = response.Data; Assert.AreEqual(testValues, newValues); writeRequest = new CustomWriteMultipleRegistersRequest(16, SlaveAddress, testAddress, new RegisterCollection(originalValues)); Master.ExecuteCustomMessage <CustomWriteMultipleRegistersResponse>(writeRequest); }
private void GetAlarmsEvents(ProgressBar progress, ushort FC, ushort quantity, bool getAlarms) { progress.Value = 0; string OmniIP = "10.10.1." + Convert.ToString(FC + 10); TcpClient client = new TcpClient(OmniIP, 502); client.ReceiveTimeout = 500; ModbusIpMaster master = ModbusIpMaster.CreateIp(client); //Create text file string fileName; if (getAlarms) { fileName = "FC" + Convert.ToString(FC) + "_alarms.txt"; } else { fileName = "FC" + Convert.ToString(FC) + "_events.txt"; } TextWriter txt = new StreamWriter(fileName); //Number of events to load master.WriteSingleRegister((byte)1, (ushort)3769, quantity); //Send command to load Events on buffer byte commandByte; if (getAlarms) { commandByte = 0x10; } else { commandByte = 0x80; } //byte[] invCommandBytes = new byte[] { 0, commandNibble, 0, 0 }; RegisterCollection invCommand = new RegisterCollection(new byte[] { 0, commandByte, 0, 0 }); CustomWriteMultipleRegistersRequest reqCommand = new CustomWriteMultipleRegistersRequest(16, 1, 15129, invCommand); master.ExecuteCustomMessage <CustomWriteMultipleRegistersResponse>(reqCommand); //Wait buffer is ready CustomReadHoldingRegistersResponse cmdReg; do { CustomReadHoldingRegistersRequest readCmd = new CustomReadHoldingRegistersRequest(3, 1, 15129, 1); cmdReg = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readCmd); //Console.WriteLine(Convert.ToString(cmdReg.Data[1])); ----Old command for console version---- } while (cmdReg.Data[1] != 0); //Read buffer int endIndex; int CRIndex; DateTime timeStamp; IFormatProvider dateFormat = new System.Globalization.CultureInfo("en-GB"); for (ushort i = 0; i < 600; i++) { try //send request to Omni for the current package { CustomReadBufferRequest reqBuffer = new CustomReadBufferRequest(65, 1, 9402, i); CustomReadBufferResponse packet = master.ExecuteCustomMessage <CustomReadBufferResponse>(reqBuffer); //stop if find end of file endIndex = packet.StrData.IndexOf(Convert.ToChar(26)); //get index of end of file if exists if (endIndex != -1) //if end of file was found { txt.Write(packet.StrData.Substring(0, endIndex)); break; } //stop if find time before yesterday at 17:00 try { CRIndex = packet.StrData.IndexOf(Convert.ToChar(13));//get index of carriage return to find date if (getAlarms) { timeStamp = Convert.ToDateTime(packet.StrData.Substring(CRIndex + 1, 19), dateFormat); } else { timeStamp = Convert.ToDateTime(packet.StrData.Substring(CRIndex + 10, 18), dateFormat); } if (timeStamp < DateTime.Today.AddDays(-1).AddHours(17)) { txt.Write(packet.StrData.Substring(0, CRIndex)); break; } } catch { } txt.Write(packet.StrData); progress.Increment(1); } catch //if request timeout, omni is refilling buffer { System.Threading.Thread.Sleep(3000); //delay 3s //Restart client connection client.Close(); client = new TcpClient(OmniIP, 502); client.ReceiveTimeout = 500; master = ModbusIpMaster.CreateIp(client); progress.Value = 0; i--;//decrement packet index to reapeat the request } } progress.Value = 63; txt.Close(); client.Close(); }