חיפוש נכסי RFID: אפליקציה ניידת עם היסטוריית תנועה
תארו לעצמכם: מחסן עם 10,000 פריטים, והמכשיר הדרוש לא נמצא כבר חצי שעה. מפעילים רצים עם רשימות נייר, מלאי אורך ימים, והפער בין הרשומות למציאות מגיע ל-30%. מעקב נכסי RFID עם אפליקציה ניידת פותר את זה: חיפוש לפי EPC אורך שניות, היסטוריית תנועה נראית בזמן אמת, ואינטגרציית ERP מבטלת הזנה ידנית. אנו מפתחים מערכות כאלה במחזור מלא — מעיצוב מודל אירועים ועד השקה. ניסיון: 7+ שנים ו-15+ פרויקטים למחסנים, לוגיסטיקה וייצור. חיסכון בזמן מלאי עד 80%, ועלויות חיפוש נכסים מופחתות פי 3.
ארכיטקטורת מודל אירועים
כל קריאת תג היא אירוע עם מטא-דאטה:
data class AssetReadEvent(
val epc: String,
val readerLocation: String, // ID антенны/ридера
val timestamp: Long,
val rssi: Int, // сигнал: приблизительная дистанция
val direction: ReadDirection?, // ENTRY / EXIT для воротных ридеров
val operatorId: String? // кто сделал ручное считывание
)
enum class ReadDirection {
ENTRY, EXIT, UNKNOWN
}האפליקציה הניידת מייצרת אירועים עם data class AssetReadEvent( val epc: String, val readerLocation: String, // ID антенны/ридера val timestamp: Long, val rssi: Int, // сигнал: приблизительная дистанция val direction: ReadDirection?, // ENTRY / EXIT для воротных ридеров val operatorId: String? // кто сделал ручное считывание ) enum class ReadDirection { ENTRY, EXIT, UNKNOWN } וקואורדינטות GPS/פנים-מבנה. קוראי שער (Impinj Speedway, Zebra FX9600) מייצרים אירועים משלהם דרך LLRP או REST API. הכל מתכנס לתור אירועים אחד בקצה האחורי.
איך להפחית עלויות חיפוש פי 3?
מלאי ידני אורך שעות, ומציאת פריט ספציפי אורך עשרות דקות. עם הפתרון שלנו, מפעיל עם קורא נייד מוצא נכס בשניות בזכות סינון EPC ותצוגת RSSI. השוו:
| שיטת חיפוש | זמן לכל נכס | דיוק | עוצמת עבודה |
|---|---|---|---|
| חיפוש ידני | 5–15 דקות | ~70% | גבוהה |
| RFID + אפליקציה ניידת | 10–30 שניות | >99% | נמוכה |
מציאת נכס ספציפי
הפעולה הנפוצה ביותר באפליקציה הניידת היא 'מצא נכס XYZ במחסן זה'. קורא ה-RFID עובר למצב 'חיפוש קרבה': הוא מציג את ה-RSSI של תג ספציפי, ועוזר לצמצם את אזור החיפוש:
class AssetSearchSession(
private val rfidReader: RfidReader,
private val targetEpc: String
) {
private val _proximity = MutableStateFlow(ProximityLevel.UNKNOWN)
val proximity: StateFlow<ProximityLevel> = _proximity.asStateFlow()
fun start() {
rfidReader.setInventoryFilter(epcFilter = targetEpc) // читать только целевой тег
rfidReader.startContinuousInventory(onTag = { tag ->
if (tag.epc == targetEpc) {
_proximity.value = rssiToProximity(tag.peakRSSI)
}
})
}
private fun rssiToProximity(rssi: Int): ProximityLevel = when {
rssi > -55 -> ProximityLevel.VERY_CLOSE // < 0.5м
rssi > -65 -> ProximityLevel.CLOSE // 0.5–1.5м
rssi > -75 -> ProximityLevel.MEDIUM // 1.5–3м
else -> ProximityLevel.FAR // > 3м
}
}סינון EPC (operatorId) הוא קריטי — בלעדיו, הקורא קורא את כל התגים בטווח וסותם את זרם הנתונים. ממשקי סינון ספציפיים תלויים ב-SDK של הקורא: Zebra RFID SDK — class AssetSearchSession( private val rfidReader: RfidReader, private val targetEpc: String ) { private val _proximity = MutableStateFlow(ProximityLevel.UNKNOWN) val proximity: StateFlow<ProximityLevel> = _proximity.asStateFlow() fun start() { rfidReader.setInventoryFilter(epcFilter = targetEpc) // читать только целевой тег rfidReader.startContinuousInventory(onTag = { tag -> if (tag.epc == targetEpc) { _proximity.value = rssiToProximity(tag.peakRSSI) } }) } private fun rssiToProximity(rssi: Int): ProximityLevel = when { rssi > -55 -> ProximityLevel.VERY_CLOSE // < 0.5м rssi > -65 -> ProximityLevel.CLOSE // 0.5–1.5м rssi > -75 -> ProximityLevel.MEDIUM // 1.5–3м else -> ProximityLevel.FAR // > 3м } } , setInventoryFilter; Chainway SDK — SLFlag.
היסטוריית תנועה
// Room entities для истории активов
@Entity(tableName = "asset_events", indices = [Index("epc"), Index("timestamp")])
data class AssetEventEntity(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val epc: String,
val eventType: String, // "scan", "checkpoint", "entry", "exit"
val locationId: String,
val locationName: String,
val operatorId: String?,
val rssi: Int?,
val timestamp: Long,
val synced: Boolean = false
)
@Dao
interface AssetEventDao {
@Query("SELECT * FROM asset_events WHERE epc = :epc ORDER BY timestamp DESC LIMIT 50")
fun getAssetHistory(epc: String): Flow<List<AssetEventEntity>>
@Query("SELECT * FROM asset_events WHERE synced = 0 ORDER BY timestamp ASC")
suspend fun getUnsynced(): List<AssetEventEntity>
}ההיסטוריה במכשיר שומרת רק את N האירועים האחרונים. היסטוריה מלאה נמצאת בשרת. TagFilter מסנכרן אירועים שלא סונכרנו כשהרשת זמינה.
למה אנו מבטיחים דיוק עד 99%?
אנו משתמשים ב-SDK מוכחים, פרוטוקולים יציבים, ובודקים על ציוד אמיתי. ללא ניתוח RSSI וכיוון, אי אפשר להבחין בין נכס שעובר ליד שער לבין נכס שנמצא זמנית באזור. האלגוריתמים שלנו מתחשבים בשני הפרמטרים. בנוסף, אנו משתמשים בתקן EPC Gen2 לתאימות תגים. הפחתת שגיאות חשבונאיות מובילה לחיסכון ישיר בעלויות.
השוואת קוראי RFID פופולריים
| דגם | קצב קריאה מקסימלי | תמיכת LLRP | ממשקים | שימוש אופייני |
|---|---|---|---|---|
| Impinj Speedway R420 | 750 תגים/שנייה | כן | Ethernet, USB 2.0 | שערי מחסן |
| Zebra FX9600 | 1,200 תגים/שנייה | כן | Ethernet, GPIO | קווי מסוע |
| Chainway UHF RFID R6 | 200 תגים/שנייה | לא | Bluetooth 5.0 | חיפוש ידני |
אינטגרציה עם ERP/WMS
מעקב נכסים ללא אינטגרציה עם מערכת חשבונאית הוא חצי פתרון. REST API לסנכרון:
interface AssetTrackingApi {
@POST("events/batch")
suspend fun pushEvents(@Body events: List<AssetEventDto>): Response<BatchResult>
@GET("assets/{epc}")
suspend fun getAssetInfo(@Path("epc") epc: String): Response<AssetInfoDto>
@GET("assets/{epc}/location")
suspend fun getLastKnownLocation(@Path("epc") epc: String): Response<LocationDto>
}FilterParam — לאימות: המפעיל סורק את התג, והאפליקציה מציגה מיד היכן המערכת ראתה אותו לאחרונה. אי-התאמה בין מיקום בפועל למיקום במערכת היא דגל אדום ללוגיסטיקה.
איך מתבצעת אינטגרציית WMS?
שלב 1: ביקורת תהליכים נוכחיים וזיהוי נקודות בקרה קריטיות. שלב 2: הגדרת קוראים נייחים ושער LLRP לאיסוף אירועים. שלב 3: פיתוח REST API לסנכרון — אנו מתאימים אותו ל-ERP שלכם (1C, SAP, Oracle). שלב 4: פריסת האפליקציה הניידת עם מודולי חיפוש והיסטוריה. שלב אחרון: בדיקות על נכסים אמיתיים והדרכת מפעילים. כל המחזור אורך 2 עד 4 שבועות. קבלו ייעוץ לתרחיש שלכם — אנו עוזרים לבחור את הפתרון האופטימלי.
מה כלול
- ניתוח תהליכים ובחירת ציוד RFID.
- פיתוח אפליקציה ניידת (iOS/Android) עם מודולי חיפוש והיסטוריה.
- הגדרת קוראים נייחים ושער LLRP.
- אוטובוס אירועים בצד השרת ו-REST API.
- אינטגרציה עם ה-ERP/WMS שלכם (1C, SAP, Oracle וכו').
- בדיקות על נכסים אמיתיים.
- תיעוד והדרכת מפעילים.
- תמיכה אחריות ל-3 חודשים.
טעות נפוצה בהתחלה היא לנסות לחסוך בקוראים ולהשתמש באנטנות זולות ללא כוונון שטח. זה מוביל ל'אזורים מתים' וקריאות חסרות. אנו עורכים סקר לפני פרויקט ומבטיחים כיסוי.
ציר זמן
אפליקציית חיפוש נכסים ניידת + היסטוריית אירועים + סנכרון REST עם WMS: 5 ימים. פתרון מלא כולל הגדרת קוראים נייחים Impinj/Zebra, אינטגרציית LLRP ואוטובוס אירועים בצד השרת: 2–4 שבועות.
העריכו את הפרויקט שלכם — קבלו ייעוץ על מחסן טכנולוגי ולוחות זמנים. צרו קשר, ואנו נציע פתרון אופטימלי סוהר.







