سؤال

أنا أبحث عن طريقة للتواصل مع منفذ COM التسلسلي RS232 على نظام التشغيل Windows.لقد وجدت حلين على النت واحد وهو ليس مجانيًا تمامًا (يقدم تأخيرات متعمدة في الوظيفة) و آخر مع قدرة محدودة على نظام التشغيل Windows.يمكن للأخير الكتابة فقط إلى منفذ COM على نظام التشغيل Windows، وليس القراءة.

لا يمكنني إلقاء نظرة على كود الحل الأول لأنه تم تجميعه في ملف .dll (هذا منطقي، وإلا يمكن للأشخاص تعديل التأخير وعدم شرائه...) ويبدو أن الحل الثاني يستخدم fopen() فقط لفتح المنفذ وبعد ذلك fwrite() إليه للكتابة، تمامًا كما يفعل الشخص مع الدفق.ولكن من الواضح أن الخوف لا يُرجع شيئًا.

أعلم أنه ممكن لأن الحل الأول فعل ذلك، على الرغم من أنه يتطلب من Apache استخدام وحدة php-cgi بدلاً من php5module.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

كل الحلول المذكورة أعلاه إما غير فعالة أو تتطلب الكثير من العمل.

يمكنك فقط استخدام مكتبة PHP-DIO (dio_fcntl، dio_open، dio_read، dio_write، dio_seek، ...).إنه أيضًا في إدخال دليل PHP لـ DIO:

حزمة PECL هذه غير متاحة بشكل افتراضي.للحصول عليه لنظام التشغيل Windows إذا كان لديك PHP 5.2.x أكبر من 5.2.6، يمكنك تنزيله كجزء من ملف ZIP:

تم العثور على كلا الرابطين في http://www.deveblog.com/index.php/download-pecl-extensions-for-windows/

هنا هو البناء من Linux, ، فقط احصل عليه وقم بإجراء تثبيت phpize/configure/make/make.

لا أعرف ما إذا كان ينبغي استخدامه في جلسة Apache، ولكن قم بذلك.

نصائح أخرى

وأسهل طريقة لمعالجة هذا سيكون لكتابة برنامج بلغة أخرى (مثل C ++) ومن ثم تنفيذه من هاتفك النصي فب مع system(). القيام بالاتصالات I / O في C ++ تافهة.

وهذا يفترض أن يكون لديك ما يكفي من الوصول إلى الملقم لتكوينه للسماح للتنفيذ ليتم تشغيلها بواسطة PHP، الخ.

وسيلة ممكنة آخر سيكون لاستخدام API Win32 ومن خلال شيء من هذا القبيل w32api_register_function() أو <وأ href = "http://pecl.php.net/package/ffi" يختلط = "نوفولو noreferrer"> إسنا ثم استخدم <لأ href = "http://msdn.microsoft.com/en-us/library /ms810467.aspx "يختلط =" نوفولو noreferrer "> الاتصالات التسلسلية يدعو لحملها على العمل ضمن نظام التشغيل Windows.

وكان لي نفس المشكلة ويعتبر بالفعل من كتابة تقريري تمديد فب الخاصة عندما جئت عبر هذا الحل الذي يتمتع بشعبية بين المطورين اردوينو - 'serproxy "(وجدت أنه في كثير من الأماكن، أي <أ href = على" HTTP: // www.lspace.nildram.co.uk/freeware.html "يختلط =" نوفولو "> http://www.lspace.nildram.co.uk/freeware.html ) يضع كومة برنامج التعاون الفني من / المنافذ التسلسلية وسمح لي أن استخدام وظائف مأخذ فب على التواصل معها.

وتحتاج إلى إعداد منفذ COM باستخدام أمر مثل DOS.

وعلى سبيل المثال، السطر التالي تنفيذ الأمر من خلال فب:

$output = `mode COM1: BAUD=115200 PARITY=N data=8 stop=1 XON=off TO=on`;

لعرض نتائج يمكنك استخدام:

echo "$output"; 

وإنشاء معرف الموارد:

$fp = fopen('COM1', 'r+');

if (!$fp)
{
      echo "Port not accessible";
}
else
{
     echo "Port COM1 opened successfully";
}

والكتابة إلى المنفذ:

$writtenBytes = fputs($fp, "Hello");

echo"Bytes written to port: $writtenBytes";

وقراءة من المنفذ:

$buffer = fgets($fp);

echo "Read from buffer: $buffer";

وربما شخص يمكن أن تساعدني مع مشكلة fgets. مداخن هناك لمدة دقيقة واحدة بالضبط إذا TO=on، أو أكوام هناك إلى الأبد إذا TO=off. ويبدو أن خيار "MODE COM" ولذلك ربما يكون خبير DOS يمكن أن تساعد.

وربما بدلا من fgets، ينبغي للمرء أن استخدام fgetc، منذ القبض fgets من خلال لnewline، في حين fgetc يلتقط حرف واحد. إذا لم يتم اجه خط جديد، قد منع حتى يكون هناك واحد أو حتى يتم مسح المخزن المؤقت. قد يكون تأخير دقيقة واحدة نوافذ عازلة التنظيف على فاصل زمني.

وثمة خيار آخر هو استخدام كائن عبر ActiveX على النوافذ. وهناك العديد من الأشياء مسلسل معظمها تجارية لCOM على النوافذ. يمكنك أيضا فضح كائن صافي أساس وتسجيله للاستخدام COM كذلك. بالطبع، هذا لا نفترض لديك السيطرة على الخادم لتسجيل عنصر تحكم COM، وكنت في حاجة الى واجهة تسلسلية.

وثمة مسألة أخرى هي التنازع على الموارد إذا كان هذا هو للاستخدام عبر الويب. إذا كان هذا هو لطابعة المسلسل، وعلى سبيل المثال، ثم مدير قائمة انتظار الطباعة سيكون الخيار الأفضل خلال الاتصال المباشر.

إذا كنت ترغب في التعامل مع الرسائل القصيرة باستخدام منفذ كوم ثم هنا هو الأكثر شهرة <لأ href = "http://www.phpclasses.org/package/3679-PHP-Communicate-with-a-serial-port. أتش تي أم أل "يختلط =" نوفولو noreferrer "> فب مسلسل الدرجة الاتصال عن طريق ريمي سانشيز باستخدام جوجل نموذج التعليمات البرمجية . هنا هو موضوع حيث يشمل هذا الموضوع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top