PDA

View Full Version : باز کردن کشوی پول



hooooman
پنج شنبه 04 مهر 1398, 12:04 عصر
من برای 1 صندوق فروشگاهی دارم کد میزنم که کشوی پول رو هم میشه به فیش پرینتر وصل کرد هم به خود سیستم صندوق.اتصالش هم با یه فیش RJ12 هستش .حالا نمیخام با پرینت گرفتن کشو باز بشه میخام مثلا از یه Button استفاىه كنم .ممکنه راهنمایی کنین؟

مهدی کرامتی
پنج شنبه 04 مهر 1398, 20:25 عصر
شما مشخص نکردید نحوه دستور دادن به کشو برای باز شدن به چه صورت هست.

hooooman
جمعه 05 مهر 1398, 00:21 صبح
سلام جناب کرامتی .
در حال حاضر وقتی پرینت میفرستم کشو باز میشه.چون Rj12 به فیش پرینتر وصله. من میتونم کشو رو به خود ماشین صندوق هم وصل کنم. تو این حالت اصلا هیچ ایده ای ندارم که چه دستوری توی .net کدهای بازکردن کشو رو میتونه ارسال کنه. یعنی من قاعدتا باید اون کدها رو (که نمیدونم اصلا چی هستن) به پورت rj12 ارسال کنم و دیگر هیچ...
سپاس

مهدی کرامتی
جمعه 05 مهر 1398, 00:37 صبح
اینکه پرینت بفرستید کشو باز بشه یک رویه اشتباهه که بهرحال جواب داده.

انجام رویه صحیح اش نیازمند مقداری آشنایی با الکترونیک است. کابل RJ12 استاندارد 4 رشته سیم داره. بالطبع پورت های سریال نمی توانند تامین کننده ولتاژ/شدت جریان مورد نیاز برای باز کردن کشو باشند، بنابراین ارسال پرینت احتمالا داره باعث میشه با یک پالس کوچک مدار یا ترانزیستوری که در سمت کشو مسئول باز کردن هست تحریک بشه و کشو باز بشه.

برای انجام اصولی ماجرا، یک کابل ساده حاول همون 4 تا سیم رو از یک طرف به کشو وصل کنید، و سمت دیگرش رو لخت کنید. یکی یکی کابل ها رو برای مدت کوتاه (نیم ثانیه) به هم بچسبانید ببینید اتفاقی میافته یا نه. اگر شد خبر بدید. اگر نشد در قالب پاسخی که اینجا میدم بیشتر از این نمی تونم کاری کنم (نیاز به ویزیت بالینی بیمار از نزدیک هست).

depnet
سه شنبه 24 دی 1398, 19:14 عصر
با سلام
من هم با چنین مشکلی روبه رو هستم
البته یه نرم افزار دارم که داخل اون به این کد اشاره کرده یعنی وقتی این کد رو بر میدارم دیگه عمل نمیکنه چون دیگه اون نرم افزار قبلی ببه دردم نمیخوره مجبورم همیشه باز نگه دارم

1B;70;00;19;ff;
کد دستور قفل صندوق

وقتی اینو برمیدارم از کار میفته ایا میشه فقط یه دکمه باشه که این کارو برام انجام بده؟؟:متفکر:

