public Data GetData(int id) { if (!port.IsOpen) { port.Open(); } MyModbus modbus = new MyModbus(); byte[] tByte = modbus.GetReadFrame((byte)0x01, (byte)0x03, (byte)0x02, (byte)0x01, 8); port.Write(tByte, 0, 8); port.Write(";"); byte[] tRecvBytes = new byte[32]; port.Read(tRecvBytes, 0, 32); string tRecvText = OnGetData(tRecvBytes, 2); UInt32 tData = Convert.ToUInt32(tRecvText, 16); byte[] lByte = modbus.GetReadFrame((byte)0x01, (byte)0x03, (byte)0x05, (byte)0x01, 8); port.Write(lByte, 0, 8); port.Write(";"); byte[] lRecvBytes = new byte[32]; port.Read(tRecvBytes, 0, 32); string lRecvText = OnGetData(tRecvBytes, 2); UInt32 lData = Convert.ToUInt32(lRecvText, 16); double t = (double)tData; temperature = (1.0 / (1.0 / (25 + 273.15) + 1.0 / 3435.0 * (Math.Log(1024.0 / t) - 1.0)) - 273.15); light = (double)lData; id++; Data data = new Data(id, "COM3", 9600, temperature, light, 0, 0, 0, 0, 0, "", ""); return(data); }
public void WriteLED(double rV, double gV, double yV, double bV, double wV) { if (!port.IsOpen) { port.Open(); } red = rV; green = gV; yellow = yV; blue = bV; white = wV; int[] LED = new int[5]; LED[0] = (int)rV; LED[1] = (int)gV; LED[2] = (int)yV; LED[3] = (int)bV; LED[4] = (int)wV; string[] sLED = new string[5]; string LED_Write = ""; for (int j = 0; j < 5; j++) { if (LED[j] >= 10) { sLED[j] = "00" + LED[j].ToString(); } else { sLED[j] = "000" + LED[j].ToString(); } LED_Write += sLED[j]; } List <byte> bWrite = new List <byte>(); List <string> sWrite = new List <string>(); for (int j = 0; j < LED_Write.Length; j += 2) { sWrite.Add(LED_Write.Substring(j, 2)); } for (int j = 0; j < sWrite.Count; j++) { bWrite.Add(Convert.ToByte(sWrite[j], 16)); } byte[] myWrite = bWrite.ToArray(); MyModbus modbus = new MyModbus(); byte[] text = modbus.GetReadFrame(0x01, 0x10, 0x06, 0x05, 8); List <byte> bText = new List <byte>(); int i = 0; for (int j = 0; j < 6; j++) { bText.Add(text[i]); i++; if (i == 6) { bText.Add(0x0A); foreach (byte wb in myWrite) { bText.Add(wb); } } } byte[] LED_Text = bText.ToArray(); ushort crc = MyModbus.CRC16(LED_Text, 0, LED_Text.Length - 3); bText.Add(MyModbus.WORD_HI(crc)); bText.Add(MyModbus.WORD_LO(crc)); byte[] myText = bText.ToArray(); port.Write(myText, 0, myText.Length); port.Write(";"); port.Close(); }
private void btConnect_Click(object sender, EventArgs e) { MyModbus.Disconnect(); MyModbus.Connect(this.txtIP.Text, Convert.ToInt32(txtPort.Text)); }