بيانات الصك

اقرأ بيانات القيادة الحالية والعينات التاريخية عبر $data واستخدم النتائج للنصوص والرسومات والمنحنيات. تشرح هذه المقالة تكوين البيانات وبنية القراءة ومعلمات OBD وقواعد التحديث.

واجهة البيانات

يستخدم الجهاز مدخلات محددة عبر $data. يوفر $data.current الإدخال الحالي ويوفر $data.history تسلسل أخذ العينات لآخر 30 ثانية من الرحلة الحالية. يأتي اسم الحقل من معرف إدخال الأداة؛ على سبيل المثال، قم بتسمية إدخال السرعة الأساسية speed، ثم اقرأ $data.current.speed؛ قم بتسمية الإدخال OBD coolant، ثم اقرأ $data.current.coolant.

القيم المكافئة للسرعة والمسافة والوقت وOBD تشمل value وunit. على سبيل المثال، { value: 42.3, unit: 'km/h' } يحتوي على قيم ووحدات عددية؛ توفر الحقول مثل الموضع وقيمة G المكونات الخاصة بها. تقوم القيم الرقمية والنصوص والمفاتيح وعناصر التحديد بإرجاع الأرقام أو السلاسل أو القيم المنطقية مباشرة دون لف طبقة من value. راجع واجهة برمجة التطبيقات $data للحصول على القواعد الكاملة.

تحديد الإدخال والربط الأصلي

انقر فوق اسم الأداة في أعلى المحرر لفتح إعدادات العداد → ربط المدخلات. انتقل إلى تكوين المعلمات لتحديد اسم الإدخال ومعرفه ونوعه؛ قم بإرجاع ربط الإدخال واملأ القيم الأصلية، أو حدد معلمات سيارتك الخاصة لإدخال OBD. يتم توفير البيانات الأساسية تلقائيًا بواسطة التطبيق.

يكتب التكوين وما يقرأه البرنامج النصي
رقم قم بتعيين القيمة الافتراضية والحدود العليا والدنيا الاختيارية؛ يقرأ البرنامج النصي الرقم مباشرة، مثل $data.current.limit.
النص تعيين النص الافتراضي. يقرأ البرنامج النصي السلسلة مباشرة، مثل $data.current.label.
مفتاح تعيين حالة التبديل الافتراضية؛ يقرأ البرنامج النصي القيمة المنطقية مباشرة، مثل $data.current.showUnit.
اختيار تحديد النص الاختياري والافتراضيات؛ يقرأ البرنامج النصي السلسلة المحددة، مثل $data.current.style.
البيانات الأساسية حدد مصدرًا مثل السرعة أو قيمة G أو الموضع أو الوقت؛ يعتمد هيكل القراءة على المصدر.
بيانات OBD تحديد نوع القيمة المتوقعة وحدد معلمات الجهاز والمركبة في ربط الإدخال؛ القراءة هي { value, unit } أو null.

معرف الإدخال هو 1-100 حرف ورقم إنجليزي، يبدأ بحرف، ولا يمكن تكراره في نفس الأداة؛ يحتوي كل جهاز على 256 مدخلاً كحد أقصى. يتم استخدام الاسم لعرض الواجهة ويتم استخدام المعرف للتعليمات البرمجية. لا يؤدي تعديل اسم العرض إلى تغيير مسار الوصول، لكن تعديل المعرف يتطلب تعديل الكود في نفس الوقت.

على سبيل المثال، بعد استخدام coolant لتمثيل درجة حرارة سائل التبريد وربط المعلمات المقابلة للأجهزة المختلفة، يظل الرمز يقرأ $data.current.coolant. يوفر المحرر تلميحات للتعبير والكتابة بناءً على تعريف الإدخال. يجب أن تقع القيمة الافتراضية الرقمية ضمن الحدود العليا والدنيا، ويجب أن تحتوي عناصر التحديد على خيارات غير مكررة وغير فارغة وعناصر افتراضية صالحة؛ قم بتصحيح الحقول المقابلة أولاً عند حفظ المطالبة بالأخطاء.

القراءة الحالية

يحتوي الجهاز الجديد بالفعل على مدخلات البيانات الأساسية مع المعرف speed والمصدر السرعة؛ يمكن للأعمال الموجودة التحقق من هذا التعريف في تكوين المعلمات. احصل على $data.current.speed في main()، ويمكنك استخدام قيمة ووحدة هذه السرعة. يوضح المثال التالي القيمة المستديرة في الأعلى والوحدة في الأسفل؛ عندما لا تتوفر سرعة، يتم عرض —.

تحتفظ مدخلات السرعة الأساسية التي تم تكوينها بشكل صحيح دائمًا بالكائن، value يكون null عند فقده، ويظل unit km/h أو mph من الإعداد. == null تحقق مما إذا كانت القيمة مفقودة. عندما تكون السرعة صفر، فإنه لا يزال يعرض 0. يتم تحديد اسم الحقل بواسطة معرف الإدخال؛ إذا تم تغييره إلى vehicleSpeed، فيجب أيضًا تغيير الرمز إلى $data.current.vehicleSpeed.

function main() {
  const speed = $data.current.speed;
  return (
    <VStack spacing={8}>
      <Text fontSize={64} color={$env.foreground}>
        {speed?.value == null ? '—' : Math.round(speed.value)}
      </Text>
      <Text fontSize={16} color={$env.accent}>
        {speed?.unit ?? $env.speedUnit}
      </Text>
    </VStack>
  );
}

المعلمة OBD

