/// <summary> /// this can be used as a heart beat tracker as the plc will poll the ctrl room every ~100 ms /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Server_Read_handler(object sender, ModbusSlaveRequestEventArgs e) { PLC_last_contact = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); // Console.WriteLine(e.Message); return; Regex rx = new Regex(@"\b(?:Read )([0-9]+)(?:.+)(?:address )([0-9]+)\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); MatchCollection matches = rx.Matches(e.Message.ToString()); foreach (Match match in matches) { GroupCollection groups = match.Groups; Console.WriteLine("'{0}' repeated at positions {1} and {2}", groups["word"].Value, groups[0].Index, groups[1].Index); } // PLC_Modbusserver.DataStore.HoldingRegisters[e.] += 1; //throw new NotImplementedException(); }
private void requestReceiveHandler(object sender, ModbusSlaveRequestEventArgs e)//收到请求 { IModbusMessage message = e.Message; string writeLogStr = _name + ": " + message; if (message.FunctionCode == 6)//6是写单个寄存器 { Program._logForm.addWriteLog(writeLogStr); return; } else if (message.FunctionCode == 16)//16是写多个模拟量寄存器 { Program._logForm.addWriteLog(writeLogStr); return; } string logStr = _name + " Receive Request:" + message; Program._logForm.addLog(logStr); }
/// <summary> /// 当从机收到数据请求时候发生 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Modbus_Serial_ModbusSlaveRequestReceived(object sender, ModbusSlaveRequestEventArgs e) { this.SimulatorAppendLog("服务器请求从机获取数据 "); }
/// <summary> /// 当从机收到写入命令的时候发生 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Modbus_Serial_WriteComplete(object sender, ModbusSlaveRequestEventArgs e) { this.SimulatorAppendLog("服务器请求从机要求写入数据"); }
/// <summary> /// Writes to the log when a request for data is received /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void HostedSlave1_Request_Event(object sender, ModbusSlaveRequestEventArgs e) { File.AppendAllText(LogFileNames[0], WriteLine()); }