# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > مباحث عمومی کار با سخت افزارها، سنسورها و لوازم جانبی >  برنامه استفاده شده داخل دستگاههای POS با چه زبانی نوشته شده؟

## idocsidocs

برنامه استفاده شده داخل دستگاههای POS (دستگاههای کارتخونی که توی مغازه ها استفاده می شه) با چه زبانی نوشته شده؟

----------


## idocsidocs

دوستان در این مورد نظری ندارن؟

----------


## Felony

بستگی به دستگاه Pos داره که برای کدوم بانک باشه ، اکثرا با ++C .

----------


## idocsidocs

> بستگی به دستگاه Pos داره که برای کدوم بانک باشه ، اکثرا با ++C .


من می خوام یه زبان یاد بگیرم که برای چنین دستگاههایی بتونم برنامه بنویسم. مطمئنید که با ++C نوشته شده؟

اگه بخوایم از اول شروع کنیم به نوشتن برنامه این دستگاهها، بنظرتون نوشتن برنامه این دستگاهها چقدر زمان بر هست و آیا یه نفره هم می شه این نرم افزار رو نوشت؟

----------


## علیرضا حسن زاده

نومنه برنامه ای که من دیدم و تو بعضی از سازمانهای دولتی استفاده میشه برنامه خود POS رو نه ولی رابطش با کامپیوتر رو با زبان VB و #C نوشتن که برنامه VB یه OCX هست برای ارتباط بادستگاه و برنامه #C هم رابط کاربری که اطلاعات رو برای دستگاه ارسال یا از اون دریافت می کنه فایل های کامپایل شده دستگاه رو هم دارم ولی تا حالا فرصت بررسی اونها رو نداشتم

----------


## idocsidocs

> نومنه برنامه ای که من دیدم و تو بعضی از سازمانهای دولتی استفاده  میشه برنامه خود POS رو نه ولی رابطش با کامپیوتر رو با زبان VB و #C نوشتن  که برنامه VB یه OCX هست برای ارتباط بادستگاه و برنامه #C هم رابط کاربری  که اطلاعات رو برای دستگاه ارسال یا از اون دریافت می کنه فایل های  کامپایل شده دستگاه رو هم دارم ولی تا حالا فرصت بررسی اونها رو نداشتم


تا حالا چمدبار این سوال رو پرسیدم و هربار یه جواب متفاوت گرفتم. بالاخره برنامه این دستگاه با چه زبانی نوشته شده؟

سوال دوم:  اگه بخوایم یک نفره از اول شروع کنیم به نوشتن برنامه این دستگاهها، بنظرتون نوشتن  برنامه این دستگاهها چقدر زمان بر هست و آیا یه نفره هم می شه این نرم  افزار رو نوشت؟

----------


## علیرضا حسن زاده

یک سوال از شما دارم: اینکه چرا می خواین برای سخت افزاری که هیچ آشنایی با اون ندارید برنامه بنویسید؟(البته بد برداشت نکنید منظورم از اینکه هیچ اطلاعی از سخت افزارش ندارید اینکه ساختارش داخلیش رو به احتمال زیاد نمی دونید چطوریه؟)
حالا اگه شما معماری داخلی دستگاه رو برفرض بدونید و دیتاشیت اون رو هم داشته باشد اگه برنامه نویسی C و اسمبلی تون خوب باشه شاید بتونید به تنهایی کار کنید ولی اینم مدنظرتون باشه این دستگاه ها معمولا یه چیز انحصاری هستن و سخته که از کار کردشون بدون اطلاعات درست سر درآورد
یه جایی می خوندم (فکر کنم مدیرعامل همون شرکت  کیش تجارت یا همچین شرکتی که برای اولین بار دستگاه های POS رو در ایران راه اندازی کردن) که مدیرعامل شرکت از نبود دانش کافی شون درباره دستگاه POS و ضررهایی که متقبل شد می گفت و موضوع از این قرار بود که برای هر بار Update برنامه دستگاه که با تغییر برنامه نیاز به انجام اون بود برای هر دستگاه یک نفر باید می رفت و دستگاه رو Update می کرد حالا حساب کنید چقدر هزینه می تونست برای یه شرکت داشته باشه فقط همین نبود دانش کافی جالب هم اینکه اون زمان همین تکنولوژی یا ماژول و ... هرچی که اسمشو بزارین تو دستگاه های دیگر تولید همون شرکتی که دستگاه ها رو ازش خریده بودن موجود بود و می تونست به صورت اتوماتیک از طریق همون شبکه Update بشه ولی نبود دانش کافی باز هم مشکل ساز شده بود و مجبور به تعویض تمام دستگاه ها شدن و الان اگه به دستگاه ها توجه کنید بعضی اوقات خود بخود مقداری از کاغذ داخل چاپگرش رو بیرون میده و یه عبارت های انگلیسی مینویسه که مربوط میشه به ارتباطش با مرکز و اطلاعاتی که دریافت میکنه

