回覆列表
  • 1 # 使用者3769450006940

    “商業軟體”串列埠傳送和接收資料,傳送的只能是字串型的程式碼,裝置要收十六進位制程式碼答案:1、分析傳送字串型,實際是一個一個字元傳送的,裝置也是一個一個十六進位制程式碼接受的。應此,如果裝置端要接收“55 01 01 02 01”這樣5個位元組的十六進位制程式碼,軟體端傳送可以這樣,例如傳送字串變數是buff:char *buff[10];buff[0]=0x55;buff[1]=0x01;buff[2]=0x01;buff[3]=0x02;buff[4]=0x01;不幸的是如果要傳送“55 01 01 02 01 00 00 5a”這樣8個位元組的十六進位制程式碼,由於裡面含有十六進位制00(即0x00),0x00字元表示是"\0",在字串中表示的字串結束。看你運氣了,如果程式的原始碼中傳送字串模組,傳送字元長度是透過判斷字串長度(strlen)來工作的,那你怎麼也傳送不出“55 01 01 02 01 00 00 5a”這樣8個位元組的十六進位制程式碼,從上看出buff[5]=0x00;buff[6]=0x00;buff[7]=0x5a;時,你的軟體會認為字串長度只有5。只會傳送出“55 01 01 02 01”這樣5個位元組的十六進位制程式碼。如果你的軟體傳送字元長度是根據你輸入或設定的,那能正常傳送“55 01 01 02 01 00 00 5a”這樣8個位元組的十六進位制程式碼。例如傳送字串變數是buff:char *buff[10];buff[0]=0x55;buff[1]=0x01;buff[2]=0x01;buff[3]=0x02;buff[4]=0x01;buff[5]=0x00;buff[6]=0x00;buff[7]=0x5a;2、解決辦法(不該原始碼的情況下)做箇中間件,需要用到PC的多個串列埠通道(串列埠不夠用多串列埠卡擴充套件),系統接線也要調整,如果是1對1(一套軟體對一個裝置)例如:軟體是用com1口傳送接收,原來是直接com1口接裝置,現在改成,com1口接com2口,com2口同時也接裝置(注意RS232是可以三線通訊的,PC端com1口的2腳接com2口的3腳,com2口的3腳接裝置的2腳,PC端com1口的3腳接com2口的2腳,com2口的2腳接裝置的3腳,PC端com1口的5腳接com2口的5腳,接裝置的5腳),這樣做的原理是透過com2口來正確傳送給裝置十六進位制程式碼。並且com1向com2傳送的命令需要修改。例如要傳送“55 01 01 02 01 00 00 5a”這樣8個位元組的十六進位制程式碼,軟體這端傳送字串變數是buff:char *buff[10];buff[0]=0x55;buff[1]=0x01;buff[2]=0x01;buff[3]=0x02;buff[4]=0x01;buff[5]=0xee;buff[6]=0xff;buff[7]=0xee;buff[8]=0xff;buff[9]=0x5a;com2口中介軟體收到“55 01 01 02 01 ee ff ee ff 5a”這樣10個位元組的十六進位制程式碼,他就會進行轉換(0xee表示下個位元組需要轉碼,轉碼方法是減去0xff,那0xff實際就是0x00。)這樣透過中介軟體在com2口向裝置傳送“55 01 01 02 01 00 00 5a”這樣8個位元組的十六進位制程式碼。以上是傳送,如果接收呢,同樣看商業軟體的接受機制,如果商業軟體收到0x00,實際就是"\0",表示一個字串接受終止,那麼接收資料怎麼整都不能正常收到“55 02 01 02 01 00 00 5a”這樣8個位元組的十六進位制程式碼(含0x00),那麼只有改寫原始碼一種方法。3、後記如果你的所謂商業軟體要求別人改原始碼不切實際,而且商業軟體也不復雜,可以找人重寫商業軟體了,現在做軟體外快的人太多了,拿公司軟體稍微改改,時間用不了多少,費用也不高,幾千吧

  • 中秋節和大豐收的關聯?
  • 現在的旅行團為何限制出行人數?或需男女搭配?