तो मेरे पास एक अज्ञानी (शायद?) प्रश्न है। मैं पहली बार एक सीरियल डिवाइस पर लिखने के साथ काम कर रहा हूं। मेरे पास एक फ्रेम है [12, 0, 0, 0, 0, 0, 0, 0, 7, 0, एक्स, वाई] कि मुझे भेजने की जरूरत है। एक्स और वाई चेकसम मूल्य हैं। पाइसरियल मॉड्यूल का उपयोग करने में मेरी समझ यह है कि मुझे इस फ्रेम को स्ट्रिंग प्रस्तुति में बदलने की आवश्यकता है। ठीक है यह ठीक है, लेकिन मैं क्या प्रारूप बातों में होने की अपेक्षा की जाती है। मैंपायथन में हेक्स से दशमलव
a = [12, 0, 0, 0, 0, 0, 0, 0, 7, 0, X, Y]
send = "".join(chr(t) for t in a)
कर की कोशिश की पर संदेह में हूँ लेकिन मेरी भ्रम तथ्य यह है कि एक्स और वाई, जब chr का उपयोग कर, अजीब तार में बदलना (से आता है अपने ascii प्रतिनिधित्व मानते हुए)। उदाहरण के लिए यदि एक्स 36 है, तो chr (x) '\ x24' के बजाय '$' है। क्या कोई तरीका है कि मैं एसीआईआई कोड के बजाय '\ xnn' मान का प्रतिनिधित्व करने वाली स्ट्रिंग प्राप्त कर सकता हूं? मुझे भ्रमित करने वाला यह है कि 12 और 7 सही ढंग से '\ x0b' और '\ x07' में परिवर्तित हो जाते हैं। क्या मैं कुछ भूल रहा हूँ?
अद्यतन:
तो यह हो सकता है कि मैं काफी समझ नहीं कर रहा हूँ कैसे धारावाहिक लेखन की जा रही है या क्या मेरे डिवाइस मुझे उम्मीद है। यह मेरी सी कोड के एक हिस्से की जाती है कि काम कर रहा है:
fd=open("/dev/ttyS2",O_RDWR|O_NDELAY);
char buff_out[20]
//Next line is psuedo
for i in buff_out print("%x ",buff_out[i]); // prints b 0 0 0 0 0 0 0 9 b3 36
write(fd,buff_out,11);
sleep()
read(fd,buff_in,size);
for i in buff_in print("%x ",buff_in[i]); // prints the correct frame that I'm expecting
पायथन:
frame = [11, 0, 0, 0, 0, 0, 0, 0, 9] + [crc1, crc1]
senddata = "".join(chr(x) for x in frame)
IEC = serial.Serial(port='/dev/ttyS2', baudrate=1200, timeout=0)
IEC.send(senddata)
IEC.read(18) # number of bytes to read doesn't matter, it's always 0
मैं इस बारे में सही रास्ते पर जा रहा हूँ? जाहिर है आप बिल्कुल बता नहीं सकते क्योंकि यह डिवाइस विशिष्ट है और मैं वास्तव में बहुत अधिक विशिष्टताओं को नहीं दे सकता। लेकिन क्या सही प्रारूप है कि serial.send() डेटा की अपेक्षा करता है?
अजगर प्रलेखन से, chr() नंबर पर आप रिटर्न इसे एक असीसी चरित्र के रूप में दर्ज करें। एएससीआई में 12 और 7 घंटी और फॉर्म फीड 'अक्षर' हैं, जो पाइथन मुद्रित करने में सक्षम नहीं हो सकते हैं (निश्चित रूप से नहीं जानते)। तो यह उन लोगों के लिए हेक्स प्रतिनिधित्व के लिए डिफ़ॉल्ट हो सकता है क्योंकि वे अवांछित हैं। – Joel
12 \ x0c होना चाहिए, \ x0b नहीं ... – EOL
क्षमा करें मेरा मतलब \ x0c था। मेरे पास एक और फ्रेम है जो 11 – Falmarri