----------


## idocsidocs

> یک سوال از شما دارم: اینکه چرا می خواین برای سخت افزاری که هیچ آشنایی با  اون ندارید برنامه بنویسید؟(البته بد برداشت نکنید منظورم از اینکه هیچ  اطلاعی از سخت افزارش ندارید اینکه ساختارش داخلیش رو به احتمال زیاد نمی  دونید چطوریه؟)


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

می خواستم ببینم که تکنولوژی دستگاههای POS چطوری هست و با چه زبانی نوشته شده و اگر سخت افزار این دستگاهها آماده باشه، برنامه نویسی برای انجام عملیات بانکی به چه صورت هست؟

----------


## farzadsw

دستگاه های Pos یا سیستم عامل ندارند (برای ارزانتر شدن دستگاه و سخت افزار) که در این صورت شما باید با سخت افزار آشنایی کامل داشته باشید . زبان تو این حالت اغلب C هست . برنامه نویسی این جور دستگاه ها مشابه میکروکنترلر ها هست.
نوع دیگه این دستگاه ها (که پردازنده قوی تری دارند) سیستم عامل لینوکس دارند و برنامه ها هم اغلب با C و یا C++‎ نوشته میشه.
یعنی در کل از فریم ورکهایی مثل دات نت استفاده نمیشه(تا اونجایی که من میدونم)

----------


## hamid-nic

> دستگاه های Pos یا سیستم عامل ندارند (برای ارزانتر شدن دستگاه و سخت  افزار) که در این صورت شما باید با سخت افزار آشنایی کامل داشته باشید .  زبان تو این حالت اغلب C هست . برنامه نویسی این جور دستگاه ها مشابه  میکروکنترلر ها هست.


با این قسمت از مطلبتون کاملا موافقم.




> نوع دیگه این دستگاه ها (که پردازنده قوی تری دارند) سیستم عامل لینوکس دارند و برنامه ها هم اغلب با C و یا C++‎‎ نوشته میشه.
> یعنی در کل از فریم ورکهایی مثل دات نت استفاده نمیشه(تا اونجایی که من میدونم)


اما با این یکی نه چون بکارگیری سیستم عاملی مثل لینوکس در یک دستگاه pos عملی نیست . 
در چنین دستگاهی اغلب با برنامه نویسی های میکروکنترلر ها و ارتباطات سخت افزاری و نرم افزاری (طبق الگوی و برنامه ریزی های طراحی شده) بهره می برند .
معمولاً هم با استفاده از زبان های سطح پایین که با سخت افزار ارتباط ملموسی داشته باشند مثل اسمبلی و C و یا ++C بکار گرفته می شوند .
موفق باشید .

----------


## ghasem.fattahpour

