private void btn_addtask_Click(object sender, EventArgs e) { ModbusHelper.OperationCode c = (ModbusHelper.OperationCode)Convert.ToByte(tb_Code.Text); byte[] a = ModbusHelper.DataPacking(modbusType, c, ModbusHelper.HexStringToBytes(tb_Station.Text)[0], ModbusHelper.HexStringToBytes(tb_data.Text)); addr++; string s = addr.ToString().PadLeft(4, '0') + "0006"; tb_data.Text = s; tb_taskName.Text = "t" + addr.ToString();; AddTask(tb_taskName.Text, a); }
private void button2_Click(object sender, EventArgs e) { ModbusHelper.OperationCode c = (ModbusHelper.OperationCode)Convert.ToByte(tb_Code.Text);//获取操作码 //将给定的 操作码、站号 、数据 按照modbusType 打包为标准报文格式 byte[] a = ModbusHelper.DataPacking(modbusType, c, ModbusHelper.HexStringToBytes(tb_Station.Text)[0], ModbusHelper.HexStringToBytes(tb_data.Text)); //按钮点动输出 都应该这样设置特别是t.ExecuteOnce = true; 如果不写这一句、会一直发送指令给仪表。 //执行完你创建的任务应该把他删除、否则他会一直存在用任务列表、影响迭代效率 #region 创建一个控制输出的任务 Demo TestContext t = new TestContext(); t.TaskName = tb_taskName.Text; t.TX = a; t.ExecuteOnce = true; //只发送一次 !:如果不为ture 这个任务会被循环执行 t.Priority = TaskPriority.High; //即刻发送 !:设置优先级使这个任务立即被执行一次,然后不管会不会成功 这个任务都会被降级为普通任务 t.IsTempTask = true; //临时任务 :在调用查找该任务的同时会把该任务删除 !:在查找方法返回结果值后、这个被查找的任务就被删除掉了 if (task != null) { task.AddOrUpdateTaskToQueue(t); } #endregion }