public bool lambaDefualtJobState1StatusDefaultStateWrite(ModbusIpMaster master) { bool sonuc = false; try { ushort[] value = new ushort[4]; value[0] = 4096; //device ID value[1] = 1; //yazma value[2] = 6324; //reg. start value[3] = 2; //adet master.WriteMultipleRegisters(1, 699, value); ushort[] value2 = new ushort[2]; value2[0] = 2; //wait animationID value2[1] = 1; //wait color master.WriteMultipleRegisters(1, 703, value2); } catch (Exception) { } return(sonuc); }
//Установить ДТ public bool SetDT() { bool ret = false; try { dt[0] = ushort.Parse(System.DateTime.Now.Year.ToString()); dt[1] = ushort.Parse(System.DateTime.Now.Month.ToString()); dt[2] = ushort.Parse(System.DateTime.Now.Day.ToString()); dt[3] = ushort.Parse(System.DateTime.Now.Hour.ToString()); dt[4] = ushort.Parse(System.DateTime.Now.Minute.ToString()); dt[5] = ushort.Parse(System.DateTime.Now.Second.ToString()); dt[6] = (ushort)System.DateTime.Now.DayOfWeek; master.WriteMultipleRegisters(datetime_Addr, dt); ret = true; } catch { this.error_str = "Ошибка произошла при записи даты и время."; setError(); //MessageBox.Show("Ошибка произошла при записи даты и время."); } finally { } return(ret); }
// 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); }
/////////////////////////////////////////////////////////////////// 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); }
/// <summary> /// /// </summary> /// <returns></returns> public bool SendResetErrorsCommand() { PrintReadInputRegsiterContents("Before reset"); MCUModbusMaster.WriteMultipleRegisters(MCUConstants.ACTUAL_MCU_WRITE_REGISTER_START_ADDRESS, new ushort[] { 0x0800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }); PrintReadInputRegsiterContents("After reset"); return(true); }
// job steady - yellow kontrol public bool lambaJobIlgiliIsikSteadyYakSariReworkKontrol(ushort DeviceID, ushort jobStateReworkAnimationID, ushort jobStateReworkColorID, ModbusIpMaster master) { bool sonuc = false; try { ushort[] value = new ushort[4]; value[0] = DeviceID; //device ID value[1] = 0; //okuma value[2] = 8701; // value[3] = 3; // adet master.WriteMultipleRegisters(1, 699, value); ushort[] value2 = new ushort[3]; value2 = master.ReadHoldingRegisters(1, 713, 3); if (value2[0] == 1 && value2[1] == jobStateReworkAnimationID && value2[2] == jobStateReworkColorID) { sonuc = true; } else { sonuc = false; } } catch { } return(sonuc); }
public ushort arr2; // For test purpose public void WriteArray(ushort index, ushort[] data) { this.arr1 = data[0]; this.arr1 = data[1]; _master.WriteMultipleRegisters(index, data); BusActivityDetection?.Invoke(this, new LogEvent("Data(ushort array) have been written successfully to multiple registers")); }
public string WriteIoData(CT2.CIoNode node) { ushort len; if (node.CheckIfExistDO()) { len = (ushort)((node.m_DO_AddrEnd + 1 - node.m_DO_AddrStart) * 8); if (len != node.m_DataDO.Count) { return("ERR_illegalDataLength_DO"); } try { Thread.Sleep(5); ushort addrStart = (ushort)(CT2.ECT2Coils.RegionDO + node.m_DO_AddrStart * 8); master.WriteMultipleCoils(addrStart, node.m_DataDO.ToArray()); } catch (Exception e) { return(e.Message); } } if (node.CheckIfExistAO()) { len = (ushort)((node.m_AO_AddrEnd + 1 - node.m_AO_AddrStart) / 2); if (len != node.m_DataAO.Count) { return("ERR_illegalDataLength_DO"); } try { Thread.Sleep(5); ushort addrStart = (ushort)(CT2.ECT2HoldReg.RegionAO + (node.m_AO_AddrStart - 200) / 2); master.WriteMultipleRegisters(addrStart, node.m_DataAO.ToArray()); } catch (Exception e) { return(e.Message); } } return("NO_ERR"); }
// 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); }
public override bool Configure_MCU(int startSpeedDPSAzimuth, int startSpeedDPSElevation, int homeTimeoutSecondsAzimuth, int homeTimeoutSecondsElevation) { int gearedSpeedAZ = ConversionHelper.DPSToSPS(startSpeedDPSAzimuth, MotorConstants.GEARING_RATIO_AZIMUTH); int gearedSpeedEL = ConversionHelper.DPSToSPS(startSpeedDPSElevation, MotorConstants.GEARING_RATIO_ELEVATION); if ((gearedSpeedAZ < 1) || (gearedSpeedEL < 1) || (homeTimeoutSecondsAzimuth < 0) || (homeTimeoutSecondsElevation < 0) || (gearedSpeedAZ > 1000000) || (gearedSpeedEL > 1000000) || (homeTimeoutSecondsAzimuth > 300) || (homeTimeoutSecondsElevation > 300)) { return(false); } ushort[] data = { 0x8400, 0x0000, (ushort)(gearedSpeedAZ >> 0x0010), (ushort)(gearedSpeedAZ & 0xFFFF), (ushort)homeTimeoutSecondsAzimuth, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8400, 0x0000, (ushort)(gearedSpeedEL >> 0x0010), (ushort)(gearedSpeedEL & 0xFFFF), (ushort)homeTimeoutSecondsElevation, 0x0, 0x0, 0x0, 0x0, 0x0 }; //set_multiple_registers( data, 1); MCUModbusMaster.WriteMultipleRegisters(MCUConstants.ACTUAL_MCU_WRITE_REGISTER_START_ADDRESS, data); return(true); }
//wait-job public bool waitJobStateChange(ushort state, ModbusIpMaster master) { bool sonuc = false; try { ushort[] value = new ushort[4]; value[0] = 4096; //device ID value[1] = 1; //yazma value[2] = 8701; //reg. start value[3] = 1; //adet master.WriteMultipleRegisters(1, 699, value); ushort[] value2 = new ushort[1]; value2[0] = state;//wait state master.WriteMultipleRegisters(1, 703, value2); } catch (Exception) { } return(sonuc); }
public bool WriteRegisters(int address, ushort[] values) { if (this.CheckConnection()) { try { using TcpClient client = new TcpClient(this.IpAddress, this.Port); ModbusIpMaster master = ModbusIpMaster.CreateIp(client); if (this.SlaveAddress != 0) { master.WriteMultipleRegisters(this.SlaveAddress, (ushort)address, values); } else { master.WriteMultipleRegisters((ushort)address, values); } client.Close(); master.Dispose(); return(true); } catch { return(false); } } return(false); }
public static void Write_MultipleRegisters(ushort write_register_addr, ushort[] register_data) { write_register_addr = _register_Address; register_data = _register_Data; Start_MBServer(); Start_MBCLient(); ModbusSlave slave = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP); var listener = slave.ListenAsync(); ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP); master.WriteMultipleRegisters(write_register_addr, register_data); Stop_MBClient(); Stop_MBServer(); }
private void Run_PLC_emulator_thread() { while (runsimulator) { try { PLCTCPClient = new TcpClient(this.PLC_ip, this.PLC_port); PLCModbusMaster = ModbusIpMaster.CreateIp(PLCTCPClient); } catch {//no server setup on control room yet logger.Info(Utilities.GetTimeStamp() + ": ________________PLC sim awaiting control room"); } logger.Info(Utilities.GetTimeStamp() + ": ________________PLC sim running"); PLCModbusMaster.WriteMultipleRegisters((ushort)PLC_modbus_server_register_mapping.Gate_Safety_INTERLOCK, new ushort[] { BoolToInt(true) }); while (runsimulator) { if (isTest) { PLCModbusMaster.WriteMultipleRegisters((ushort)PLC_modbus_server_register_mapping.Gate_Safety_INTERLOCK, new ushort[] { BoolToInt(true) }); Thread.Sleep(5); continue; } else { if (!EL0LimStatus) { if (currentEL < EL0Lim_ON) { EL0LimStatus = (currentEL < EL0Lim_ON); PLCModbusMaster.WriteMultipleRegisters((ushort)PLC_modbus_server_register_mapping.EL_10_LIMIT, new ushort[] { BoolToInt(!EL0LimStatus) }); } } else if (currentEL > EL0Lim_OFF) { EL0LimStatus = (currentEL > EL0Lim_OFF); PLCModbusMaster.WriteMultipleRegisters((ushort)PLC_modbus_server_register_mapping.EL_10_LIMIT, new ushort[] { BoolToInt(!EL0LimStatus) }); } if (!EL90LimStatus) { if (currentEL > EL90Lim_ON) { EL90LimStatus = (currentEL > EL90Lim_ON); PLCModbusMaster.WriteMultipleRegisters((ushort)PLC_modbus_server_register_mapping.EL_90_LIMIT, new ushort[] { BoolToInt(!EL90LimStatus) }); } } else if (currentEL < EL90Lim_OFF) { EL90LimStatus = (currentEL < EL90Lim_OFF); PLCModbusMaster.WriteMultipleRegisters((ushort)PLC_modbus_server_register_mapping.EL_90_LIMIT, new ushort[] { BoolToInt(!EL90LimStatus) }); } } Thread.Sleep(50); } } }
public void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data) { if (!status) { Connect(); } try { master.WriteMultipleRegisters(slaveAddress, startAddress, data); } catch (Exception ex) { status = false; AddMessage("Catch exception in the function WriteMultipleRegisters(). " + ex.Message, DebugLevel.ExceptionLevel); } }
private void Run_PLC_emulator_thread() { while (runsimulator) { try{ PLCTCPClient = new TcpClient(this.PLC_ip, this.PLC_port); PLCModbusMaster = ModbusIpMaster.CreateIp(PLCTCPClient); } catch {//no server setup on control room yet Console.WriteLine("________________PLC sim awaiting control room"); Thread.Sleep(1000); } Console.WriteLine("________________PLC sim running"); PLCModbusMaster.WriteMultipleRegisters((ushort)PLC_modbus_server_register_mapping.Safty_INTERLOCK - 1, new ushort[] { 1 }); while (runsimulator) { Thread.Sleep(50); } } }
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); } }
//job state 1. status public ushort[] lambaDefualtJobState1StatusRead(ModbusIpMaster master) { ushort[] value2 = new ushort[2]; try { ushort[] value = new ushort[4]; value[0] = 31; //device ID value[1] = 0; //okuma value[2] = 6324; //reg. start value[3] = 2; //adet master.WriteMultipleRegisters(1, 699, value); value2 = master.ReadHoldingRegisters(1, 713, 2); } catch (Exception ex) { } return(value2); }
public void MotorControl(ushort Height, ushort RotationMode, ushort Spd, ushort Pos) { List <ushort> s = new List <ushort>(255); //r[0]:1=start/on execution,0=finished execution s.Add(1); //r[1]:left lifting motor height s.Add(Height); //r[2]:right lifting motor height s.Add(Height); //r[3]:Rotation Motor Mode: //0=clockwise step,1=counterclockwise step, //2=clockwise speed,3=counterclockwise speed s.Add(RotationMode); //r[4]:Rotation angle/speed s.Add(Spd); //r[5]:Translation motor positon s.Add(Pos); //r[6]:error alarm,0=normal s.Add(0); Mot.WriteMultipleRegisters(1, 0, s.ToArray()); ushort[] receive; do { pMain.ct.ThrowIfCancellationRequested(); Thread.Sleep(1000); receive = Mot.ReadHoldingRegisters(1, 0, 10); if (receive[6] != 0) { throw new Exception("电机报警"); } }while (receive[0] == 1); }
public void Paletleme(int maxHight, int reference_x, int reference_y, int paletX, int paletY, int paletZ, int productX, int productY, int productZ, int tolerans) { ushort gripperAdress = 1; //GRİPPER REGISTER ADRESİ ATANMALI !!! ushort[] gripperOffsets = new ushort[3]; //OFFSET DEĞERLERİ ATANMALI !!! ushort gripperControl = 0; TcpClient Client = new TcpClient(); ModbusIpMaster master = ModbusIpMaster.CreateIp(Client); int calculateX, calculateY, calculateZ, AdjustedReferenceX, AdjustedReferenceY, AdjustedReferenceZ, initialX, initialY, initialZ; calculateZ = maxHight / productZ; calculateY = paletY / productY; AdjustedReferenceY = (paletY - calculateY * productY) / 2 + reference_y; calculateX = paletY / productX; AdjustedReferenceX = (paletX - calculateX * productX) / 2 + reference_x; AdjustedReferenceZ = paletZ; initialX = AdjustedReferenceX; initialY = AdjustedReferenceY; initialZ = AdjustedReferenceZ; ushort offsetX, offsetY, offsetZ; Client.Connect("192.168.0.1", 502); for (int k = 0; k < calculateZ; k++) { for (int j = 0; j < calculateY; j++) { for (int i = 0; i < calculateX; i++) { offsetX = (ushort)(AdjustedReferenceX + productX / 2 + i * productX); offsetY = (ushort)(AdjustedReferenceY + productY / 2); offsetZ = (ushort)(AdjustedReferenceZ + productZ); ushort offsetAdress = 2; //OFFSET REGISTER ADRESİ ATANMALI !!! ushort[] offsetValues = new ushort[3]; offsetValues[0] = offsetX; offsetValues[1] = offsetY; offsetValues[2] = offsetZ; while (true) { master.ReadHoldingRegisters(gripperAdress, gripperControl); if (gripperControl == 1) { master.WriteMultipleRegisters(offsetAdress, offsetValues); break; } } while (true) { master.ReadHoldingRegisters(gripperAdress, gripperControl); if (gripperControl == 0) { master.WriteMultipleRegisters(offsetAdress, gripperOffsets); break; } } } AdjustedReferenceX = initialX; AdjustedReferenceY = AdjustedReferenceY + productY; } AdjustedReferenceX = initialX; AdjustedReferenceY = initialY; AdjustedReferenceZ = AdjustedReferenceZ + productZ; } }
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); }
public unsafe void UpdateFHPP() { //Mapping of all FHPP Data to signals. See Manual for more information (https://www.festo.com/net/en-ca_ca/SupportPortal/Downloads/385511/403818/555696g1.pdf) //FHPP IN ModbusIpMaster master = ModbusIpMaster.CreateIp(client); ushort[] FHPP_IN = master.ReadHoldingRegisters(0, 4); DriveEnabled = GetBit(FHPP_IN[0], 8); Ready = GetBit(FHPP_IN[0], 9);; Warning = GetBit(FHPP_IN[0], 10);; Fault = GetBit(FHPP_IN[0], 11);; SupplyVoltagePresent = GetBit(FHPP_IN[0], 12); ControlFCT_HMI = GetBit(FHPP_IN[0], 13); OperationModeB1 = GetBit(FHPP_IN[0], 14); OperationModeB2 = GetBit(FHPP_IN[0], 15); HaltActive = GetBit(FHPP_IN[0], 0); AckStart = GetBit(FHPP_IN[0], 1); MotionComplete = GetBit(FHPP_IN[0], 2); DriveIsMoving = GetBit(FHPP_IN[0], 4); DragError = GetBit(FHPP_IN[0], 5); StandstillControl = GetBit(FHPP_IN[0], 6); DriveIsReferenced = GetBit(FHPP_IN[0], 7); ControlModeB1 = GetBit(FHPP_IN[1], 9); ControlModeB2 = GetBit(FHPP_IN[1], 10); if (!OperationModeB1 && !OperationModeB2) { StateOPM = 0; } else if (OperationModeB1 && !OperationModeB2 && !ControlModeB1 && !ControlModeB2) { StateOPM = 1; } else if (OperationModeB1 && !OperationModeB2 && !ControlModeB1 && ControlModeB2) { StateOPM = 5; } else if (OperationModeB1 && !OperationModeB2 && ControlModeB1 && !ControlModeB2) { StateOPM = 9; } byte[] ActualPositionHigh = BitConverter.GetBytes(FHPP_IN[2]); byte[] ActualPositionLow = BitConverter.GetBytes(FHPP_IN[3]); byte[] ActualPositionInt32 = new byte[4]; ActualPositionInt32[1] = ActualPositionLow[1]; ActualPositionInt32[0] = ActualPositionLow[0]; ActualPositionInt32[3] = ActualPositionHigh[1]; ActualPositionInt32[2] = ActualPositionHigh[0]; ActualPosition = BitConverter.ToInt32(ActualPositionInt32, 0); byte[] ActualByte = BitConverter.GetBytes(FHPP_IN[1]); if (StateOPM == 0) { ActualRecordNumber = ActualByte[1]; RC1 = GetBit(FHPP_IN[1], 8); RCC = GetBit(FHPP_IN[1], 9); FNUM1 = GetBit(FHPP_IN[1], 11); FNUM2 = GetBit(FHPP_IN[1], 12); FUNC = GetBit(FHPP_IN[1], 15); } else if (StateOPM == 5) { ActualForce = ActualByte[0]; } else if (StateOPM == 1) { ActualVelocity = ActualByte[0]; } //FHPP OUT byte[] FHPP_3_Array = new byte[2]; FHPP_OUT[1] = SetValueVelocity; if (OPM == 0) { FHPP_OUT[0] = SetBit(FHPP_OUT[0], 15, false); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 16, false); FHPP_3_Array[1] = RecordNumber; FHPP_OUT[1] = BitConverter.ToUInt16(FHPP_3_Array, 0); } else if (OPM == 1) { FHPP_OUT[0] = SetBit(FHPP_OUT[0], 15, true); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 16, false); FHPP_OUT[1] = SetBit(FHPP_OUT[1], 10, false); FHPP_OUT[1] = SetBit(FHPP_OUT[1], 11, false); FHPP_3_Array[0] = SetValueVelocity; FHPP_3_Array[1] = 0; FHPP_OUT[1] = SetValueVelocity; byte[] SetPositionBytes = BitConverter.GetBytes(SetValuePosition); FHPP_OUT[3] = BitConverter.ToUInt16(SetPositionBytes, 0); FHPP_OUT[2] = BitConverter.ToUInt16(SetPositionBytes, 2); } else if (OPM == 5) { FHPP_OUT[0] = SetBit(FHPP_OUT[0], 15, true); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 16, false); FHPP_OUT[1] = SetBit(FHPP_OUT[1], 10, true); FHPP_OUT[1] = SetBit(FHPP_OUT[1], 11, false); FHPP_OUT[3] = SetValueForce; FHPP_OUT[2] = 0; } else if (OPM == 6) { FHPP_OUT[0] = SetBit(FHPP_OUT[0], 15, true); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 16, false); FHPP_OUT[1] = SetBit(FHPP_OUT[1], 10, false); FHPP_OUT[1] = SetBit(FHPP_OUT[1], 11, true); } FHPP_OUT[0] = SetBit(FHPP_OUT[0], 9, EnableDrive); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 10, Stop); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 11, Brake); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 12, ResetFault); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 14, HMIAccessLocked); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 1, Halt); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 2, StartTask); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 3, StartHoming); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 4, JogPos); FHPP_OUT[0] = SetBit(FHPP_OUT[0], 5, JogNeg); try { master.WriteMultipleRegisters(0, FHPP_OUT); } catch (Modbus.SlaveException e) { System.Console.WriteLine(e.Message); if (e.SlaveExceptionCode == 1) { throw new Modbus.SlaveException("Exception 1 (Illegal Function): The function code received in the query is not an allowable action for the slave. This may be because the function code is only applicable to newer devices, and was not implemented in the unit selected."); } else if (e.SlaveExceptionCode == 2) { throw new Modbus.SlaveException("Exception 2 (Illegal Data Address): The data address received in the query is not an allowable address for the slave. More specifically, the combination of reference number and transfer length is invalid."); } else if (e.SlaveExceptionCode == 3) { throw new Modbus.SlaveException("Exception 3 (Illegal Data Value): A value contained in the query data field is not an allowable value for server (or slave). This indicates a fault in the structure of remainder of a complex request, such as that the implied length is incorrect"); } else if (e.SlaveExceptionCode == 4) { throw new Modbus.SlaveException("Exception 4 (Slave Device Failure): An unrecoverable error occurred while the slave was attempting to perform the requested action."); } } }
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 void Charge(int sensorId) //{ // try // { // if (modbusMst == null) return; // /*modbusMst.WriteMultipleRegisters(1, 0x0002, new ushort[] { 0x0008 }); // relay ON // Thread.Sleep(80); //wait 0.8s // modbusMst.WriteMultipleRegisters(0x0003, new ushort[] { 0 }); // reset 0V // modbusMst.WriteMultipleRegisters(0, 0x0002, new ushort[] { 0x0008 }); // relay OFF // modbusMst.WriteMultipleRegisters(2, new ushort[] { 1, 0x0001, 1 }); // charge // Thread.Sleep(100); // modbusMst.WriteMultipleRegisters(2, new ushort[] { 1, 0x0001, 0 }); // charge*/ // /*modbusMst.WriteMultipleRegisters(0x0002, new ushort[] { (ushort)sensorId }); // select sensor // //modbusMst.WriteMultipleRegisters(0x0001, new ushort[] { (ushort)sensorId }); // modbusMst.WriteMultipleRegisters(0x0003, new ushort[] { 1, 1 }); // charge // Thread.Sleep(100); // modbusMst.WriteMultipleRegisters(0x0003, new ushort[] { 0 }); // charge */ // } // catch (Exception ex) // { // if (ErrorsReceiveDataFromBlock != null) // { // ErrorsReceiveDataFromBlock(this, new DSF602Exception(ex.Message, ex.InnerException, DSF602ExceptionStatusCode.Connect)); // } // } //} public void SelectSensor(ushort sensorId) { Thread.Sleep(800); if (modbusMst != null) { //modbusMst.WriteMultipleRegisters(0x0006, new ushort[] { 1 }); //Thread.Sleep(800); //modbusMst.WriteMultipleRegisters(0x0006, new ushort[] { 0 }); //Thread.Sleep(100); modbusMst.WriteMultipleRegisters(0x0002, new ushort[] { sensorId }); Thread.Sleep(100); } }
public async void sensorOkuma(ushort deviceID) { //start timer1, timer1.Interval = 1000 ms try { if (NetworkIsOk) { #region Master to Slave //read AI, AO, DI, DO value[0] = deviceID; //device ID value[1] = 0; //okuma value[2] = 7942; //başlangıç register value[3] = 1; // adet master.WriteMultipleRegisters(1, 699, value); sensor = master.ReadHoldingRegisters(1, 713, 1); if (sensor[0] > 0) { cGenel.sensorSonucu = sensor[0]; error_kayit.error_log_kayit("sensör aktif"); } //cGenel.CommonDeviceID = sensor[0]; #endregion } else { // cGenel.sensorSonucu = 0; //retry connecting dtNow = DateTime.Now; if ((dtNow - dtDisconnect) > TimeSpan.FromSeconds(10)) { cGenel.haberlesmeMesaj = (DateTime.Now.ToString() + ":DXM Start connecting"); error_kayit.error_log_kayit(cGenel.haberlesmeMesaj); NetworkIsOk = await ConnectTask(); if (!NetworkIsOk) { cGenel.haberlesmeMesaj = (DateTime.Now.ToString() + ":DXM Connecting fail. Wait for retry"); error_kayit.error_log_kayit(cGenel.haberlesmeMesaj); dtDisconnect = DateTime.Now; } } else { cGenel.haberlesmeMesaj = (DateTime.Now.ToString() + ":DXM Wait for retry connecting"); error_kayit.error_log_kayit(cGenel.haberlesmeMesaj); } } } catch (Exception ex) { if (ex.Source.Equals("DXM System")) { //set NetworkIsOk to false and retry connecting NetworkIsOk = false; cGenel.haberlesmeMesaj = (ex.Message); error_kayit.error_log_kayit(cGenel.haberlesmeMesaj); dtDisconnect = DateTime.Now; } } }