با احترام 
با اجازه از مدیریت بخش آقا فرزاد که واقعا تخصصی ترین نظر رو دادن. یک بار  برای همیشه لازم می دونم که این بحث رو انجام بدم و به اتمام برسونم.
برنامه نویسی pos به طور کلی با c انجام میشه مگر در موارد خیلی خاص. pos   یا دارای بورد آرم هست یا دارای فاقد اون. به طور کلی اگر دارای بورد آرم  باشه دارای سیستم عامل لینوکس هست که به راحتی با ترمینال یا راه های دیگه  میشه به اون دسترسی داشت مانند linkflex. هر پوز دارای یک sdk است که می  تونه برنامه شما رو کامپایل کنه و خروجی برای download روی پوز بده. هر پوز  دارای sdk منحصر به فرد هست. بعضی از پوز ها هم مانند ingenico دارای IDE  هستند. اصولا باید یک نفر باید بشینه و از ابتدا تا انتها برنامه را  بنویسه. چگونه و با چه استانداردی؟ (کمی جستجو لطفا)
 آقای *hamid-nic  میفرمایند* :  "بکارگیری سیستم عاملی مثل لینوکس در یک دستگاه pos عملی نیست." خودتان اطلاعات فنی برخی از پوزهارا مشاهده بفرمایید »
www.linkflex.co.kr/
http://www.verifone.com/

یا جناب حسن زاده می فرمایند : 
"جایی می خوندم (فکر کنم مدیرعامل همون شرکت  کیش تجارت یا همچین شرکتی که  برای اولین بار دستگاه های POS رو در ایران راه اندازی کردن) که مدیرعامل  شرکت از نبود دانش کافی شون درباره دستگاه POS و ضررهایی که متقبل شد می  گفت و موضوع از این قرار بود که برای هر بار Update برنامه دستگاه که با  تغییر برنامه نیاز به انجام اون بود برای هر دستگاه یک نفر باید می رفت و  دستگاه رو Update می کرد حالا حساب کنید چقدر هزینه می تونست برای یه شرکت  داشته باشه فقط همین نبود دانش کافی جالب هم اینکه اون زمان همین تکنولوژی  یا ماژول و ... هرچی که اسمشو بزارین تو دستگاه های دیگر تولید همون شرکتی  که دستگاه ها رو ازش خریده بودن موجود بود و می تونست به صورت اتوماتیک از  طریق همون شبکه Update بشه ولی نبود دانش کافی باز هم مشکل ساز شده بود و  مجبور به تعویض تمام دستگاه ها شدن و الان اگه به دستگاه ها توجه کنید بعضی  اوقات خود بخود مقداری از کاغذ داخل چاپگرش رو بیرون میده و یه عبارت های  انگلیسی مینویسه که مربوط میشه به ارتباطش با مرکز و اطلاعاتی که دریافت  میکنه."

جهت اطلاع شما اکثر برنامه نویسان pos در ایران بسیار خبره تر از همکیشان  خودشون توی خارج از ایران هستند. (یک شرکت داخلی زمانی که دید ingenico  5110 دارای rfid نیست خودش اون رو  به پوز اضافه کرد باور ندارید برید  دانشگاه تهران و از سلف اونجا بازدید کنید!!!! ).این بحث remote pos، بحث  TMS هست که نه تنها در ایران بلکه در تمام دنیا به صورت گسترده قابل پیاده  سازی نیست.

در آخر فقط خواهش می کنم از تمامی دوستان در این موارد کمی مطالعه کنند. دلیل نداره اگر از چیزی خبر نداریم در مورد اون نظر بدیم.

----------


## idocsidocs

دوستان واقعا از بحثهای خوبتون ممنون.

توی این تاپک از زبانهای C و ++C صحبت شد.

هرچند این دو زبان شبیه به هم هستن ولی لطفا دقیقا بگید که چه زبانی باید بکار بره؟

----------


## علیرضا حسن زاده

> جهت اطلاع شما اکثر برنامه نویسان pos در ایران بسیار خبره تر از همکیشان خودشون توی خارج از ایران هستند. (یک شرکت داخلی زمانی که دید ingenico 5110 دارای rfid نیست خودش اون رو به پوز اضافه کرد باور ندارید برید دانشگاه تهران و از سلف اونجا بازدید کنید!!!! )


سیستم ingenico با IDE ارائه شده و تغییر دادن برنامش برای کسایی که واردن کار زیاد سختی نیست در ضمن من به نبوغ برنامه نویسای ایرانی کاری نداشتم و صد در صد هم از دیگر برنامه نویسا بهترن(چون خودم هم برنامه نویسم) :قلب: 



