static void Main(string[] args) { ModbusRTU modbusRTU = new ModbusRTU(); try { modbusRTU.OpenCom("COM11", BaudRateEnum.BaudRate9600, System.IO.Ports.Parity.None, System.IO.Ports.StopBits.One, DataBitsEnum.DataBits8); Console.WriteLine("Sesscess"); for (int i = 0; i < 100; i++) { byte[] reuslt = modbusRTU.ReadKeepReg(17, 107, 3); byte[] re = new byte[2]; re[0] = reuslt[1]; re[1] = reuslt[0]; Console.WriteLine(BitConverter.ToInt16(re, 0).ToString()); Task.Delay(1000).Wait(); } } catch (Exception) { throw; } }
public void SetDataPointRealValueByFunNun16Test() { ModbusRTUServer modbusRTUServer = new ModbusRTUServer(); modbusRTUServer.InitializeFromConfigFile(modbusConfigFile, serialPortConfigFile); List <DataPoint> dataPoints = new List <DataPoint>(); modbusRTUServer.SerialPort.OnCurrentRequestDataChanged += new EventHandler <RequstDataEventArgs>(SerialPort_OnRequestDataChanged); modbusRTUServer.SerialPort.OnCurrentReceiveDataChanged += new EventHandler <ReceiveDataEventArgs>(SerialPort_OnReceiveDataChanged); dataAnalyzeMode = modbusRTUServer.DataAnalyzeMode; allDataPoints = modbusRTUServer.AllDataPoints; dataPoints.Add(new DataPoint() { DeviceAddress = 1, StartRegisterAddress = 83, DataPointType = DataPointType.WriteAndReadByFunNum03, DataPointDataType = DataPointDataType.F32, RealTimeValue = -1, ValueToSet = 101.7 }); List <List <byte> > writeRegisterCommandBytes = ModbusRTU.CreateWriteRegisterCommands(DataAnalyzeMode.DataHighToLow, dataPoints); if (modbusRTUServer.SerialPort.TryOpenSerialPort()) { foreach (var writeBytes in writeRegisterCommandBytes) { modbusRTUServer.SerialPort.WriteSerialPort(writeBytes.ToArray()); } } }
private void Button_MouseClick(object sender, MouseEventArgs e) { this.PeriodicRefreshTimer.Enabled = false; ModbusRTU.SuspendRead((byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInBit);//鼠标单击本控件后,进入写寄存器状态,暂停寄存器的读操作 switch (_ButtonClickAction) { case ModbusButtonClickActionEnum.Set: ModbusRTU.MasterDataRepos.Coils[_WriteAddress] = true; break; case ModbusButtonClickActionEnum.Reset: ModbusRTU.MasterDataRepos.Coils[_WriteAddress] = false; break; case ModbusButtonClickActionEnum.Toggle: ModbusRTU.MasterDataRepos.Coils[_WriteAddress] = !ModbusRTU.MasterDataRepos.Coils[_WriteAddress]; break; default: break; } ModbusRTU.VoteToConfirmTransmitRegs('+', (byte)_WriteFunctionCode, _WriteAddress, _WriteDataLengthInBit); ModbusRTU.AssembleRequestADU(1, ModbusRTU.LoadUnmannedBuses((byte)_WriteFunctionCode, 0)); ModbusRTU.ResumeRead((byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInBit);//鼠标单击本控件后,进入写寄存器状态,暂停寄存器的读操作 PeriodicRefreshTimer.Enabled = true; }
public BitStatus_ModbusRTU() { InitializeComponent(); this.BorderStyle = BorderStyle.FixedSingle; PeriodicRefreshTimer.Elapsed += PeriodicRefreshTimer_Elapsed; ModbusRTU.VoteToConfirmTransmitRegs('+', (byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInBit);//控件初始化时,票决器根据地址值自动加1,并判断票选结果 }
public void InitializeModbusRtu(SerialPort serialPort) { this.serialPort = serialPort; this.modbusRtu = new ModbusRTU(serialPort); this.modbusRtu.OnCurrentRequestDataChanged += new EventHandler <RequstDataEventArgs>(ModbusRtu_OnRequestDataChanged); this.modbusRtu.OnCurrentReceiveDataChanged += new EventHandler <ReceiveDataEventArgs>(ModbusRtu_OnReceiveDataChanged); }
public Button_ModbusRTU() { InitializeComponent(); PeriodicRefreshTimer.Elapsed += PeriodicRefreshTimer_Elapsed; PeriodicRefreshTimer.Enabled = true; this.MouseClick += Button_MouseClick; ModbusRTU.VoteToConfirmTransmitRegs('+', (byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInBit);//控件初始化时,票决器根据地址值自动加1,并判断票选结果 }
public Textbox_ModbusRTU() { PeriodicRefreshTimer.Elapsed += PeriodicRefreshTimer_Elapsed; this.MouseClick += ModbusView_MouseClick1; this.KeyPress += ModbusView_KeyPress; ModbusRTU.VoteToConfirmTransmitRegs('+', (byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInWord);//控件初始化时,票决器根据地址值自动加1,并判断票选结果 }
public Form1() { InitializeComponent(); OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x8C, 0x3A }); //1 OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x01, 0xFF, 0x00, 0xDD, 0xFA }); //2 OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x02, 0xFF, 0x00, 0x2D, 0xFA }); //3 OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x03, 0xFF, 0x00, 0x7C, 0x3A }); //4 OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x04, 0xFF, 0x00, 0xCD, 0xFB }); //5 OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x05, 0xFF, 0x00, 0x9C, 0x3B }); //6 OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x06, 0xFF, 0x00, 0x6C, 0x3B }); //7 OpenCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x07, 0xFF, 0x00, 0x3D, 0xFB }); //8 CloseCmdBytes.Add(new byte[8] { 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xCA }); //1 CloseCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x9C, 0x0A }); //2 CloseCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x02, 0x00, 0x00, 0x6C, 0x0A }); //3 CloseCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x03, 0x00, 0x00, 0x3D, 0xCA }); //4 CloseCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x04, 0x00, 0x00, 0x8C, 0x0B }); //5 CloseCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x05, 0x00, 0x00, 0xDD, 0xCB }); //6 CloseCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x06, 0x00, 0x00, 0x2D, 0xCB }); //7 CloseCmdBytes.Add(new byte[8] { 0x01, 0x05, 0x00, 0x07, 0x00, 0x00, 0x7C, 0x0B }); //8 serialPort2 = new SerialPort2(socketControl); ModbusMaster = new ModbusRTU(serialPort2, ModbusRTUmode.Master); }
private void buttonOpenClose_Click(object sender, EventArgs e) { try { this.Invoke((EventHandler)(delegate { //根据当前串口对象,来判断操作 if (comm.IsOpen) { this.CommClosing = true; while (this.CommListening) { Application.DoEvents(); //【防止关闭串口时卡死在close()时用到】 } comm.Close(); //打开时点击,则关闭串口 this.CommClosing = false; } else { if (buttonConnect.Text == "断开") { buttonConnet_Click(this.buttonConnect, new EventArgs()); } //关闭时点击,则设置好端口,波特率后打开 try { comm.PortName = comboPortName.Text; comm.BaudRate = int.Parse(comboBaudrate.Text); comm.Parity = Parity.None; comm.Open(); comm.Read(new byte[comm.BytesToRead], 0, comm.BytesToRead);//把缓冲区的数据全部清除 this.ModbusMaster = new ModbusRTU(comm, ModbusRTUmode.Master); } catch (Exception ex) { //捕获到异常信息,创建一个新的comm对象,之前的不能用了。 comm = new SerialPort(); //现实异常信息给客户。 MessageBox.Show("打开串口时出现如下异常:\r\n\r\n" + ex.Message); } } //设置按钮的状态 buttonOpenClose.Text = comm.IsOpen ? "关闭串口" : "打开串口"; })); } catch (Exception ex2) { MessageBox.Show(ex2.ToString()); } }
private void InitializeModbusRTU() { this.serialPort = new SerialPort(); this.serialPort.PortName = this.cbPorts.Text as string;//this.serialPort.PortName = this.cbPorts.SelectedItem as string; this.serialPort.BaudRate = (int)this.cbBaudRate.SelectedItem; this.serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), (string)this.cbParity.SelectedItem, false); this.serialPort.DataBits = (int)this.cbDataBits.SelectedItem; this.serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), (string)this.cbStopBit.SelectedItem); this.modbusRTU = new ModbusRTU(serialPort); this.modbusRTU.OnCurrentRequestDataChanged += new EventHandler <RequstDataEventArgs>(modbusRTU_OnRequestDataChanged); this.modbusRTU.OnCurrentReceiveDataChanged += new EventHandler <ReceiveDataEventArgs>(modbusRTU_OnReceiveDataChanged); }
public void ReadKeepRegTest() { Modbus.ModbusRTU modbusRTU = new ModbusRTU(); modbusRTU.OpenCom("COM11", BaudRateEnum.BaudRate9600, System.IO.Ports.Parity.None, System.IO.Ports.StopBits.None, DataBitsEnum.DataBits8); byte[] reuslt = modbusRTU.ReadKeepReg(17, 107, 3); byte[] re = new byte[2]; re[0] = reuslt[1]; re[1] = reuslt[0]; string s = BitConverter.ToInt16(re, 0).ToString(); }
public MainForm() { InitializeComponent(); WorkSpcaeSystemInfoForm.MdiParent = this; WorkSpcaeFaultInfoForm.MdiParent = this; WorkSpcaeWaveformForm.MdiParent = this; WorkSpaceWorkModeForm.MdiParent = this; treeView1.ExpandAll(); ModbusRTU.IsMaster = true; ModbusRTU.AssembleRequestADU(1, ModbusRTU.LoadUnmannedBuses((byte)ModbusRTU.ModbusFuncCode.ReadStorageRegs, 8)); ModbusRTU.AssembleRequestADU(1, ModbusRTU.LoadUnmannedBuses((byte)ModbusRTU.ModbusFuncCode.ReadInputRegs, 8)); ModbusRTU.AssembleRequestADU(1, ModbusRTU.LoadUnmannedBuses((byte)ModbusRTU.ModbusFuncCode.ReadCoils, 8)); }
private void SerialPort_OnReceiveDataChanged(object sender, ReceiveDataEventArgs e) { List <byte> recevideData = e.ReceiveData; this.canSendNextRequestCommandBytes = true; if (null != recevideData) { this.currentRecivedByteData = recevideData; AnalyzeRecivedDataReponse reponse = ModbusRTU.AnalyzeRecivedDataStatic(this.dataAnalyzeMode, this.currentRequestByteData, recevideData); if (reponse.ModbusReponseSuccess && reponse.AnalyzeRecivedDataSuccess) { var dataPointsWhoseRealTimeDataChanged = ModbusRTU.SetDataPointValueFromRegisterValue(reponse.Registers, this.allDataPoints); } } }
private List <ReadRegisterCommand> GetReadRegisterCommands(List <DataPoint> dataPoints) { List <ReadRegisterCommand> readRegisterCommands = new List <ReadRegisterCommand>(); List <List <byte> > requestBytes = ModbusRTU.CreateReadRegisterCommands(dataPoints); foreach (var requestByte in requestBytes) { var readRegisterCommand = new ReadRegisterCommand(); readRegisterCommand.ReadCommand = requestByte; readRegisterCommands.Add(readRegisterCommand); } return(readRegisterCommands); }
private void buttonConnet_Click(object sender, EventArgs e) { if (buttonConnect.Text == "连接") { if (comm.IsOpen) { this.buttonOpenClose_Click(this.buttonOpenClose, new EventArgs()); } toolStripStatusLabel1.Text = "正在连接中……"; IPAddress ips = IPAddress.Parse(this.textBoxIPAddress.Text); //("192.168.2.1"); IPEndPoint ipe = new IPEndPoint(ips, Convert.ToInt32(this.textBoxPort.Text)); //把ip和端口转化为IPEndPoint实例 socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { socketControl.Connect(ipe);//连接到服务器 toolStripStatusLabel1.Text = ""; MessageBox.Show("连接成功"); serialPort2 = new SerialPort2(socketControl); ModbusMaster = new ModbusRTU(serialPort2, ModbusRTUmode.Master); ModbusMaster.DeviceAddress = ACU_Address; th = new Thread(ReceiveMsg); th.IsBackground = true; th.Start(); buttonConnect.Text = "断开"; } catch (Exception ex) { toolStripStatusLabel1.Text = ""; MessageBox.Show(ex.Message); } } else if (buttonConnect.Text == "断开") { toolStripStatusLabel1.Text = "正在断开连接……"; th.Abort(); socketControl.Close(); buttonConnect.Text = "连接"; toolStripStatusLabel1.Text = ""; } }
private void ModbusView_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) //如果按下了Enter键,则进入发数据状态 { if (UInt16.TryParse(this.Text, out ModbusRTU.MasterDataRepos.StorageRegs[_WriteAddress]) == false) //TryParse 函数如果判断出所转换的字符串与所对应的数据格式不对应,会以0值out出来 { this.Text = "Wrong Input"; return; } ; // 需要改进,增加容错能力 考虑使用uint16.tryparse() ModbusRTU.VoteToConfirmTransmitRegs('+', (byte)_WriteFunctionCode, _WriteAddress, _WriteDataLengthInWord); ModbusRTU.AssembleRequestADU(1, ModbusRTU.LoadUnmannedBuses((byte)_WriteFunctionCode, 0)); HideCaret(this.Handle); PeriodicRefreshTimer.Enabled = true; } if (e.KeyChar == (char)Keys.Escape)//通过Esc键取消写操作,恢复周期性读数据状态 { ModbusRTU.ResumeRead((byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInWord); HideCaret(this.Handle); PeriodicRefreshTimer.Enabled = true; } }
public Label_ModbusRTU() { InitializeComponent(); PeriodicRefreshTimer.Elapsed += PeriodicRefreshTimer_Elapsed; ModbusRTU.VoteToConfirmTransmitRegs('+', (byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInWord);//控件初始化时,票决器根据地址值自动加1,并判断票选结果 }
public FormSensor(ModbusRTU master) { InitializeComponent(); Master = master; }
private void ModbusView_MouseClick1(object sender, MouseEventArgs e) { this.PeriodicRefreshTimer.Enabled = false; ShowCaret(this.Handle); ModbusRTU.SuspendRead((byte)_ReadFunctionCode, _ReadAddress, _ReadDataLengthInWord);//鼠标单击本控件后,进入写寄存器状态,暂停寄存器的读操作 }
public FormRelayConfiguration(ModbusRTU master) { InitializeComponent(); Master = master; }