$data · بيانات القيادة
يوفر $data البيانات وفقًا لمعرف الإدخال لهذا الجهاز: current هو الإدخال الحالي، وhistory هو عينات الإدخال لآخر 30 ثانية من الرحلة الحالية.
بيانات قابلة للقراءة
انقر فوق اسم الأداة في أعلى المحرر لفتح إعدادات العداد → ربط المدخلات. انتقل إلى تكوين المعلمات لتحديد اسم الإدخال ومعرفه ونوعه؛ قم بإرجاع ربط الإدخال واملأ القيم الأصلية، أو حدد معلمات سيارتك الخاصة لإدخال OBD. يتم توفير البيانات الأساسية تلقائيًا بواسطة التطبيق.
يصل البرنامج النصي إلى الإدخال عبر $data.current.<identifier>. على سبيل المثال، يستخدم إدخال السرعة الأساسية speed $data.current.speed، ويستخدم إدخال OBD coolant $data.current.coolant. اسم الحقل مستقل عن UUID لمعلمة السيارة واسم الجهاز. يتطلب تغيير معلمات السيارة إعادة الربط فقط؛ يتطلب تعديل معرف الإدخال تعديل الكود.
| يكتب | التكوين وما يقرأه البرنامج النصي |
|---|---|
| رقم | قم بتعيين القيمة الافتراضية والحدود العليا والدنيا الاختيارية؛ يقرأ البرنامج النصي الرقم مباشرة، مثل $data.current.limit. |
| النص | تعيين النص الافتراضي. يقرأ البرنامج النصي السلسلة مباشرة، مثل $data.current.label. |
| مفتاح | تعيين حالة التبديل الافتراضية؛ يقرأ البرنامج النصي القيمة المنطقية مباشرة، مثل $data.current.showUnit. |
| اختيار | تحديد النص الاختياري والافتراضيات؛ يقرأ البرنامج النصي السلسلة المحددة، مثل $data.current.style. |
| البيانات الأساسية | حدد مصدرًا مثل السرعة أو قيمة G أو الموضع أو الوقت؛ يعتمد هيكل القراءة على المصدر. |
| بيانات OBD | تحديد نوع القيمة المتوقعة وحدد معلمات الجهاز والمركبة في ربط الإدخال؛ القراءة هي { value, unit } أو null. |
يستخدم جدول الحقول أدناه معرفات الأمثلة ولا يعني أن كل متر يحتوي على هذه الحقول تلقائيًا. يتم إنشاء الواجهة الفعلية ومطالبات الكتابة بناءً على تعريف الإدخال للأداة الحالية.
بنية القراءات والقيم المفقودة
عادة ما تكون قيمة الكمية الأساسية وقراءة OBD هي { value, unit }؛ البيانات الأساسية مثل الموضع وقيمة G والموقف وما إلى ذلك لها مكوناتها الخاصة، وحالة التسجيل هي قيمة منطقية. تقوم القيم والنصوص والمفاتيح والتحديدات بإرجاع القيم التي تم تكوينها مباشرة.
عندما لا يكون OBD مرتبطًا أو لا يكون التكوين موجودًا، يكون الإدخال بالكامل null؛ عندما يكون الارتباط موجودًا ولكنه مفقود مؤقتًا، يتم الاحتفاظ بـ { value: null, unit }. استخدم reading?.value == null للتحقق من الاختبارات المفقودة، مع الاحتفاظ بـ 0 الصالح. قد يكون value لـ OBD عبارة عن تعيين حرفي؛ لا يؤدي تعريف النوع إلى تحويل وقت التشغيل، ويجب التحقق من النوع قبل استدعاء الطرق الرقمية.
نافذة التاريخ ووحدة الوقت
$data.history هي البيانات المحددة لـ الرحلة الحالية آخر 30 ثانية، مرتبة من الأقدم إلى الأحدث. يقوم المضيف بحفظ جميع البيانات التي تم جمعها بطريقة موحدة، ثم يقوم بتجميعها حسب الحاجة وفقًا لمعلمات إدخال الأداة؛ يمكن قراءة النافذة الحالية عن طريق فتح الأداة. لا يؤدي إيقاف الرسم مؤقتًا أو تخطي العرض أو إعادة إنشاء مثيل قيد التشغيل إلى فقدان النافذة. إعادة الضبط عند إنهاء الرحلات أو تبديلها أو تبديل أوضاع التشغيل؛ تكون نافذة السجل فارغة في حالة عدم وجود رحلة نشطة.
يتم أخذ عينات من السجل بحد أقصى 5 هرتز، مع فصل العينات المجاورة بما لا يقل عن 200 مللي ثانية، ويتم الاحتفاظ بحد أقصى 151 عنصرًا. لن تؤدي أوقات أخذ العينات المتكررة وعمليات إعادة الرسم الناتجة فقط عن التغييرات في بيئة العرض إلى زيادة العينات؛ بعد توقف البيانات، سيستمر المضيف في مسح العينات منتهية الصلاحية في وقت رتيب، دون تنفيذ البرنامج النصي. هذا الحد الأعلى لا يمنع current من قراءة هذا الإدخال الأخير، كما أنه لا يبدأ استعلامات OBD إضافية.
تحتوي كل عينة على بنية حقل متوافقة مع current وقد تحتوي على اختبارات مفقودة. يؤدي تعديل تعريفات الإدخال أو الارتباطات إلى إعادة تجميع النافذة؛ تستخدم المعلمات الثابتة مثل القيم والمفاتيح والنص والخيارات التكوين الحالي. يقوم تحديث البيانات فقط بمقارنة المحتوى الفعلي لـ $data.current لتحديد ما إذا كان سيتم تنفيذ JS أم لا. يتم تضمين القيم والوحدات والحقول الفرعية للمجموعة في المقارنة؛ الاستجابات الجديدة بنفس القيمة، والنمو التاريخي أو القطع، ووقت التجميع الداخلي، وتحديثات المصدر غير المحددة لن تؤدي إلى التنفيذ بشكل منفصل. يستمر المضيف في الحفاظ على النافذة الكاملة، وفي المرة التالية التي يتغير فيها current، يحصل البرنامج النصي على أحدث سجل. تنتمي الطوابع الزمنية المحددة بوضوح أو الفترات المسجلة إلى current، وستظل تغييرات القيمة تؤدي إلى التنفيذ. OBD تحتفظ القراءة بالقيمة والوحدة وحالة القياس المفقودة في وقت أخذ العينات، ولن تتم ملئها بالقراءات اللاحقة؛ سيتم تحويل السرعة الأساسية وفقًا لوحدة العرض الحالية. elapsed.value هو عدد الثواني المنقضية أثناء الرحلة الحالية، وtimestamp.value هو الطابع الزمني بالمللي ثانية، وmovingTime.value هو وقت السفر بالثواني. استخدم الوقت الفعلي عند رسم منحنيات الوقت، واحتفظ بنقاط التوقف الناتجة عن القياسات المفقودة.
مثال: سرعة العرض ومعلمات OBD في وقت واحد
حدد مدخلين: مدخل السرعة الأساسية بالمعرف speed، والمدخل OBD بالمعرف coolant. ربط معلمات السيارة الأصلية بالأخير. يعرض المثال التالي القراءات والوحدات حسب معرفات الإدخال الخاصة بها؛ ليست هناك حاجة لأي تعديلات على رمز المثال عند إعادة ربط الجهاز.
function main() {
const speed = $data.current.speed;
const parameter = $data.current.coolant;
return (
<VStack spacing={8}>
<Text fontSize={40}>
{speed?.value == null ? '—' : speed.value.toFixed(0)}
</Text>
<Text>{speed?.unit ?? $env.speedUnit}</Text>
<Text>
{parameter?.value == null ? '—' : parameter.value.toString()}
</Text>
<Text>{parameter?.unit ?? ''}</Text>
</VStack>
);
}
التحديثات ومصادر البيانات
يستخدم كل تنفيذ للبرنامج النصي أحدث المدخلات؛ يتم تحديد التردد الفعلي من خلال مصدر البيانات وتغييرات المدخلات ووقت المعالجة. يقوم current وhistory بإرجاع نسخ من البيانات، ولن يؤدي تعديلها إلى تغيير قراءات المستشعر أو تكوين السيارة.
سيتم تطبيق إعدادات استبدال بيانات الرحلة الصالحة في الحقول مثل السرعة الأساسية. قراءة المعلمة OBD تستخدم القراءة والوحدة الخاصة بالمعلمة مباشرة. ستؤثر فترات الاستعلام واستجابات المركبات والطلبات الأخرى على التحديث الفعلي. يتأثر توفر البيانات أيضًا بتحديد الموقع وحالة التعرف واتصال الجهاز؛ تستخدم معاينات المحرر مدخلات محاكاة مستقلة.
مجال
current{ [identifier: string]: number | string | boolean | object | null }أحدث البيانات المحددة
history{ [identifier: string]: number | string | boolean | object | null }[]البيانات المحددة خلال آخر 30 ثانية، الأقدم أولاً
current.speed{ value: number | null; unit: "km/h" | "mph" }السرعة
current.gForce{ longitudinal: number | null; lateral: number | null; combined: number | null; unit: string }قوة G
current.heading{ direction: number | null; accuracy: number | null; unit: string }اتجاه مقدمة المركبة
current.location{ latitude: number | null; longitude: number | null; unit: string }الموقع
current.vehicleAttitude{ roll: number | null; pitch: number | null; unit: string }وضعية المركبة
current.locationAccuracy{ value: number | null; unit: "m" }دقة الموقع
current.altitude{ value: number | null; unit: "m" }الارتفاع
current.distance{ value: number | null; unit: "m" }المسافة
current.movingTime{ value: number | null; unit: "s" }وقت الحركة
current.timestamp{ value: number | null; unit: "ms" }وقت القياس
current.elapsed{ value: number | null; unit: "s" }مدة التسجيل
current.recordingbooleanجارٍ التسجيل
current.coolant{ value: number | string | null; unit: string | null } | nullبيانات OBD
current.limitnumberرقم
current.labelstringالنص
current.showUnitbooleanمفتاح
current.stylestringاختيار