RS-232讀取問題

各位前輩好:

使用LabVIEW對機器讀取數值,請教關於通訊寫入讀取問題

小弟目前能寫入指令,機器有收到也有回傳

但是LabVIEW伏法能正確讀取、顯示

懇請前輩們,指點迷津,底下是小弟寫的程式

RS232.vi (13.5 KB)

  1. 通訊問題: 先檢查看看byte at ports,確認有沒有東西傳進來
  2. 讀取問題: 是否會time out? 讀取速率是否過快/慢?
  3. 顯示問題: 檢查Normal/ HEX display

大概這幾個方向, 內文訊息有點少, 再試試看囉

1個讚

前輩好,

請問byte at ports如何觀看資料有沒有接收到?

我用Bus Hound有看到機器有回傳資料

Hi Amaze,

先看看這邊有沒有數值吧, 如果沒有但是其他程式有那就看看serial port設定

如果有就是讀出來看看數值對不對。image

前輩好,

請問另一問題,通訊讀回的16進制資料,

如何取出片段資料呢?

例如,資料為0103 0400 0008 A13C 4B,想取出有效資料為00 0008 A1

HI 假如字串位置固定,數位置就OK囉
兩個16位元數字就是1個位元,一個位元就是一個字元
所以像你目前讀取的0003 0400 0008 A13C 4B
以字元來說就是00 03 04 00 00 08 A1 3C 4B
所以你要的文字位置就是位置3取4個字元

2個讚

Hi Jackylin 你好,

請問取出的字元會變成字串嗎?

因為我將字元取出後用 Scan Value Function 轉換十進制,但轉出的數值都不正確

電路與測試如下所示,麻煩前輩指導,謝謝

RS 485資料轉換
RS 485資料轉換-1

value應該為0x36 = 54,但轉出後顯示為0
value應該為0xFF = 255,但轉出後顯示為6

主因是這邊有字碼轉換的問題要先處理掉
假如你直接轉換會是錯誤的
可以參考以下作法
Hex字串==>Hex數值==>Dec字串

1個讚

Hi Jackylin 你好,

感謝提供的範例,請問字串轉數值時,有不使用Array的方式嗎?

我找了幾天都沒找到

有甚麼原因導致不希望使用到Array嗎
目前我這邊應該是沒有其他方法做轉換

想使用Formula Node編寫程式,

由設備讀取出的溫度數位值,比對矩陣後

找出數值最相近的矩陣位置,顯示實際溫度

底下是目前撰寫的程式:
RS 485_Motor Temperature.vi (34.2 KB)
預計使用Formula Node編成的程式如下:
unsigned char i;

static unsigned char NetPos;
static unsigned char Pos;
static const unsigned int *TempPoint;

if(!Mode)
TempPoint=&TempInverterCmp[0];
else
TempPoint=&TempBoostCmp[0];

Pos=60;
NetPos=60;

if(Adc<=TempPoint[0])
{
for(i=0;i<6;i++)
{
NetPos=(NetPos+1)>>1;
if(TempPoint[Pos]<=Adc)
Pos=Pos-NetPos;
else
Pos=Pos+NetPos;
}

if(TempPoint[Pos]>=Adc)
	Pos++;
return (Pos-20);

}
else
return (-20);

HI 可能要麻煩你降轉
我這邊版本是2018

Hi
麻煩你了

RS 485_Motor Temperature.vi (29.6 KB)

這邊基本上你的TempCal是你的計算結果資料格式為Arrary
但你看起來只是想做成純量去
跟你的Table做比較
這邊只要把Arrary透過Index取值就可以囉
我這邊提供你另一種資料轉換方式你可以參考看看
RS 485_Motor Temperature (1).vi (28.8 KB)

1個讚