> ین بحث remote pos، بحث TMS هست که نه تنها در ایران بلکه در تمام دنیا به صورت گسترده قابل پیاده سازی نیست.


برای این قسمت از پست تون هم منبعی ندیدم که قابل پیاده سازی به صورت گسترده نباشه ولی ظاهرا برای برخی سازمانها پیاده سازی شده و کار میکنه اما فعلا مشکلاتی دارن مثلا تو دستگاه های SAGEM مشکل پرشدن حافظه وجود داره که باید برای پاک کردنش یه نفر از قسمت پشتیبانی برای تنظیم دستگاه محل نصب دستگاه مراجعه کنه

و صد البته که دستگاه های جدید امکانات بیشتری دارن مثل Wifi،GPRS، و... که پیاده سازی اونها بدون سیستم عامل کار شاقی میتونه باشه

----------


## ghasem.fattahpour

واقعا TMS چه ربطی به خالی کردن حافظه داره؟ غیر از چک کردن وصل بودن pos هیچ کاری تقریبا تا به این لحظه به صورت گسترده با اون پیاده سازی نشده است. خواهش می کنم اسم سازمان رو صریح ببرید!! 
و یک سوال TMS یعنی چی؟ وظیفه ای که داره چیه؟ چگونه پیاده سازی میشه؟ حالا شما میگید که جایی پیاده سازی شده!!!!!؟؟؟

----------


## علیرضا حسن زاده

> واقعا TMS چه ربطی به خالی کردن حافظه داره؟


من جایی از متن پستم به TMS اشاره نکردم!؟
TMS هم تا جایی که می دونم ربطی به موردی که اشاره کردم نداره

اگه شما یه دستگاه POS داشته باشی فردا بیای ببینی که مثلا به گزینه هایی که دستگاهت داشتی یه گزینه دیگه مثل کنترل موجودی اضافه شده انوقت شما این چطوری به TMS ربط میدی؟

----------


## joker

با توجه به اینکه در این دستگاهها یک میکروکنترلر هست ، شما با هر زبانی که برای میکروکنترلر موجود در دستگاه ساخته شده میتونید برنامه بنویسید
فرضا اگه یه avr توش گذاشته باشند *شما با زبانهایی غیر از Cمثل assembly یا pascal یا basic  هم به علت داشتن کامپایلرهایی مربوطه میتونید برای دستگاهتون برنامه بنویسید*
اون چیزی که میبینید میان روی کامپیوتر به دستگاه وصل میشن ، در واقع به یک رابط استاندارد مثل پورت سریال وصل میشن و با فرمت استانداردی که تعریف کردند باهاش رابطه برقرار میکنن و دیتا میدن و میگیرن.
ولی اینکه بگیم محدود به سینتکس زبان سی هستند ، نخیر اینطور نیست. حتی بدون برنامه نویسی هم میتونید برای یک میکروکنترلر ، یک برنامه داشته باشید مثلا FlowCode  اومده به صورت گرافیکی و استانداردهای الگوریتم و فلورچارت خودمون یک محیط ویژوال تهیه کرده که خروجیش یک فایل hex هست که میکروکنترلر به راحتی باهاش کار میکنه

پیوست : زبانهای دیگه غیر از سی بعضی مواقع حافظه و یا باراضافه روی سیستم اعمال میکنن ، بنابراین برای موارد حساس ، سعی میشه از سی و در موارد خیلی حساستر و دقیقتر مستقیم از اسمیلی استفاده کنند

----------


## idocsidocs

> فرضا اگه یه avr توش گذاشته باشند *شما با زبانهایی غیر از Cمثل assembly  یا pascal یا basic  هم به علت داشتن کامپایلرهایی مربوطه میتونید برای  دستگاهتون برنامه بنویسید*


من فقط می تونم یه زبان برنامه نویسی یاد بگیرم. با زبان C می تونم برای این دستگاه برنامه بنویسم و نگارن اجرا نشدن کدها نباشم؟