NasimBamdad
سه شنبه 24 دی 1398, 21:35 عصر
قبلا من این مشکل رو حل کردم ، از ایـــــنـــــجــــا (https://barnamenevis.org/showthread.php?558877-%DA%86%D9%87-%D8%B7%D9%88%D8%B1%DB%8C-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1%D8%A8-%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87%DB%8C-%D8%B1%D9%88-%D8%A8%D8%A7%D8%B2-%DA%A9%D8%B1%D8%AF&p=2426134&viewfull=1#post2426134) مشکل ات رو پیگیری کن

کشوی پول برق اش رو از فیش پرینتر میگیره و میتونید این برق رو فعال کنید از طریق همون کابل RJ12، فقط کافیه یکسری بایت استرینگ رو به فیش پرینتر ارسال کنید که درب صندوق باز میشه

the king
سه شنبه 24 دی 1398, 21:52 عصر
با سلام
من هم با چنین مشکلی روبه رو هستم
البته یه نرم افزار دارم که داخل اون به این کد اشاره کرده یعنی وقتی این کد رو بر میدارم دیگه عمل نمیکنه چون دیگه اون نرم افزار قبلی ببه دردم نمیخوره مجبورم همیشه باز نگه دارم

1B;70;00;19;ff;
کد دستور قفل صندوق

وقتی اینو برمیدارم از کار میفته ایا میشه فقط یه دکمه باشه که این کارو برام انجام بده؟؟:متفکر:

اون بایت های فرمان که شما باید ارسال کنید رو که خودتون دارید :


1B;70;00;19;ff;

تعریف آرایه اش اینطوری میشه :

byte[] codeOpenCashDrawer = new byte[] { 0x1B, 0x70, 0x00, 0x19, 0xFF };


نحوه ارسال این بایت ها به پرینتر هم که در این تاپیک و یک پست خاص توسط کاربر گرامی NasimBamdad (https://barnamenevis.org/member.php?211253-NasimBamdad) مشخص شده :

چه طوری باید درب صندوق فروشگاهی رو باز کرد
(https://barnamenevis.org/showthread.php?558877-%DA%86%D9%87-%D8%B7%D9%88%D8%B1%DB%8C-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1%D8%A8-%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87%DB%8C-%D8%B1%D9%88-%D8%A8%D8%A7%D8%B2-%DA%A9%D8%B1%D8%AF&p=2426134&viewfull=1#post2426134)
شما صرفا باید اون سطر تعریف codeOpenCashDrawer در کد رو با همین سطر کد بالا تعویض کنید، چون بایت هایی که در اون تاپیک به پرینتر ارسال شده با بایت های فرمان شما متفاوته.
اگر خواستید می توانید if رو هم درحذف کنید تا نیازی به تایید در پنجره پرینتر نباشه.

NasimBamdad
سه شنبه 24 دی 1398, 22:03 عصر
اون بایت های فرمان که شما باید ارسال کنید رو که خودتون دارید :


1B;70;00;19;ff;

تعریف آرایه اش اینطوری میشه :

byte[] codeOpenCashDrawer = new byte[] { 0x1B, 0x70, 0x00, 0x19, 0xFF };


نحوه ارسال این بایت ها به پرینتر هم که در این تاپیک و یک پست خاص توسط کاربر گرامی NasimBamdad (https://barnamenevis.org/member.php?211253-NasimBamdad) مشخص شده :

چه طوری باید درب صندوق فروشگاهی رو باز کرد
(https://barnamenevis.org/showthread.php?558877-%DA%86%D9%87-%D8%B7%D9%88%D8%B1%DB%8C-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1%D8%A8-%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87%DB%8C-%D8%B1%D9%88-%D8%A8%D8%A7%D8%B2-%DA%A9%D8%B1%D8%AF&p=2426134&viewfull=1#post2426134)
شما صرفا باید اون سطر تعریف codeOpenCashDrawer در کد رو با همین سطر کد بالا تعویض کنید، چون بایت هایی که در اون تاپیک به پرینتر ارسال شده با بایت های فرمان شما متفاوته.
اگر خواستید می توانید if رو هم درحذف کنید تا نیازی به تایید در پنجره پرینتر نباشه.

منونم و سپاس ، در واقع اون IF رو بنده هم حذف کردم ، ولی خوب برای درک بهتر گذاشتمش.

به نظر شما چه طوری میشه بسته شدن درب رو فهمید؟ اینکه بفهمیم درب صندوق بسته شده یا نه!؟

the king
سه شنبه 24 دی 1398, 23:03 عصر
منونم و سپاس ، در واقع اون IF رو بنده هم حذف کردم ، ولی خوب برای درک بهتر گذاشتمش.

به نظر شما چه طوری میشه بسته شدن درب رو فهمید؟ اینکه بفهمیم درب صندوق بسته شده یا نه!؟
من سابقه کار با این صندوق ها رو ندارم، به همین جهت خودم شخصا نمی تونم کدی رو رویشون امتحان کنم و به جواب برسم.

اما میدونم که در کتابخانه Microsoft.PointOfService (https://docs.microsoft.com/en-us/previous-versions/windows/embedded/dn639140(v=winembedded.4)) مایکروسافت برای CashDrawer مشخصه DrawerOpened (https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms858024(v%3Dwinembedded.4)) وجود داره که میتونه وضعیت صندوق هایی که اعلام وضعیت رو ساپورت میکنند برگردونه.

جدا از اون، بررسی مشخصات فیش پرینتر با WMI خیلی ساده است، ولی بعید میدونم در مشخصات WMI برای فیش پرینتر چیزی مربوط به صندوق و وضعیتش پیدا بشه، چون قاعدتا سخت افزارهای مستقلی هستند و دلیلی نداره وضعیت صندوق در مشخصات فیش پرینتر لیست بشه.
غیر از این، در همون Print Spooler API که با DllImport("winspool.Drv") بهش رجوع کردید و از تابع WritePrinter اش برای ارسال بایت های فرمان به پرینتر استفاده کردید، تابع ReadPrinter (https://docs.microsoft.com/en-us/windows/win32/printdocs/readprinter) ای وجود داره که بتونه از پرینتر بایت های وضعیت رو بخونه.
یعنی اول کد فرمانی به پرینتر ارسال کنیم که وضعیت صندوق رو اعلام کنه و بعد با ReadPrinter اون وضعیت رو دریافت کنیم. ولی نه کد فرمان مناسبی که وضعیت صندوق رو اعلام می کنه میدونیم که طبعا برای هر نوع صندوقی می تونه متفاوت باشه و نه مطمئن هستیم که پرینتر همچین واسطه شدنی رو پشتیبانی می کنه.

NasimBamdad
چهارشنبه 25 دی 1398, 10:30 صبح
ببنید چیزی که بنده متوجه اش شدم صندوق ها 2 نوع هستند
1- مستقل و با کابل USB یا سریال مستقیم به کامپیوتر وصل میشوند و با POS ماکروسافت خیلی راحت میشه باهاشون کارکرد
2- غیر مستقل و با RJ12 ، از طریق یک واسط مثل فیش پرینتر فرمانی برای فعال کردن برق و باز کردن درب صندوق استفاده میشوند ( باید سعی کنم ببینم میشه با اون ReadPrinter میشه این کار کرد یا نه)