Exemple #1
0
        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);
            }
        }