----------


## joker

بله
دستورزبان سی هست ولی فکر نکنید که کامپایلرش همون ویژوال استدیو میکروسافته 
کامپایلرها و IDE های مخصوص به خودشون را دارند
مثلا CodeVision را ببین
مثلا IAR را ببین
مثلا WinAVR را ببین 
مثلا GCC را ببین ( قبلیه با همین موتور کار میکنه )
اسم هرکدوم را توی گوگل بزنی سایت رسمیشون برای دانلود را میاره ، آموزشهای فارسی هم برای همه شون هست.

----------


## firststep

چقدر مطالب به بیراهه رفت تا اونجاکه یادمه درپست اول کاربر idocsidocs  دنبال راهکارهای ارتباط یا نوشتن برنامه دستگاه pos بود(البته ممنونم از نوشته هاتون اطلاعات بدی توش نبود)
 دوست عزیز این دستگاه های متداول ایران بیشتر می خوره که بدون سیتم عامل و با همون میکرو راهندازی بشن 
همونجور که می دونیم کاره اصلی و نهایی همه اونها ارسال و دریافت یک سری اطلاعاته به وسیله خطوط تلفنه ولی ممکنه هر نوع انها به شکلی ساخته شده باشن خوب حالا با یک ماژول های خاص که حالا میکو یکیشون می تونه از هر خانواده ای باشه(avr,pic,....) که هر کدوم از اینها یک سری ساختارها داره به خاطره انعطاف و همه گیر بودن زبان c اصولا همه پشتیبانشون میکنن اما این به این معنا نیشت که  مثلاً حالا این دستگاه کامپایلری مثل مثلاً turbo و یا borland داشته باشه نه هر کردم از این ای سی ها یکسری ساختارها داره ویکسری مشخصات که باید با اونها اشنا بشین و بعد برای انها با  c بنویسین(حتی توی وین نمی تونین اجراش کنین) و بعد با کامپایلهای مخصوص اون رو تبدیل به hex کنین  من فکر میکنم اول از همه اگه شما بخواین بر روی همچین دستگاهی کار کنین باید با اجزا و دیتاشیت اون اشنا بشین که چگونه همچین دستگاهی کار می کنه و بعد با استانداردها و بعد دیگه الگوریتم کار مشخص می شه 

درباره زبان هم یک باره دیگه یگم که زبانهای متفاوتی مثلی bascom و c و ... برای این میکرو ها معروفاً و الته خروجی تمامه انها hex است وبعد این فایل hex بر روی میکرو با دستگاه پروگرامر (که البته گران هم نیست) پروگرام میشود .

----------


## kiosksoft

دوست عزیز




> تا حالا چمدبار این سوال رو پرسیدم و هربار یه جواب متفاوت گرفتم. بالاخره برنامه این دستگاه با چه زبانی نوشته شده؟


 زبان برنامه نوسی این دستگاه ها همان زبان برنامه نوسی میکروکنترل هاست (avr,pic,arm).




> من می خوام یه زبان یاد بگیرم که برای چنین دستگاههایی بتونم برنامه بنویسم. مطمئنید که با ++C نوشته شده؟


 پس باید برنامه نوسی یکی از میکروکنترل ها رو یاد بگیری.




> اگه بخوایم از اول شروع کنیم به نوشتن برنامه این دستگاهها، بنظرتون نوشتن برنامه این دستگاهها چقدر زمان بر هست و آیا یه نفره هم می شه این نرم افزار رو نوشت؟


 به بک مهندس الکترونیک و Manual و Reference دستگاه جهت راه اندازی نیاز هست ، شاید نوشتن برنامه زمان کمی بخواد اما بررسی ساختار دستگاه به همین سادگی نیست.




> نومنه برنامه ای که من دیدم و تو بعضی از سازمانهای دولتی استفاده میشه برنامه خود POS رو نه ولی رابطش با کامپیوتر رو با زبان VB و #C نوشتن که برنامه VB یه OCX هست برای ارتباط بادستگاه و برنامه #C هم رابط کاربری که اطلاعات رو برای دستگاه ارسال یا از اون دریافت می کنه فایل های کامپایل شده دستگاه رو هم دارم ولی تا حالا فرصت بررسی اونها رو نداشتم


