public override CMessage GetRecordMessage(CMessage message, int Index) { //获取记录相关报文,根据记录索引号 CMessage RecordMessage = message.Clone(); RecordMessage.Schema[0] = (byte)this.Address; if (message.Index == 35) { RecordMessage.Schema[3] = (byte)(CommonUtility.ByteToInt(RecordMessage.Schema[3]) + Index * 0x10); } else { RecordMessage.Schema[3] = (byte)(CommonUtility.ByteToInt(RecordMessage.Schema[3]) + Index * 0x08); } //int crc = CRC16.calcCrc16(RecordMessage.Schema, 0, message.Schema.length); //RecordMessage.Schema[message.Schema.length] = (byte) (crc & 0x00FF); //RecordMessage.Schema[message.Schema.length + 1] = (byte) ((crc & 0xFF00) >> 8); return(RecordMessage); }
public override bool SyncDateTime() { String DateString = DateTime.Now.ToString("yyMMdd"); String TimeString = DateTime.Now.ToString("HHmmss"); byte[] DateBytes = CommonUtility.str2Bcd(DateString); byte[] TimeBytes = CommonUtility.str2Bcd(TimeString); CMessage message = this.GetMessage(57); CMessage WriteMessage = message.Clone(); WriteMessage.Schema[0] = (byte)this.Address; WriteMessage.Schema[8] = DateBytes[0]; WriteMessage.Schema[9] = DateBytes[1]; WriteMessage.Schema[10] = DateBytes[2]; WriteMessage.Schema[12] = TimeBytes[0]; WriteMessage.Schema[13] = TimeBytes[1]; WriteMessage.Schema[14] = TimeBytes[2]; AutoResetEvent NotifyObj = new AutoResetEvent(false); return(this.ExchangeMessage(WriteMessage, NotifyObj)); }
public override bool WriteVar(CVar Var, String Value, AutoResetEvent objectNotify) { //写变量 int RawValue = 0; if (Var.Table) { //查表 bool ValidValue = false; for (int TableIndex = 0; TableIndex < Var.Tables.Count; TableIndex++) { CTable table = Var.Tables[TableIndex]; if (table.Value.ToString() == (Value.ToString())) { RawValue = table.Index; ValidValue = true; break; } } if (!ValidValue) { return(false); } } else { //根据数据类型分别处理 switch (Var.DataType) { case 1: RawValue = Convert.ToInt32(Convert.ToDouble(Value.ToString()) / Var.Multiple); break; case 5: double DoubleValue = Convert.ToDouble(Value.ToString()); RawValue = Convert.ToInt32(DoubleValue / Var.Multiple); if (Var.Memo == ("最高位为1扩大100倍,为0扩大10倍")) { if (DoubleValue < 10) { RawValue = Convert.ToInt32(DoubleValue * 100 + 32768); } else { RawValue = Convert.ToInt32(DoubleValue * 10); } } break; case 9: RawValue = (Value.ToString() == ("否") || Value.ToString().ToLower() == ("false")) ? 0 : 1; break; //case 10 : break; default: return(false); } } CMessage message = (CMessage)Var.OwnerMessage; CMessage WriteMessage = message.Clone(); WriteMessage.Schema[0] = (byte)this.Address; WriteMessage.Schema[1] = 0x06; int VarAddress = CommonUtility.ByteToInt(WriteMessage.Schema[2]) * 256 + CommonUtility.ByteToInt(WriteMessage.Schema[3]) + Var.ByteOffset / 2; WriteMessage.Schema[2] = (byte)((VarAddress & 0xFF00) >> 8); WriteMessage.Schema[3] = (byte)(VarAddress & 0x00FF); if (Var.BitOffset < 0) { if (Var.Length == 16) { WriteMessage.Schema[4] = (byte)((RawValue & 0xFF00) >> 8); WriteMessage.Schema[5] = (byte)(RawValue & 0x00FF); } } else { int TotalWord = message.Response[Var.ByteOffset + 3] * 256 + message.Response[Var.ByteOffset + 4]; int W = 0xFFFF; W = W << (16 - Var.Length - Var.BitOffset); W = W & 0x0000FFFF; W = W >> (16 - Var.Length); W = W & 0x0000FFFF; W = W << Var.BitOffset; W = W & 0x0000FFFF; W = ~W; W = W & 0x0000FFFF; TotalWord = TotalWord & W; RawValue = RawValue << Var.BitOffset; RawValue = TotalWord | RawValue; RawValue = RawValue & 0x0000FFFF; WriteMessage.Schema[4] = (byte)((RawValue & 0xFF00) >> 8); WriteMessage.Schema[5] = (byte)(RawValue & 0x00FF); } if (objectNotify != null) { return(this.ExchangeMessage(WriteMessage, objectNotify)); } else { this.AddUpdateMessage(WriteMessage); return(true); } }