static void Main(string[] args) { string errmsg = ""; string target; YSerialPort serialPort; if (YAPI.RegisterHub("usb", ref errmsg) != YAPI.SUCCESS) { Console.WriteLine("RegisterHub error: " + errmsg); Environment.Exit(0); } if (args.Length > 0 && args[0] != "any") { target = args[0]; serialPort = YSerialPort.FindSerialPort(target + ".serialPort"); if (!serialPort.isOnline()) { Console.WriteLine("No module connected (check cable)"); Environment.Exit(0); } } else { serialPort = YSerialPort.FirstSerialPort(); if (serialPort == null) { Console.WriteLine("No module connected (check USB cable)"); Environment.Exit(0); } } Console.WriteLine("****************************"); Console.WriteLine("* make sure voltage levels *"); Console.WriteLine("* are properly configured *"); Console.WriteLine("****************************"); serialPort.set_serialMode("9600,8N1"); serialPort.set_protocol("Line"); serialPort.reset(); string line; do { YAPI.Sleep(500, ref errmsg); do { line = serialPort.readLine(); if (line != "") { Console.WriteLine("Received: " + line); } } while (line != ""); Console.WriteLine("Type line to send, or Ctrl-C to exit: "); line = Console.ReadLine(); serialPort.writeLine(line); } while (line != ""); YAPI.FreeAPI(); }
public override async Task <int> Run() { try { await YAPI.RegisterHub(HubURL); YSerialPort serialPort; if (Target.ToLower() == "any") { serialPort = YSerialPort.FirstSerialPort(); if (serialPort == null) { WriteLine("No module connected (check USB cable) "); return(-1); } YModule ymod = await serialPort.get_module(); WriteLine("Using: " + await ymod.get_serialNumber()); } else { serialPort = YSerialPort.FindSerialPort(Target + ".serialPort"); } await serialPort.set_serialMode("9600,8N1"); await serialPort.set_protocol("Line"); await serialPort.reset(); string line; do { if (ToSend != "") { await serialPort.writeLine(ToSend); ToSend = ""; } await YAPI.Sleep(500); do { line = await serialPort.readLine(); if (line != "") { WriteLine("Received: " + line); } } while (line != ""); } while (line != ""); } catch (YAPI_Exception ex) { WriteLine("error: " + ex.Message); } YAPI.FreeAPI(); return(0); }
static void Main(string[] args) { string errmsg = ""; if (YAPI.RegisterHub("usb", ref errmsg) != YAPI.SUCCESS) { Console.WriteLine("RegisterHub error: " + errmsg); Environment.Exit(1); } YSerialPort serialPort; if (args.Length > 0 && args[0] != "any") { serialPort = YSerialPort.FindSerialPort(args[0]); } else { serialPort = YSerialPort.FirstSerialPort(); if (serialPort == null) { Console.WriteLine("No module connected (check USB cable)"); Environment.Exit(1); } } int slave, reg, val; String cmd; do { Console.WriteLine("Please enter the MODBUS slave address (1...255)"); Console.Write("Slave: "); slave = Convert.ToInt32(Console.ReadLine()); } while (slave < 1 || slave > 255); do { Console.WriteLine("Please select a Coil No (>=1), Input Bit No (>=10001+),"); Console.WriteLine(" Input Register No (>=30001) or Register No (>=40001)"); Console.Write("No: "); reg = Convert.ToInt32(Console.ReadLine()); } while (reg < 1 || reg >= 50000 || (reg % 10000) == 0); while (true) { if (reg >= 40001) { val = serialPort.modbusReadRegisters(slave, reg - 40001, 1)[0]; } else if (reg >= 30001) { val = serialPort.modbusReadInputRegisters(slave, reg - 30001, 1)[0]; } else if (reg >= 10001) { val = serialPort.modbusReadInputBits(slave, reg - 10001, 1)[0]; } else { val = serialPort.modbusReadBits(slave, reg - 1, 1)[0]; } Console.WriteLine("Current value: " + val.ToString()); Console.Write("Press ENTER to read again, Q to quit"); if ((reg % 30000) < 10000) { Console.Write(" or enter a new value"); } Console.Write(": "); cmd = Console.ReadLine(); if (cmd == "q" || cmd == "Q") { break; } if (cmd != "" && (reg % 30000) < 10000) { val = Convert.ToInt32(cmd); if (reg >= 30001) { serialPort.modbusWriteRegister(slave, reg - 30001, val); } else { serialPort.modbusWriteBit(slave, reg - 1, val); } } } YAPI.FreeAPI(); }
public override async Task <int> Run() { try { int slave = Convert.ToInt32(Slave); if (slave < 1 || slave > 255) { WriteLine("Invalid MODBUS slave address"); return(-1); } int reg = Convert.ToInt32(Register); if (reg < 1 || reg >= 50000 || (reg % 10000) == 0) { WriteLine("Invalid MODBUS Register"); return(-1); } await YAPI.RegisterHub(HubURL); YSerialPort serialPort; if (Target.ToLower() == "any") { serialPort = YSerialPort.FirstSerialPort(); if (serialPort == null) { WriteLine("No module connected (check USB cable) "); return(-1); } YModule ymod = await serialPort.get_module(); WriteLine("Using: " + await ymod.get_serialNumber()); } else { serialPort = YSerialPort.FindSerialPort(Target + ".serialPort"); } int val; if (reg >= 40001) { val = (await serialPort.modbusReadRegisters(slave, reg - 40001, 1))[0]; } else if (reg >= 30001) { val = (await serialPort.modbusReadInputRegisters(slave, reg - 30001, 1))[0]; } else if (reg >= 10001) { val = (await serialPort.modbusReadInputBits(slave, reg - 10001, 1))[0]; } else { val = (await serialPort.modbusReadBits(slave, reg - 1, 1))[0]; } WriteLine("Current value: " + val.ToString()); if (Value != "" && (reg % 30000) < 10000) { val = Convert.ToInt32(Value); if (reg >= 30001) { await serialPort.modbusWriteRegister(slave, reg - 30001, val); } else { await serialPort.modbusWriteBit(slave, reg - 1, val); } } } catch (YAPI_Exception ex) { WriteLine("error: " + ex.Message); } YAPI.FreeAPI(); return(0); }
/** * <summary> * Retrieves a serial port for a given identifier. * <para> * The identifier can be specified using several formats: * </para> * <para> * </para> * <para> * - FunctionLogicalName * </para> * <para> * - ModuleSerialNumber.FunctionIdentifier * </para> * <para> * - ModuleSerialNumber.FunctionLogicalName * </para> * <para> * - ModuleLogicalName.FunctionIdentifier * </para> * <para> * - ModuleLogicalName.FunctionLogicalName * </para> * <para> * </para> * <para> * This function does not require that the serial port is online at the time * it is invoked. The returned object is nevertheless valid. * Use the method <c>YSerialPort.isOnline()</c> to test if the serial port is * indeed online at a given time. In case of ambiguity when looking for * a serial port by logical name, no error is notified: the first instance * found is returned. The search is performed first by hardware name, * then by logical name. * </para> * </summary> * <param name="func"> * a string that uniquely characterizes the serial port * </param> * <returns> * a <c>YSerialPort</c> object allowing you to drive the serial port. * </returns> */ public static YSerialPort FindSerialPort(string func) { YSerialPort obj; obj = (YSerialPort) YFunction._FindFromCache("SerialPort", func); if (obj == null) { obj = new YSerialPort(func); YFunction._AddToCache("SerialPort", func, obj); } return obj; }