این موضوع در مورد دستگاه POS های مبتنی بر PC صدق میکند. POS ها میتوانند مستقل از PC باشند مثل فروشگاه ها یا میتوانند مبتنی بر کامپیوتر کار کنند که همان دستگاه های داخل شعبات بانکها هستند. 




> اما با این یکی نه چون بکارگیری سیستم عاملی مثل لینوکس در یک دستگاه pos عملی نیست .





> دستگاه های Pos یا سیستم عامل ندارند (برای ارزانتر شدن دستگاه و سخت افزار) که در این صورت شما باید با سخت افزار آشنایی کامل داشته باشید .


 با آمدن میکروکنترل های ARM امکان نصب سیستم عامل بر روی POS ها فراهم شده است.




> من کارم طراحی وب هست. با پی اچ پی برنامه می نویسم. توی فروشگاههای تحت وب می تونیم به بانکهای مختلف وصل بشیم، پول اجناس خریداری شده رو پرداخت کنیم. این کار خیلی ساده انجام می شه و تقریبا کار همین دستگاههای POS رو انجام می ده و در اصل این دو یکی هستن.


شاید هدف کلی باشد اما نحوه عملکرد ، ارتباط ، ارسال ، دریافت اطلاعات کاملا متفاوت میباشد.

*... و اما نکته مهمتر اینه که برنامه نوسی این دستگاه ها براحتی امکان پذیره و هر کس بخواهد میتواند در زمینه فعالت داشته باشد . در حال حاضر Package های آماده هستش که فقط دوستان زحمت فارسی سازی آن را میکشند. نکته مهمتر، سخت ترین از همه اینه که باید با CommandReference شبکه بانکی شتاب و مقررات سرور بانک مرکزی آشنایی داشته باشید.*

----------


## mohandese_javan

سلام
بحث رو دیدم راجع به برنامه نویسی روی یه دستگاه جانبی هم صحبت کرده بودین
کسی کار کرده این موضوع رو؟
چطور میشه برای یه دستگاه جانبی که با پورت کام به سیستم وصله برنامه نوشت؟
بیشتر منظورم اسمبلی هستش
ما یه دستگاه جانبی داریم که توش یه حافظه داره مثلا یه میکروکنترلر توشه که تو دفترچه راهنما آدرس خانه های حافظه رو هم داده
حالا چطوری با اسمبلی به این خانه ها دسترسی پیدا کنیم؟خانه های حافظه اون دستگاه! نه حافظه خود سیستم
ممنون

----------


## lilipoot0

من پشتیبان دستگاههای پوز هستم/
فایلی رو میخوام جهت مشاهده و بررسی قرار بدم 
امیدوارم مفید واقع بشه

ولی چون خیلی با فرومها کار نکردم و اشنایی ندارم نمیدونم از کجا باید لینک دانلود بذارم
یکی راهنمایی کنه لطفا

----------


## nasr

سلام دوستان
من یه پروژه دارم میخوام برون سپاری کنم
پروژه ارتباط با دستگاههای پوز (البته غیر بانکی)
دستگاههای Ingenico 5100 
اگه کسی در این زمینه تخصص داره بفرمایید تا توضیحات کامل را ارسال کنم
تشکر

----------


## nasr

سلام
من تعدادی دستگاه کارتخوان Ingenico دارم
میخوام اطلاعاتش را تغییر بدم
مثلا لوگو، و اینکه اطلاعات را بفرستم روی سرور خودم

کسی میتونه کمک کنه؟
ممنون

----------


## rezadaryan

سلام من نیاز دارم برنامه ای رو که با زبان C#‎ نوشتم به دستگاه pos متصل کنم و نرم افزار مبلغ رو بفرسته و پس از ارسال مبلغ یه مقداری به حساب نرم افزار و مابقی به حساب صاحب pos بره . چطور میشه این کار رو انجام داد

----------

