private void bwrkReadVFDDefs_DoWork(object sender, DoWorkEventArgs e) { int status = 0; V1000_ModbusRTU_Comm comm = new V1000_ModbusRTU_Comm(); ModbusRTUMsg msg = new ModbusRTUMsg(0x1F); ModbusRTUMaster modbus = new ModbusRTUMaster(); List <ushort> tmp = new List <ushort>(); VFD_Vals.Clear(); if (comm.OpenCommPort(ref spVFD) == 0x0001) { ProgressArgs.VFDRead_Total_Units = V1000_xlRead_List.Count; for (int i = 0; i < V1000_xlRead_List.Count; i++) { ProgressArgs.VFDRead_Unit = i; ProgressArgs.VFDRead_Progress = (byte)(((float)i / ProgressArgs.VFDRead_Total_Units) * 100); bwrkReadVFDDefs.ReportProgress(ProgressArgs.VFDRead_Progress); if (bwrkReadVFDDefs.CancellationPending) { e.Cancel = true; bwrkReadVFDDefs.ReportProgress(0); return; } V1000_Param_Data data = new V1000_Param_Data(); msg.Clear(); msg = modbus.CreateMessage(msg.SlaveAddr, ModbusRTUMaster.ReadReg, Convert.ToUInt16(V1000_xlRead_List[i].RegAddress, 16), 1, tmp); status = comm.DataTransfer(ref msg, ref spVFD); if (status == 0x0001) { // extract pertinent VFD parameter information the Excel File data.ParamNum = V1000_xlRead_List[i].ParamNum; data.ParamName = V1000_xlRead_List[i].ParamName; data.Multiplier = Convert.ToUInt16(V1000_xlRead_List[i].Multiplier); // Supplement the Excel file information with actual response from the VFD data.RegAddress = msg.StartReg; data.ParamVal = msg.Data[0]; data.DefVal = msg.Data[0]; VFD_Vals.Add(data); } } ProgressArgs.VFDRead_Progress = 100; ProgressArgs.VFDRead_Stat = 0x02; e.Result = 0x02; comm.CloseCommPort(ref spVFD); bwrkReadVFDDefs.ReportProgress(100); } }
private void bwrkReadVFDVals_DoWork(object sender, DoWorkEventArgs e) { int status = 0; V1000_ModbusRTU_Comm comm = new V1000_ModbusRTU_Comm(); ModbusRTUMsg msg = new ModbusRTUMsg(SlaveAddress); ModbusRTUMaster modbus = new ModbusRTUMaster(); List <ushort> tmp = new List <ushort>(); // proceed further only if opening of communication port is successful if (comm.OpenCommPort(ref spVFD) == 0x0001) { ProgressArgs.VFDRead_Total_Units = V1000_Vals.Count; for (int i = 0; i < ProgressArgs.VFDRead_Total_Units; i++) { if (bwrkReadVFDVals.CancellationPending) { e.Cancel = true; bwrkReadVFDVals.ReportProgress(0); return; } msg.Clear(); msg = modbus.CreateMessage(msg.SlaveAddr, ModbusRTUMaster.ReadReg, V1000_Vals[i].RegAddress, 1, tmp); status = comm.DataTransfer(ref msg, ref spVFD); if (status == 0x0001) { V1000_Vals[i].ParamVal = msg.Data[0]; // Create a string version for display purposes of the actual paramater value if (V1000_Vals[i].NumBase == 16) { V1000_Vals[i].ParamValDisp = "0x" + V1000_Vals[i].ParamVal.ToString("X4"); } else { V1000_Vals[i].ParamValDisp = ((float)V1000_Vals[i].ParamVal / V1000_Vals[i].Multiplier).ToString() + " " + V1000_Vals[i].Units; } } ProgressArgs.VFDRead_Unit = i; ProgressArgs.VFDRead_Progress = (byte)(((float)i / ProgressArgs.VFDRead_Total_Units) * 100); bwrkReadVFDVals.ReportProgress((int)ProgressArgs.VFDRead_Progress); } ProgressArgs.VFDRead_Progress = 100; ProgressArgs.VFDRead_Stat = 0x02; e.Result = 0x02; comm.CloseCommPort(ref spVFD); bwrkReadVFDVals.ReportProgress(100); } }
private void btnCreateModbusRTUMsg_Click(object sender, EventArgs e) { OutputMsg.ClearAll(); try { OutputMsg.SlaveAddr = Convert.ToByte(txtSlaveAddr.Text, 16); // Get Slave Address switch (cmbFuncCode.SelectedIndex) // Get Function Code { case 0: OutputMsg.FuncCode = 0x03; break; case 1: OutputMsg.FuncCode = 0x08; break; case 2: OutputMsg.FuncCode = 0x10; break; } OutputMsg.StartReg = Convert.ToUInt16(txtStartReg.Text, 16); // Get Starting Register OutputMsg.RegCount = Convert.ToUInt16(txtRegCnt.Text); // Get number of registers to be read or written } catch { MessageBox.Show("Entry Error!"); return; } if (txtDataBuffer.Text != "") { OutputMsg.Data = Modbus.CreateDataPayloadUShort(txtDataBuffer.Text); } OutputMsg = Modbus.CreateMessage(OutputMsg); SerialMsg = Modbus.CreateRawMessageBuffer(OutputMsg, true); txtDataBuffComplete.Text = CreateModbusRTUDataString(SerialMsg); txtBuffSize.Text = (OutputMsg.Data.Count() * 2).ToString(); txtModCRC16Result.Text = "0x" + OutputMsg.CRC16.ToString("X4"); txtModCRC16Upper.Text = "0x" + ((byte)(OutputMsg.CRC16 & 0x00FF)).ToString("X2"); txtModCRC16Lower.Text = "0x" + ((byte)(OutputMsg.CRC16 >> 8)).ToString("X2"); }
public int SaveParamChanges(byte p_SlaveAddr, ref SerialPort p_SPort) { int RetCode = 0; List <ushort> data = new List <ushort>(); ModbusRTUMsg msg = new ModbusRTUMsg(); // Add a value of 0 to the data payload. Parameter update saves are accomplished by // writing a value of 0 to register 0x0900. data.Add(0); // Create Modbus RTU message and send it out to the drive via the DataTransfer() method ModbusRTUMaster modbus = new ModbusRTUMaster(p_SlaveAddr, ModbusRTUMaster.WriteReg, 0x0900, 1, data); msg = modbus.CreateMessage(); RetCode = DataTransfer(ref msg, ref p_SPort); return(RetCode); }
private void btnCalcModCRC16_Click(object sender, EventArgs e) { byte RegSize; List <byte> Payload = new List <byte>(); ModbusRTUMaster Msg = new ModbusRTUMaster(); Msg.SlaveAddr = Convert.ToByte(txtSlaveAddr.Text, 16); // Get Slave Address switch (cmbFuncCode.SelectedIndex) // Get Function Code { case 0: Msg.FuncCode = 0x03; break; case 1: Msg.FuncCode = 0x08; break; case 2: Msg.FuncCode = 0x10; break; } Msg.StartReg = Convert.ToUInt16(txtStartReg.Text, 16); // Get Starting Register Msg.RegCount = Convert.ToUInt16(txtRegCnt.Text); // Get number of registers to be read or written RegSize = Convert.ToByte(txtRegSize.Text); // Get size of each register to be read or written if (txtDataBuffer.Text != "") { Payload = CreateDataPayload(txtDataBuffer.Text); } Msg.CreateMessage(Payload); txtDataBuffComplete.Text = CreateModbusRTUDataString(Msg); txtBuffSize.Text = Msg.DataBytes.ToString(); txtModCRC16Result.Text = "0x" + Msg.CRC16.ToString("X4"); txtModCRC16Upper.Text = "0x" + ((byte)(Msg.CRC16 & 0x00FF)).ToString("X2"); txtModCRC16Lower.Text = "0x" + ((byte)(Msg.CRC16 >> 8)).ToString("X2"); }
private void btnVFDReset_Click(object sender, EventArgs e) { V1000_ModbusRTU_Comm comm = new V1000_ModbusRTU_Comm(); ModbusRTUMsg msg = new ModbusRTUMsg(0x1F); ModbusRTUMaster modbus = new ModbusRTUMaster(); List <ushort> val = new List <ushort>(); msg.Clear(); val.Clear(); val.Add(2220); msg = modbus.CreateMessage(msg.SlaveAddr, ModbusRTUMaster.WriteReg, 0x0103, 1, val); comm.OpenCommPort(ref spVFD); int status = comm.DataTransfer(ref msg, ref spVFD); if (status != 0x0001) { MessageBox.Show("VFD Parameter Reset to Default Failure!!"); } comm.CloseCommPort(ref spVFD); }
private void bwrkModVFD_DoWork(object sender, DoWorkEventArgs e) { int status = 0; V1000_ModbusRTU_Comm comm = new V1000_ModbusRTU_Comm(); ModbusRTUMsg msg = new ModbusRTUMsg(0x1F); ModbusRTUMaster modbus = new ModbusRTUMaster(); List <ushort> val = new List <ushort>(); // proceed further only if opening of communication port is successful if (comm.OpenCommPort(ref spVFD) == 0x0001) { ProgressArgs.VFDWrite_Total_Units = VFD_Sched_Chng_Vals.Count; for (int i = 0; i < ProgressArgs.VFDWrite_Total_Units; i++) { ProgressArgs.VFDWrite_Unit = i; ProgressArgs.VFDWrite_Progress = (byte)(((float)i / ProgressArgs.VFDWrite_Total_Units) * 100); bwrkModVFD.ReportProgress(ProgressArgs.VFDWrite_Progress); if (bwrkModVFD.CancellationPending) { e.Cancel = true; ProgressArgs.VFDWrite_Stat = ProgressEventArgs.Stat_Canceled; bwrkModVFD.ReportProgress(0); return; } msg.Clear(); val.Clear(); val.Add(VFD_Sched_Chng_Vals[i].ParamVal); msg = modbus.CreateMessage(msg.SlaveAddr, ModbusRTUMaster.WriteReg, VFD_Sched_Chng_Vals[i].RegAddress, 1, val); status = comm.DataTransfer(ref msg, ref spVFD); if (status != 0x0001) { MessageBox.Show("VFD Parameter Update Failure!!"); e.Cancel = true; ProgressArgs.VFDWrite_Stat = ProgressEventArgs.Stat_Error; bwrkModVFD.ReportProgress(0); break; } } // if (status == 0x0001) { // Update all the progress and status flags ProgressArgs.VFDWrite_Progress = 100; ProgressArgs.VFDWrite_Stat = ProgressEventArgs.Stat_Complete; e.Result = 0x02; // Save the parameter changes in the VFD status = comm.SaveParamChanges(0x1F, ref spVFD); if (status != 0x0001) { MessageBox.Show("VFD Modified Parameter Save Failure!!"); } bwrkModVFD.ReportProgress(100); } // Close the communication port and report the thread as complete comm.CloseCommPort(ref spVFD); } }