private void ParseReceiveData(ParsingDataIncommingEventArgs e, List <KeyValuePair <string, string> > itemsToAdd) { if (!e.PostiveResponse || dcmDocument == null || dcmDocument.VdfDocument == null) { return; } DcmConfig.SubFunction subFunction = FindFunction(e.RequestData); if (subFunction == null) { return; } // 执行解析数据 List <byte> data = new List <byte>(); for (int i = subFunction.Prefix.Count; i < e.ResponseData.Count; i++) { data.Add(e.ResponseData[i]); } var message = dcmDocument.VdfDocument.Message(subFunction.Message); foreach (var entry in message.SignalTable) { string value = VdfEncoder.Encode(data, entry.Value, true); itemsToAdd.Add(new KeyValuePair <string, string>(entry.Value.Name, value)); } }
private DataGridViewCell NewDataCell(VdfSignal signal, SubFunction subFunction, int row) { var desc = signal.VdfValueDesc; if (desc is VdfBcdValueDesc || desc is VdfAsciiValueDesc) { DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell(); cell.Value = VdfEncoder.Encode(subFunction.Data, signal); cell.Tag = signal; return(cell); } else if (desc is VdfPhyValueDesc) { DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell(); cell.Value = VdfEncoder.Encode(subFunction.Data, signal); //设置单位 dataGridView.Rows[row].Cells["ColumnUnit"].Value = (desc as VdfPhyValueDesc).Unit; cell.Tag = signal; return(cell); } else if (desc is VdfXncodeValueDesc) { DataGridViewComboBoxCell cell = new DataGridViewComboBoxCell(); VdfXncodeValueDesc xncodeDesc = (VdfXncodeValueDesc)desc; foreach (var entry in xncodeDesc.EntryTable) { cell.Items.Add(entry.Value); } cell.Value = VdfEncoder.Encode(subFunction.Data, signal); //这儿需要进行解码 cell.Tag = signal; return(cell); } else { throw new ArgumentException("Unsupported VdfValueDesc Type: " + signal.GetType().Name); } }