قم أولاً بتوصيل جهاز OBD وتحقق من أن المعلمات المستهدفة تنتج قراءات صالحة. انتقل إلى تكوين المعلمات وأضف الإدخال بيانات OBD، على سبيل المثال. الاسم "درجة حرارة سائل التبريد"، المعرف coolant، النوع المتوقع حدد رقمي. ارجع إلى ربط المدخلات وحدد معلمة درجة حرارة سائل التبريد ضمن الأجهزة الخاصة به. يقرأ المثال التالي عبر $data.current.coolant دون استخدام معلمة المركبة UUID كاسم حقل البرنامج النصي.

تحتوي القراءات المرتبطة والمكونة دائمًا على value وunit. عندما لا يكون الجهاز متصلاً، تنتهي صلاحية القراءة، أو يفشل الاستعلام، value هو null، وunit لا يزال يأخذ تكوين المعلمة المحفوظة بواسطة الجهاز المحدد؛ تستخدم المعلمات غير الموحدة unit: null. عندما لا يكون مرتبطًا أو لم يعد تكوين الجهاز والمعلمة موجودًا، يكون الإدخال بالكامل null.

يمكن أن يكون value رقمًا أو سلسلة نصية معينة. يتم استخدام النوع المتوقع لتحرير المطالبات؛ قد يطالب الربط بالوسائط التي تُرجع أنواعًا مختلفة، ولكنها ستظل قابلة للربط، ولن يتم تحويل القيمة الفعلية كنتيجة لذلك. يجب التحقق من النوع قبل تنسيق الأرقام. بعد تغيير المحول أو استيراد أعمال الآخرين، قم بإعادة ربط الإدخال المقابل للاحتفاظ بالرمز الأصلي.

function main() {
  const reading = $data.current.coolant;
  const value = reading?.value;
  const text =
    value == null
      ? '—'
      : typeof value === 'number'
        ? value.toFixed(1)
        : value.toString();
  return (
    <VStack spacing={8}>
      <Text fontSize={48} color={$env.foreground}>
        {text}
      </Text>
      <Text fontSize={16} color={$env.accent}>
        {reading?.unit ?? ''}
      </Text>
    </VStack>
  );
}

التحديثات وأخذ العينات التاريخية

لا تحتوي أجهزة القياس المخصصة على معدل تحديث ثابت وموحد. عندما يتغير الإدخال الحالي أو تعريف الإدخال أو بيئة العرض، يقوم CapDrive بإعادة تنفيذ البرنامج النصي ويستدعي main()؛ يتم تخطي المدخلات متطابقة. يتم تنفيذ البرنامج النصي بشكل تسلسلي، ويتم الاحتفاظ فقط بأحدث المدخلات المعلقة أثناء المعالجة. يتم تنفيذ الرسوم المتحركة بشكل مستقل عن طريق جانب الرسم، دون تشغيل البرامج النصية إطارًا تلو الآخر، ودون زيادة تكرار أخذ العينات للمستشعر أو OBD.

يحتفظ التطبيق بشكل موحد بالبيانات التي تم جمعها لآخر 30 ثانية من الرحلة الحالية، ويأخذ عينات ويحتفظ بما يصل إلى 151 عنصرًا عند 5 هرتز. افتح الأداة لقراءة النافذة الموجودة؛ قم بإيقاف الرسم مؤقتًا أو إعادة إنشاء المثيل قيد التشغيل دون فقدان النافذة، ثم قم بإعادة ضبطه عند انتهاء الرحلة، أو تبديل الرحلات أو أوضاع التشغيل. لن يؤدي النمو التاريخي أو تنظيف انتهاء الصلاحية إلى تشغيل البرنامج النصي بشكل منفصل؛ عندما تريد أن يتقدم المنحنى بمرور الوقت، يمكنك تحديد إدخال أساسي باستخدام المعرف elapsed والمصدر هو المدة المسجلة.

بعد تحديد مدخلات speed وelapsed، يمكن استخدام elapsed.value لكل عينة تاريخية كحرف الإحداثي وspeed.value كالإحداثي؛ يستخدم الطابع الزمني المللي ثانية وتستخدم المدة المسجلة الثواني. احتفظ بفترات الاختبار المفقودة دون إعادة ملء السجل بقيم OBD اللاحقة. تستخدم المعاينات مدخلات محاكاة وتستخدم لوحات المعلومات بيانات حقيقية.

صحة البيانات

null يعني أنه لا توجد قراءات متاحة حاليًا وأن 0 قيمة صالحة. من خلال الحفاظ على هاتين الحالتين، يمكن للجهاز عرض حالة التوقف أو انقطاع الاتصال أو الغياب المؤقت للاختبار. يمكنك استخدام value == null ? '—' : value للتعامل مع القيم لتجنب عرض جميع القياسات المفقودة على أنها صفر عبر value || 0.

قد تنتج تعيينات النص سلسلة فارغة، أو قد تُرجع رقمًا أو null إذا لم يكن هناك تطابق، اعتمادًا على تكوين المعلمة. View الذي يقبل القيم الحرفية يمكنه عرض السلاسل؛ يجب على القيم المشاركة في العمليات الحسابية وتنسيق الأرقام التحقق أولاً من النوع.

عند استكشاف أخطاء الاختبارات المفقودة وإصلاحها، تحقق وفقًا لمصدر البيانات المطابق للحقل: السرعة الأساسية لعرض حالة تحديد المواقع؛ المعلمة OBD لعرض الجهاز الحالي واختبار نتائج القراءة وتكوين المعلمة. بعد أن يصبح مصدر البيانات طبيعيًا، تحقق من الحقول وتعبيرات التعليمات البرمجية المحددة بواسطة الأداة.

تابع إلى