private void InnerWriteFloatTagValue(FloatTag tag) { int addressindex = 0; foreach (var item in tag.GetAddresses()) { master.WriteSingleRegister(myDevice.Id, (ushort)(item - 1), tag.GetWriteValue()[addressindex]); addressindex++; if (addressindex == 2) { break; } } }
// job flash public bool lambaJobIlgiliIsikFlashYak(AutoResetEvent _AREvt, ushort DeviceID, ushort jobState1StatusAnimationID, ushort jobState1StatusColorID, ModbusIpMaster master) { bool sonuc = false; ushort[] sonucRegisterAdim0 = new ushort[7]; ushort[] sonucRegisterAdim1 = new ushort[5]; _AREvt = new AutoResetEvent(false); //start timer1, timer1.Interval = 1000 ms try { /* ushort[] value = new ushort[4]; * value[0] = DeviceID;//device ID * value[1] = 1;//yazma * value[2] = 8701;//reg. start * value[3] = 3;//adet * master.WriteMultipleRegisters(1, 699, value); * * ushort[] value2 = new ushort[3]; * value2[0] = 1;//Job modu * value2[1] = jobState1StatusAnimationID;//FLASH * value2[2] = jobState1StatusColorID;//green * master.WriteMultipleRegisters(1, 703, value2);*/ ushort[] value = new ushort[6]; value[0] = 1; //yazma value[1] = 8701; //reg. start value[2] = 3; //adet value[3] = 1; value[4] = jobState1StatusAnimationID; //adet value[5] = jobState1StatusColorID; //adet master.WriteMultipleRegisters(1, 700, value); master.WriteSingleRegister(1, 699, DeviceID); _AREvt.WaitOne(300); ushort[] value3 = new ushort[4]; value3[0] = DeviceID; //device ID value3[1] = 1; //yazma value3[2] = 6336; //reg. start value3[3] = 1; //adet master.WriteMultipleRegisters(1, 699, value3); ushort[] value4 = new ushort[1]; value4[0] = 1;//yellow master.WriteMultipleRegisters(1, 703, value4); sonuc = true; } catch { sonuc = false; } return(sonuc); }
//01 05 00 00 FF 00 8C 3A 开1 //01 05 00 00 00 00 CD CA 关1 //01 05 00 01 FF 00 DD FA 开2 //01 05 00 01 00 00 9C 0A 关2 private void open() { List <string> list = "192.168.3.138".Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries).ToList <string>(); byte[] array = new byte[list.Count]; for (int i = 0; i < list.Count; i++) { array[i] = Convert.ToByte(list[i]); } IPAddress iPAddress = new IPAddress(array); using (TcpClient tcpClient = new TcpClient(iPAddress.ToString(), 1030)) { tcpClient.SendTimeout = 1; ModbusIpMaster modbusIpMaster = ModbusIpMaster.CreateIp(tcpClient); try { //byte[] bytes = HexStrTobyte("01 05 00 00 FF 00 8C 3A"); //byte[] bytes = HexStrTobyte("01050000FF008C3A"); //ushort[] data = new ushort[8]; //Buffer.BlockCopy(bytes, 0, data, 0, 8); ////ushort[] data1 = { (ushort)Convert.ToInt64("01", 16) }; ////ushort[] data2 = { (ushort)Convert.ToInt64("05", 16) }; ////ushort[] data3 = { (ushort)Convert.ToInt64("00", 16) }; ////ushort[] data4 = { (ushort)Convert.ToInt64("00", 16) }; ////ushort[] data5 = { (ushort)Convert.ToInt64("FF", 16) }; ////ushort[] data6 = { (ushort)Convert.ToInt64("00", 16) }; ////ushort[] data7 = { (ushort)Convert.ToInt64("8C", 16) }; ////ushort[] data8 = { (ushort)Convert.ToInt64("3A", 16) }; ////ushort[] data = new ushort[8]; ////data1.CopyTo(data, 0); ////data2.CopyTo(data, 1); ////data3.CopyTo(data, 2); ////data4.CopyTo(data, 3); ////data5.CopyTo(data, 4); ////data6.CopyTo(data, 5); ////data7.CopyTo(data, 6); ////data8.CopyTo(data, 7); //ushort[] data= { (ushort)Convert.ToInt64("01050000FF008C3A", 16) }; ushort data = (ushort)Convert.ToUInt64("01050000FF00", 16); //ushort[] data = modbusIpMaster.ReadInputRegisters(slaveAddress, startAddress, numInputs); //ushort[] data = new ushort[8] { 01, 05, 00, 00, 255, 00, 140, 58 }; //byte[] bytes = new byte[8] { 01, 05, 00, 00, 255, 00, 140, 58 }; //ushort data = BitConverter.ToUInt16(bytes, 0); //byte[] bytes = new byte[8] { 00000001,00000101,00000000,00000000,11111111,00000000,1000010,00111010}; modbusIpMaster.WriteSingleRegister(0, data); //modbusIpMaster.WriteMultipleRegisters(0, data); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
public void Write(object index, int data) { this.command = data; _master.WriteSingleRegister((ushort)Convert.ToInt32(index), (ushort)data); BusActivityDetection?.Invoke(this, new LogEvent("Data(ushort) have been written successfully to the register")); }
/////////////////////////////////////////////////////////////////// public bool lambaDurumDollyBaslangic(AutoResetEvent _AREvt, ushort jobState1StatusAnimationID, ushort jobState1StatusColorID, ModbusIpMaster master) { bool sonuc = false; ushort[] sonucRegisterAdim0 = new ushort[7]; ushort[] sonucRegisterAdim1 = new ushort[5]; _AREvt = new AutoResetEvent(false); try { ushort[] value = new ushort[6]; value[0] = 1; //yazma value[1] = 8701; //reg. start value[2] = 3; //adet value[3] = 0; //adet value[4] = jobState1StatusAnimationID; //adet value[5] = jobState1StatusColorID; //adet master.WriteMultipleRegisters(1, 700, value); master.WriteSingleRegister(1, 699, 4096); /* ushort[] value2 = new ushort[3]; * value2[0] = 0;//wait state * value2[1] = jobState1StatusAnimationID;//job state flash * value2[2] = jobState1StatusColorID;////job state color 1 green * master.WriteMultipleRegisters(1, 703, value2);*/ _AREvt.WaitOne(300); ushort[] value3 = new ushort[4]; value3[0] = 4096; //device ID value3[1] = 1; //yazma value3[2] = 6336; //reg. start value3[3] = 1; //adet master.WriteMultipleRegisters(1, 699, value3); ushort[] value4 = new ushort[1]; value4[0] = 1;//green master.WriteMultipleRegisters(1, 703, value4); sonuc = true; } catch (Exception ex) { sonuc = false; } return(sonuc); }
public void WriteUshortTagValue(UshortTag tag) { try { master.WriteSingleRegister((ushort)(tag.GetAddresses()[0] - 1), tag.GetWriteValue()); } catch { WriteUshortTagValue(tag); } }
public static void SetWinterMode(ushort _heatsetpoint) { try { TcpClient tcpClient = new TcpClient(Properties.Settings.Default.VRF_Ip, Properties.Settings.Default.VRF_Port); ModbusIpMaster ipMaster = ModbusIpMaster.CreateIp(tcpClient); byte address = Properties.Settings.Default.slaveAddress; ushort addr = 0; ushort val = 5; //this value sets default 26*C setpoint, medium speed fan, no timer, heat mode ipMaster.WriteSingleRegister(address, addr, val); Thread.Sleep(2000); addr = 3; ipMaster.WriteSingleRegister(address, addr, _heatsetpoint); Thread.Sleep(2000); ipMaster.Dispose(); tcpClient.GetStream().Close(); tcpClient.Close(); } catch { } }
private void button1_Click(object sender, EventArgs e) { bool ok; ushort adrx = 0; ushort adry = 1; ushort adrz = 2; ushort adrh = 3; ushort adrok = 0; TcpClient tcpClient = new TcpClient(); tcpClient.Connect("192.168.0.1", 502); ModbusIpMaster master = ModbusIpMaster.CreateIp(tcpClient); ushort x = (ushort)Convert.ToInt32(textBox1.Text); ushort y = (ushort)Convert.ToInt32(textBox2.Text); ushort z = (ushort)Convert.ToInt32(textBox3.Text); ushort h = (ushort)Convert.ToInt32(textBox4.Text); if (checkBox1.Checked) { ok = true; } else { ok = false; } master.WriteSingleRegister(adrx, x); master.WriteSingleRegister(adry, y); master.WriteSingleRegister(adrz, z); master.WriteSingleRegister(adrh, h); master.WriteSingleCoil(adrok, ok); ushort[] key = new ushort[4]; key = master.ReadHoldingRegisters(0, 4); if (key[3] == 1) { textBox5.Text = "tamam"; } tcpClient.Close(); master.Dispose(); }
private void button2_Click(object sender, EventArgs e) { ushort adrx0 = 0; TcpClient tcpClient = new TcpClient(); ModbusIpMaster master = ModbusIpMaster.CreateIp(tcpClient); tcpClient.Connect("192.168.0.100", 502); ushort y = (ushort)Convert.ToInt32(textBox2.Text); master.WriteSingleRegister(adrx0, y); tcpClient.Close(); }
private void btnWriteModbusValue_Click(object sender, EventArgs e) { using (TcpClient client = new TcpClient(txtIPAddress.Text, 502)) { ModbusIpMaster master = ModbusIpMaster.CreateIp(client); ushort startAddress = Convert.ToUInt16(txtWriteModbusAddress.Text); ushort numInputs = Convert.ToUInt16(txtWriteModbusValue.Text); master.WriteSingleRegister(startAddress, numInputs); } }
private void ModbusWrite(ushort Address, ushort Value) { Error(false); try { slaveID = byte.Parse(textBox_SlaveID.Text); ushort[] datas = new ushort[numInputs]; switch (comboBox_FunCode.SelectedIndex) { case 0: master.WriteSingleCoil(slaveID, Address, Value == 0?false:true); break; case 1: master.WriteSingleCoil(slaveID, Address, Value == 0 ? false : true); break; case 2: master.WriteSingleRegister(slaveID, Address, Value); break; case 3: master.WriteSingleRegister(slaveID, Address, Value); break; default: MessageBox.Show("功能码错误"); datas = null; break; } txt_show.AppendText("\r\nModbusWrite Success"); } catch (Exception eee) { Error(true, eee); } }
public string DeupdateTable(ref ICollection <CT2ListAO> listAO) { try { foreach (var item in listAO) { if (item.eSearchSM == CT2ListAO.ESearchStateMachine.Deupdate) { ushort addrStart = item.mbAddr; ushort value = item.Val; Thread.Sleep(5); master.WriteSingleRegister( (ushort)(CT2.ECT2HoldReg.RegionAO + addrStart), value); item.eSearchSM = CT2ListAO.ESearchStateMachine.Update; } } } catch (Exception e) { return(e.Message); } return("NO_ERR"); }
public bool WriteSingleRegister(int address, ushort value) { if (this.CheckConnection()) { try { using TcpClient client = new TcpClient(this.IpAddress, this.Port); ModbusIpMaster master = ModbusIpMaster.CreateIp(client); if (this.SlaveAddress != 0) { master.WriteSingleRegister(this.SlaveAddress, (ushort)address, value); } else { master.WriteSingleRegister((ushort)address, value); } client.Close(); master.Dispose(); return(true); } catch { return(false); } } return(false); }
public static void Write_SingleRegister(ushort write_register_addr, ushort register_value) { write_register_addr = _register_Address; register_value = _register_Value; Start_MBServer(); Start_MBCLient(); ModbusSlave slave = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP); var listener = slave.ListenAsync(); ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP); master.WriteSingleRegister(write_register_addr, register_value); Stop_MBClient(); Stop_MBServer(); }
/// <summary> /// Simple Modbus TCP master write holding registers example. /// </summary> public async void ModbusTcpWriteSingleRegister() { ushort inputValue = ushort.Parse(InputTextBox.Text); using (TcpClient client = new TcpClient()) { client.ReceiveTimeout = 3000; client.SendTimeout = 3000; await client.ConnectAsync(IpAddressInputBox.Text, int.Parse(TcpPortInputBox.Text)); ModbusIpMaster master = ModbusIpMaster.CreateIp(client); ushort address = ushort.Parse(writeRegisterInputBox.Text); master.WriteSingleRegister(address, inputValue); } }
public static void Setpoint(ushort _setpoint) { try { TcpClient tcpClient = new TcpClient(Properties.Settings.Default.VRF_Ip, Properties.Settings.Default.VRF_Port); ModbusIpMaster ipMaster = ModbusIpMaster.CreateIp(tcpClient); byte address = Properties.Settings.Default.slaveAddress; ushort addr = 3; ipMaster.WriteSingleRegister(address, addr, _setpoint); Thread.Sleep(2000); setpoint = _setpoint; ipMaster.Dispose(); tcpClient.GetStream().Close(); tcpClient.Close(); } catch { } }
public static void TurnOFF() { try { TcpClient tcpClient = new TcpClient(Properties.Settings.Default.VRF_Ip, Properties.Settings.Default.VRF_Port); ModbusIpMaster ipMaster = ModbusIpMaster.CreateIp(tcpClient); byte address = Properties.Settings.Default.slaveAddress; ushort addr = 0; ushort val = 0; ipMaster.WriteSingleRegister(address, addr, val); Thread.Sleep(2000); status = "OFF"; ipMaster.Dispose(); tcpClient.GetStream().Close(); tcpClient.Close(); } catch { } }
public void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value) { if (!status) { Connect(); } try { master.WriteSingleRegister(slaveAddress, registerAddress, value); } catch (Exception ex) { status = false; AddMessage("Catch exception in the function WriteSingleRegister(). " + ex.Message, DebugLevel.ExceptionLevel); } }
public bool SetRegValue(ushort addr, ushort value) { bool ret = true; try { master.WriteSingleRegister(addr, value); } catch (Exception e) { ret = false; MessageBox.Show(e.InnerException.Message); } finally { } return(ret); }
public override bool WriteUshort(ushort wIndex, ushort value) { try { using (TcpClient client = new TcpClient(IP, PORT)) { Writing = true; ModbusIpMaster modbusipmaster = ModbusIpMaster.CreateIp(client); modbusipmaster.WriteSingleRegister(wIndex, value); Writing = false; } return(true); } catch (Exception ex) { Writing = false; Console.WriteLine(ex.ToString()); return(false); } }
// job steady - yellow public bool lambaJobIlgiliIsikSteadyYakSariRework(AutoResetEvent _AREvt, ushort DeviceID, ushort jobStateReworkAnimationID, ushort jobStateReworkColorID, ModbusIpMaster master) { bool sonuc = false; _AREvt = new AutoResetEvent(false); try { ushort[] value = new ushort[6]; value[0] = 1; //yazma value[1] = 8701; //reg. start value[2] = 3; //adet value[3] = 1; value[4] = jobStateReworkAnimationID; //adet value[5] = jobStateReworkColorID; //adet master.WriteMultipleRegisters(1, 700, value); master.WriteSingleRegister(1, 699, DeviceID); _AREvt.WaitOne(300, true); ushort[] value3 = new ushort[4]; value3[0] = DeviceID; //device ID value3[1] = 1; //yazma value3[2] = 6336; //reg. start value3[3] = 1; //adet master.WriteMultipleRegisters(1, 699, value3); ushort[] value4 = new ushort[1]; value4[0] = 2;//yellow master.WriteMultipleRegisters(1, 703, value4); sonuc = true; } catch { } return(sonuc); }
private static void CommunicationTest() { TcpClient client = new TcpClient("127.0.0.1", 502); ModbusIpMaster master = ModbusIpMaster.CreateIp(client); // read five input values ushort startAddress = 0; ushort numInputs = 16; bool[] inputs = master.ReadCoils(startAddress, numInputs); // Odczyt cyfrowych var digitalInputs = master.ReadInputs(startAddress, 16); /// Odczyt analogowych var analogInputs = master.ReadInputRegisters(0, 16); var numbers = new ushort[] { 55, 66 }; master.WriteMultipleRegisters(0, numbers); // Zapis master.WriteSingleCoil(18, true); // Zapis do Holding Registers master.WriteSingleRegister(1, 254); var holding = master.ReadHoldingRegisters(0, 2); var digitalInputs2 = master.ReadInputs(startAddress, 16); for (int i = 0; i < numInputs; i++) { Console.WriteLine("Input {0}={1}", startAddress + i, inputs[i] ? 1 : 0); } }
/// <summary> /// 设置风机控制 /// </summary> public bool SendFJKZ(double value) { if (!IsTCPLink) { return(false); } try { lock (_MASTER) { _StartAddress = BFMCommand.GetCommandDict(BFMCommand.风机控制); _MASTER.WriteSingleRegister(_SlaveID, _StartAddress, (ushort)(value)); } } catch (Exception ex) { Logger.Error(ex); return(false); } return(true); }
/* * Writes into Holding Register values based on the address received from the 'textWriteModbusAddress' and * the count of the holding registers to be read from 'txtWriteModbusCount'. * */ private void btnWriteRegister_Click(object sender, EventArgs e) { try { // Taking ip from the text box and connects to port 502 of the slave. using (TcpClient client = new TcpClient(txtIPAddress.Text, 502)) { // Establishing a connection between the master and slave. ModbusIpMaster master = ModbusIpMaster.CreateIp(client); // Assign Modbus StartAddress and number of registers to be written. ushort StartAddress = Convert.ToUInt16(textWriteModbusAddress.Text); ushort HoldingRegisterValue = Convert.ToUInt16(txtWriteRegisterValue.Text); // Write register values. master.WriteSingleRegister(StartAddress, HoldingRegisterValue); } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void HandingOffsetCorrectionValues(ref ModbusIpMaster master) { if (master == null) { Logger.WriteDebugLog("Getting Null for ModbusIpMaster object master. Exiting From HandingOffsetCorrectionValues()"); return; } ushort[] ReadDataFlag; ushort[] Output; int SlNo; int PartID; int OperationID; int Dimension; int IterationCount; float MeanVal; float LambdaVal; float LVal; float SigmaVal; float MeasuredValue; float EWMAVal; float LCLVal; float UCLVal; float CorrectionValue; float MaxCorrectionStep; DateTime MeasuredDateTime; try { ReadDataFlag = master.ReadHoldingRegisters(HoldingRegForReadDataFlag, (ushort)1); if (ReadDataFlag[0] == 1) { Logger.WriteDebugLog("Read Flag (606) is High"); Output = master.ReadHoldingRegisters(HoldingRegForSerialNo, (ushort)1); SlNo = Output[0]; Output = master.ReadHoldingRegisters(HoldingRegForPartID, (ushort)1); PartID = Output[0]; Output = master.ReadHoldingRegisters(HoldingRegForDimension, (ushort)1); Dimension = Output[0]; Output = master.ReadHoldingRegisters(HoldingRegForOperationID, (ushort)1); OperationID = Output[0]; Output = master.ReadHoldingRegisters(HoldingRegisterForIterationCount, (ushort)1); IterationCount = Output[0]; Output = master.ReadHoldingRegisters(HoldingRegForMean, (ushort)2); MeanVal = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForLambda, (ushort)2); LambdaVal = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForL, (ushort)2); LVal = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForSigma, (ushort)2); SigmaVal = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForMeasuredVal, (ushort)2); MeasuredValue = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForEWMA, (ushort)2); EWMAVal = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForLCL, (ushort)2); LCLVal = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForUCL, (ushort)2); UCLVal = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForCorrectionVal, (ushort)2); CorrectionValue = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForMaxCorrectionStep, (ushort)2); MaxCorrectionStep = GetFloat(Output); Output = master.ReadHoldingRegisters(HoldingRegForNGComponent, (ushort)1); int ngComponent = Output[0]; Output = master.ReadHoldingRegisters(HoldingRegForAltCorrecting, (ushort)1); int altCorrection = Output[0]; Output = master.ReadHoldingRegisters(HoldingRegForMeasuredDate, (ushort)2); string MeasuredDate = ModbusUtility.GetUInt32(Output[1], Output[0]).ToString("00000000"); Output = master.ReadHoldingRegisters(HoldingRegForMeasuredTime, (ushort)2); string MeasuredTime = ModbusUtility.GetUInt32(Output[1], Output[0]).ToString("000000"); MeasuredDateTime = DateTime.ParseExact(string.Format("{0}{1}", MeasuredDate, MeasuredTime), "yyyyMMddHHmmss", null); Logger.WriteDebugLog(string.Format("Data Received : MC-{0} PartID-{1} Operation-{2} Operator-{3} Dimension-{4} Mean-{5} Lambda-{6} L-{7} Sigma-{8} Measured Value-{9} EWMA-{10} LCL-{11} UCL-{12} Correction Value-{13} Max Correction Step-{14} Measured DateTime-{15} Iteration Count-{16}", this._interfaceId, PartID, OperationID, "1", Dimension, MeanVal.ToString("00.0000"), LambdaVal.ToString("00.0000"), LVal.ToString("00.0000"), SigmaVal.ToString("00.0000"), MeasuredValue.ToString("00.0000"), EWMAVal.ToString("00.0000"), LCLVal.ToString("00.0000"), UCLVal.ToString("00.0000"), CorrectionValue.ToString("00.0000"), MaxCorrectionStep.ToString("00.0000"), MeasuredDateTime.ToString("dd-MMM-yyyy HH:mm:ss"), IterationCount)); DatabaseAccess.InsertDataToSPCAutoData(this._interfaceId, PartID, OperationID, "1", Dimension, MeanVal, LambdaVal, LVal, SigmaVal, MeasuredValue, EWMAVal, LCLVal, UCLVal, CorrectionValue, MaxCorrectionStep, MeasuredDateTime, IterationCount, ngComponent, altCorrection); master.WriteSingleRegister(HoldingRegForACK, (ushort)SlNo); master.WriteSingleRegister(HoldingRegForReadDataFlag, (ushort)2); Logger.WriteDebugLog("Read Flag (606) is set to Low"); } #region Communication //send communicationNo try { master.WriteSingleRegister(HoldingRegisterForCommunictaion, commNo); } catch (Exception ex) { if (master != null) { master.Dispose(); } Logger.WriteErrorLog(ex.ToString()); } if (commNo == 100) { commNo = 200; } else { commNo = 100; } #endregion } catch (Exception ex) { Logger.WriteErrorLog("Exception In HandingOffsetCorrectionValues() : " + ex.Message); } }
private bool ResponseData(IO_SERVER server, IO_COMMUNICATION comm, IO_DEVICE device, IO_PARA para, string value) { if (para == null) { return(false); } if (para.IO_POINTTYPE == "计算值" || para.IO_POINTTYPE == "关系数据库值") { return(false); } //设备地址不能为空 if (device.IO_DEVICE_ADDRESS == "") { return(false); } try { //通过设备驱动进行数据解析,并生成下置的数据bytes if (device.DeviceDrive != null) { ScadaDeviceKernel Driver = (ScadaDeviceKernel)device.DeviceDrive; //获取参数中的 if (udpClient != null && master != null) { ParaPack paraPack = new ParaPack(para.IO_PARASTRING); if (paraPack.Count > 0) { ushort offset = ushort.Parse(paraPack.GetValue("偏置")); switch (paraPack.GetValue("内存区")) { case "01": { if (ushort.Parse(value) > 0) { master.WriteSingleCoil(byte.Parse(device.IO_DEVICE_ADDRESS), offset, true); } else { master.WriteSingleCoil(byte.Parse(device.IO_DEVICE_ADDRESS), offset, false); } } break; case "02": //此类型只能查询,不能写入 { } break; case "03": { Modbus_Type datatype = (Modbus_Type)Enum.Parse(typeof(Modbus_Type), paraPack.GetValue("数据类型")); bool ishigh = paraPack.GetValue("存储位置") == "高八位" ? true : false; int charsize = int.Parse(paraPack.GetValue("字节长度")); bool isposition = paraPack.GetValue("按位存取") == "1" ? true : false; int dataposition = int.Parse(paraPack.GetValue("数据位")); switch (datatype) { case Modbus_Type.单精度浮点数32位: { ushort[] buff = new ushort[2]; float WriteValue = float.Parse(value); ModbusConvert.SetReal(buff, 0, WriteValue); master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff); } break; case Modbus_Type.双精度浮点数64位: { ushort[] buff = new ushort[4]; double WriteValue = double.Parse(value); ModbusConvert.SetDouble(buff, 0, WriteValue); master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff); } break; case Modbus_Type.字符型: { ushort[] buff = new ushort[charsize]; string WriteValue = value; if (value.Length > charsize) { WriteValue = value.Substring(0, charsize); } if (value.Length < charsize) { WriteValue = value.PadRight(charsize, ' '); } ModbusConvert.SetString(buff, 0, WriteValue); master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff); } break; case Modbus_Type.无符号整数8位: { ushort[] buff = new ushort[1]; byte WriteValue = byte.Parse(value); ModbusConvert.SetByte(buff, 0, WriteValue, ishigh); master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]); } break; case Modbus_Type.符号整数8位: { ushort[] buff = new ushort[1]; sbyte WriteValue = sbyte.Parse(value); ModbusConvert.SetSByte(buff, 0, WriteValue, ishigh); master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]); } break; case Modbus_Type.无符号整数16位: { if (isposition) { //获取当前寄存器的值 ushort[] datas = master.ReadHoldingRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, 1); ushort dataValue = ModbusConvert.GetUShort(datas, 0); if (short.Parse(value) > 0) { dataValue = Convert.ToUInt16(dataValue >> dataposition & 1); } else { dataValue = Convert.ToUInt16(dataValue >> dataposition & 0); } //新发送的值 ushort[] datas2 = new ushort[1]; ModbusConvert.SetUShort(datas2, 0, dataValue); master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, datas2[0]); } else { ushort WriteValue = ushort.Parse(value); ushort[] buff = new ushort[1]; ModbusConvert.SetUShort(buff, 0, WriteValue); master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]); } } break; case Modbus_Type.符号整数16位: { if (isposition) { //获取当前寄存器的值 ushort[] datas = master.ReadHoldingRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, 1); short dataValue = ModbusConvert.GetShort(datas, 0); if (short.Parse(value) > 0) { dataValue = Convert.ToInt16(dataValue >> dataposition & 1); } else { dataValue = Convert.ToInt16(dataValue >> dataposition & 0); } //新发送的值 ushort[] datas2 = new ushort[1]; ModbusConvert.SetShort(datas2, 0, dataValue); master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, datas2[0]); } else { Int16 WriteValue = Int16.Parse(value); ushort[] buff = new ushort[1]; ModbusConvert.SetShort(buff, 0, WriteValue); master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]); } } break; case Modbus_Type.无符号整数32位: { uint WriteValue = uint.Parse(value); ushort[] buff = new ushort[2]; ModbusConvert.SetUInt(buff, 0, WriteValue); master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff); } break; case Modbus_Type.符号整数32位: { int WriteValue = int.Parse(value); ushort[] buff = new ushort[2]; ModbusConvert.SetInt(buff, 0, WriteValue); master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff); } break; } } break; } } } } } catch { return(false); } return(true); }
/// <summary> /// 任务方法 /// </summary> private void taskFunc() { //this.Invoke(new MethodInvoker(delegate //{ while (true) { #region 判断MES是否有新任务 if (TaskData.Modbus[(int)TaskData.RegBind.newTask] == 0x11) { //加入任务队列 Task task = new Task(); task.TaskNum = TaskData.Modbus[(int)TaskData.RegBind.taskNum]; task.Level = TaskData.Modbus[(int)TaskData.RegBind.taskLevel]; task.LineNum = TaskData.Modbus[(int)TaskData.RegBind.lineNum]; TaskData.taskWaiting.Add(task); //按优先级排序(降序) TaskData.taskWaiting = TaskData.taskWaiting.OrderByDescending(s => s.Level).ToList(); //按下单时间排序(升序) //TaskData.taskWaiting = TaskData.taskWaiting.OrderBy(s => s.Level).ToList(); this.Invoke(new MethodInvoker(delegate { //更新到界面 var index = dataGridViewWaiting.Rows.Add(); //序号 dataGridViewWaiting.Rows[index].Cells[0].Value = index; //任务编号 dataGridViewWaiting.Rows[index].Cells[1].Value = task.TaskNum; //产线编号 dataGridViewWaiting.Rows[index].Cells[2].Value = task.LineNum; //下单时间 dataGridViewWaiting.Rows[index].Cells[3].Value = task.CreatTime.ToString("yyyy-MM-dd HH:mm:ss"); //任务优先级 dataGridViewWaiting.Rows[index].Cells[4].Value = task.Level; })); //清除MES任务标志寄存器 modbusMaster.WriteSingleRegister((int)TaskData.RegBind.newTask, 0); } #endregion #region 派发任务到AGV //有需要完成的任务 if (TaskData.taskWaiting.Count > 0) { //1号产线有空闲的AGV if (TaskData.AGV1.state == (int)Agv.State.Ready) { for (int i = 0; i < TaskData.taskWaiting.Count; i++) { //1号产线有任务 if (TaskData.taskWaiting[i].LineNum == 1) { //将1号产线的任务分配给1号车 ushort[] temp = new ushort[2]; temp[0] = 0x11; //有新任务 8 temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号 9 //下发到AGV UdpSever.Write_Multiple_Registers(1, 8, 2, temp); //更新任务状态 TaskData.taskWaiting[i].StartTime = DateTime.Now; //任务启动时间 TaskData.taskWaiting[i].AgvNum = TaskData.AGV1.AgvNum; //执行该任务的AGV编号 //将该任务转至正在进行任务列表 TaskData.taskRuning.Add(TaskData.taskWaiting[i]); //将该任务从等待执行任务列表删除 TaskData.taskWaiting.RemoveAt(i); break; } } } //2号产线有空闲的AGV if (TaskData.AGV2.state == (int)Agv.State.Ready) { for (int i = 0; i < TaskData.taskWaiting.Count; i++) { //2号产线有任务 if (TaskData.taskWaiting[i].LineNum == 2) { //将2号产线的任务分配给2号车 ushort[] temp = new ushort[2]; temp[0] = 0x11; //有任务 temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号 //下发到AGV UdpSever.Write_Multiple_Registers(2, 8, 2, temp); //更新任务状态 TaskData.taskWaiting[i].StartTime = DateTime.Now; //任务启动时间 TaskData.taskWaiting[i].AgvNum = TaskData.AGV2.AgvNum; //执行该任务的AGV编号 //将该任务转至正在进行任务列表 TaskData.taskRuning.Add(TaskData.taskWaiting[i]); //将该任务从等待执行任务列表删除 TaskData.taskWaiting.RemoveAt(i); break; } } } } #endregion #region 更新任务执行状态 //是否有正在执行的任务 if (TaskData.taskRuning.Count > 0) { for (int i = 0; i < TaskData.taskRuning.Count; i++) { //判断任务是否执行完成 if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x12) { //正在执行 TaskData.taskRuning[i].TaskState = (int)TaskRunState.Runing; } else if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x13) { //执行完成 TaskData.taskRuning[i].TaskState = (int)TaskRunState.Finished; //将该任务转至执行完成任务列表 TaskData.taskFinished.Add(TaskData.taskRuning[i]); //将该任务从正在执行任务列表删除 TaskData.taskRuning.RemoveAt(i); //清空AGV执行状态标志位,AGV收到该信号后为设置车为空闲状态 UdpSever.Write_Register(TaskData.taskRuning[i].AgvNum, 10, 0x11); } } } #endregion #region 更新AGV状态 //AGV1 TaskData.AGV1.Connect = false; TaskData.AGV1.state = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 1, 0]; TaskData.AGV1.Process = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 2, 0]; TaskData.AGV1.Route = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 3, 0]; TaskData.AGV1.Station = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 4, 0]; TaskData.AGV1.Power = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 5, 0]; TaskData.AGV1.Speed = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 6, 0]; TaskData.AGV1.error = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 7, 0]; //AGV2 TaskData.AGV2.Connect = false; TaskData.AGV2.state = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 1, 0]; TaskData.AGV2.Process = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 2, 0]; TaskData.AGV2.Route = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 3, 0]; TaskData.AGV2.Station = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 4, 0]; TaskData.AGV2.Power = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 5, 0]; TaskData.AGV2.Speed = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 6, 0]; TaskData.AGV2.error = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 7, 0]; #endregion #region 更新任务界面 //未进行任务 //dataGridViewWaiting.Rows.Clear(); //foreach (var item in TaskData.taskWaiting) //{ // var index = this.dataGridViewWaiting.Rows.Add(); // this.dataGridViewWaiting.Rows[index].Cells[0].Value = item.TaskNum; // this.dataGridViewWaiting.Rows[index].Cells[1].Value = item.CmdTime.ToString("yyyy-MM-dd HH:mm:ss"); // this.dataGridViewWaiting.Rows[index].Cells[2].Value = item.TaskState; // this.dataGridViewWaiting.Rows[index].Cells[3].Value = item.AgvNum; // this.dataGridViewWaiting.Rows[index].Cells[4].Value = item.Connect; // this.dataGridViewWaiting.Rows[index].Cells[5].Value = item.Route; // this.dataGridViewWaiting.Rows[index].Cells[6].Value = item.Station; // this.dataGridViewWaiting.Rows[index].Cells[7].Value = item.Power; // this.dataGridViewWaiting.Rows[index].Cells[8].Value = item.Speed; // this.dataGridViewWaiting.Rows[index].Cells[9].Value = item.AgvState; // this.dataGridViewWaiting.Rows[index].Cells[10].Value = item.Error; //} //进行中任务 //已完成任务 #endregion Thread.Sleep(TaskData.Parameter.taskFuncTime); } //})); }
void cleanQuery() { // вначале разбираем очередь на запись writeComm wr; // создание дубликата writeQuveryDuble и освобождение исходной коллеции List <writeComm> writeQuveryDuble = new List <writeComm>(); lock (block) { for (int i = 0; i < writeQuvery.Count; i++) { writeQuveryDuble.Add(writeQuvery[i]); } writeQuvery.Clear(); } //lock try { for (int i = 0; i < writeQuveryDuble.Count; i++) { wr = writeQuveryDuble[i]; if (wr.reg == 0) { if (wr.len == 1) { master.WriteSingleCoil(wr.address, (bool)wr.value); } else { bool[] b = (bool[])wr.value; master.WriteMultipleCoils(wr.address, b); } } if (wr.reg == 3) { if (wr.type == 2 || wr.type == 3) //2 байтный int { if (wr.len == 1) { master.WriteSingleRegister(wr.address, BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 0)); } else { ushort[] b = (ushort[])wr.value; master.WriteMultipleRegisters(wr.address, b); } } if (wr.type >= 4 && wr.type <= 7) //4 байтный int { if (wr.len == 1) { ushort[] b = new ushort[2]; b[0] = BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 0); b[1] = BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 2); master.WriteMultipleRegisters(wr.address, b); } else { int[] b = (int[])wr.value; for (ushort j = 0; j < wr.len; j++) { ushort[] bb = new ushort[2]; bb[0] = BitConverter.ToUInt16(BitConverter.GetBytes(b[j]), 0); bb[1] = BitConverter.ToUInt16(BitConverter.GetBytes(b[j]), 2); master.WriteMultipleRegisters((ushort)(wr.address + (j * 2)), bb); } } } if (wr.type >= 8 && wr.type <= 9) //4 байтный float { if (wr.len == 1) { byte[] b = BitConverter.GetBytes((float)wr.value); ushort[] bb = new ushort[2]; bb[0] = BitConverter.ToUInt16(b, 0); bb[1] = BitConverter.ToUInt16(b, 2); master.WriteMultipleRegisters(wr.address, bb); } else { float[] bb = (float[])wr.value; for (int j = 0; j < wr.len; j++) { byte[] b = BitConverter.GetBytes(bb[j]); ushort[] bbb = new ushort[2]; bbb[0] = BitConverter.ToUInt16(b, 0); bbb[1] = BitConverter.ToUInt16(b, 2); master.WriteMultipleRegisters((ushort)(wr.address + (j * 2)), bbb); } } } //if } //if } //for } catch (Exception err) { Util.errorTCP(); Util.errorMessage(err.Message, description); device.status = err.HResult; device.ready = false; //??????????????????????????????/ } //writeQuvery.Clear(); }
public Task WriteSpeedInletPump(ushort speed) { return(Task.Run(() => { _master.WriteSingleRegister(1, 5, speed); })); }
public void Tomodbus() { this.timerModbus.Stop(); try { int port = Convert.ToInt32(Pub_dtTSetting.Rows[0][4]); //<--- This is your value // define array to keep address Input Register--------------------------------------- int tagB = 0; for (int row = 0; row < Pub_dtTTAGMapping.Rows.Count; row++) { string tagtype = dataGridView1.Rows[row].Cells[6].Value.ToString();//TagType if (tagtype == "B") { tagB++; } } int[][] mosbusAdrInputRegister = new int[tagB][]; for (int index1 = 0; index1 < tagB; index1++) { mosbusAdrInputRegister[index1] = new int[2]; } //----------------------------------------------------------------------------------- //IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { using (TcpClient tcpClient = new TcpClient()) { tcpClient.Connect(ip.ToString(), port); //if port 502 open, server not start throw exception ModbusIpMaster master2Family = ModbusIpMaster.CreateIp(tcpClient); int Count_Boolean = 0; bool[] boolvalueto_inputRegister = new bool[dataGridView1.Rows.Count]; slave2Family.DataStore.InputDiscretes.Clear(); // clear Input Status for manual add for (int row = 0; row < Pub_dtTTAGMapping.Rows.Count; row++) { string Mb_Address = dataGridView1.Rows[row].Cells[2].Value.ToString(); //MB address string Value = dataGridView1.Rows[row].Cells[3].Value.ToString(); //Value string tagtype = dataGridView1.Rows[row].Cells[6].Value.ToString(); //TagType if (tagtype == "F") { string ValueString = dataGridView1.Rows[row].Cells[3].Value.ToString();//Value //Convert float to Hex--------------------------------------------------------------------------------- float strTofloat; bool result = float.TryParse(ValueString, out strTofloat); if (result == true) { byte[] buffer = BitConverter.GetBytes(strTofloat); int intVal = BitConverter.ToInt32(buffer, 0); //if don't have this line then program do like string to hex //https://gregstoll.com/~gregstoll/floattohex/ //http://string-functions.com/string-hex.aspx string hexstring = intVal.ToString("X8"); //separate hex string------------------------------------------------------------------------------------- string hexstrinng_left = hexstring.Substring(0, 4); ushort hexshort_left = Convert.ToUInt16(hexstrinng_left, 16); //like under line string hexstrinng_right = hexstring.Substring(4); ushort hexshort_right = Convert.ToUInt16(hexstrinng_right, 16); //Prepare MbAddress to send--------------------------------------------------------------------------------- int int32Mb_Address = Convert.ToInt32(Mb_Address) - 400000 - 1;//-1 cause modscan32 start index 0 ushort RightShortMbAddress = Convert.ToUInt16(int32Mb_Address); //ushort RightShortMbAddress = (ushort)int32Mb_Address; int LeftMbAddress = int32Mb_Address + 1; ushort LeftShortMbAddress = Convert.ToUInt16(LeftMbAddress); //ushort LeftShortMbAddress = (ushort)LeftMbAddress; //--------------------------------------------------------------------------------------------------------------- master2Family.WriteSingleRegister(RightShortMbAddress, hexshort_right); master2Family.WriteSingleRegister(LeftShortMbAddress, hexshort_left); } //end if result } //end if Tagtype F else if (tagtype == "B") { bool boolvalue = Convert.ToBoolean(Convert.ToInt16(Value)); int int32Mb_Address = Convert.ToInt32(Mb_Address) - 100000 - 1;//-1 cause modscan32 start index 0 master2Family.WriteSingleCoil(Convert.ToUInt16(int32Mb_Address), boolvalue); mosbusAdrInputRegister[Count_Boolean][0] = int32Mb_Address; mosbusAdrInputRegister[Count_Boolean][1] = Convert.ToInt32(Value); ++Count_Boolean; //if (boolvalue == true) //{ // //slave.DataStore.InputDiscretes.Add(true); // slave2Family.DataStore.InputDiscretes.Add(false); //} //else //{ // //slave.DataStore.InputDiscretes.Add(false); // slave2Family.DataStore.InputDiscretes.Add(true); //} } //end else if Tagtype B } //end for loop int getlastaddress = mosbusAdrInputRegister[mosbusAdrInputRegister.Length - 1][0]; int matchIndexInputregister = 0; for (int indexInputRegister = 0; indexInputRegister <= getlastaddress; indexInputRegister++) { if (indexInputRegister == mosbusAdrInputRegister[matchIndexInputregister][0]) { if (mosbusAdrInputRegister[matchIndexInputregister][1] == 1) { //slave.DataStore.InputDiscretes.Add(true); slave2Family.DataStore.InputDiscretes.Add(true); } else { //slave.DataStore.InputDiscretes.Add(false); slave2Family.DataStore.InputDiscretes.Add(false); } matchIndexInputregister++; } else { slave2Family.DataStore.InputDiscretes.Add(false); } } datastore.InputRegisters.Clear(); } } //end if ipv4 } //end foreach } catch (Exception ex) { using (StreamWriter sw = File.AppendText(indebuglogFolderPath + "\\" + filename + ".txt")) { sw.WriteLine("ERROR : " + ex); } } }