同軸度和同心度是兩個非常容易搞混的幾何公差.
同軸度的符號如下:
跟正位度的符號是一樣的!
有這種設定,主要是它的定義和正位度的使用方法很像,反而跟同心度沒這麼相似.
首先來個範例:
由於這個不是繪圖軟體做的,只是示意用,不合工程圖規範的部分還請包涵.
這個是一個軸的側面視圖,直徑較大的部分為基準,直徑較小的部分是要比較的部分.
同軸度要怎麼解讀呢? 首先以大圓柱作為基準,畫出基準軸,如下圖:
而作為比較的小圓柱,也畫出自己的軸,小圓柱本身的軸偏差不能超過以大圓柱軸為中心,直徑0.5的圓柱體公差帶範圍內,如下圖所示.
而同心度,則是取一個截面圓的中心點作為基準,而被量測的特徵也是取一個截面的圓的中心點作為判斷依據,可以說是點對點的比較.
雖然同軸度和同心度名字上聽起來很像,但是操作和執行量測上的方式可是完全不同的,希望這篇文有解除大家的疑惑.
mechanical engineering stuff, automation stuff, measurement stuff, and many other things. Just like a warehouse.
2019年5月23日 星期四
2019年5月21日 星期二
同心度 Concentricity
同心度和正位度都是幾何公差的一種,同心度的定義(作者自己的定義),以參考圓的中心點為基準點,所量測圓的中心點必須落在基準點為圓心的特定直徑的範圍內。
用圖來解釋比較快:
同心度的符號如下,
由於同心度也得需要基準作為比對,因此在符號後面會註記所對應的基準特徵.
下圖是比例沒有很好的範例:
大家可以看到,基準A是外圓,而內圓是要比對的部分,首先找到外圓的中心點
以上是同心度的簡單介紹,由於同心度和內外圓的直徑大小沒有關聯,除非有考量材料條件,因此在工程圖上就沒標示,以免誤導.
用圖來解釋比較快:
同心度的符號如下,
由於同心度也得需要基準作為比對,因此在符號後面會註記所對應的基準特徵.
下圖是比例沒有很好的範例:
大家可以看到,基準A是外圓,而內圓是要比對的部分,首先找到外圓的中心點
在工程圖上大家可以看到,圖紙的要求是直徑0.5,接著在外圓中心點畫出直徑為0.5的圓(黃色部份).
如果內圓的中心點有落在這個黃色範圍內,就算符合公差.
如果沒在黃色範圍內,則NG.
以C# 實作MODBUS TCP
最近在弄MODBUS TCP的東西,但又不想引用第三方的LIBRARY,所以就從底層做起。
簡單來說, 用socket傳送 byte array就搞定了。 不好處理的是byte array的設定,以下是簡易的設定說明。
byte[] array=
{
0,0,// transaction id , no use in this case
0,0,// id no use in this case
0,0x6,// length of data
0,// device number, no use in this case
0x6,//function code
0x1F, 0xBB,// Start Address
0x0,0x1//Force data
};
解釋一下這些的意義:
0,0,// transaction id , no use in this case
在MODBUS TCP可以不指定,或是任意指定也可,SLAVE裝置回傳的前兩個byte就是這兩碼。
0,0,// id no use in this case
這個也是可以隨意指定。
0,0x6,// length of data 這兩個byte代表要傳輸的訊息的byte length,
從
0,// device number, no use in this case
0x6,//function code
0x1F, 0xBB,// Start Address
0x0,0x1//Force data
到這裡總共有6個bytes,所以長度為6
0,// device number, no use in this case
裝置號碼,在有IP位置的情況下可以不用設定。
0x6,//function code
這個就是重點了,MODBUS的指令,
這個是寫入特定output register的代碼,
不同廠商的function code有些許不同,但大致如下:
讀取多個registers : 0x3
讀取單個 input register : 0x4
寫入 coil : 0x5
寫入單個 output register : 0x6
(其他的網路上都找得到,這邊只列常用的)
0x1F, 0xBB,// Start Address
這邊是指定要寫入的位址,每家廠商定義的位址都不一樣,得自己慢慢看原廠手冊。
0x0,0x1//Force data
這邊是讓該位址ON的指令,每家廠商設定不一樣,得自己慢慢看原廠手冊。
以上就是Modbus TCP的實作。
簡單來說, 用socket傳送 byte array就搞定了。 不好處理的是byte array的設定,以下是簡易的設定說明。
寫入output register
MODBUS TCP的 byte array如下:byte[] array=
{
0,0,// transaction id , no use in this case
0,0,// id no use in this case
0,0x6,// length of data
0,// device number, no use in this case
0x6,//function code
0x1F, 0xBB,// Start Address
0x0,0x1//Force data
};
解釋一下這些的意義:
0,0,// transaction id , no use in this case
在MODBUS TCP可以不指定,或是任意指定也可,SLAVE裝置回傳的前兩個byte就是這兩碼。
0,0,// id no use in this case
這個也是可以隨意指定。
0,0x6,// length of data 這兩個byte代表要傳輸的訊息的byte length,
從
0,// device number, no use in this case
0x6,//function code
0x1F, 0xBB,// Start Address
0x0,0x1//Force data
到這裡總共有6個bytes,所以長度為6
0,// device number, no use in this case
裝置號碼,在有IP位置的情況下可以不用設定。
0x6,//function code
這個就是重點了,MODBUS的指令,
這個是寫入特定output register的代碼,
不同廠商的function code有些許不同,但大致如下:
讀取多個registers : 0x3
讀取單個 input register : 0x4
寫入 coil : 0x5
寫入單個 output register : 0x6
(其他的網路上都找得到,這邊只列常用的)
0x1F, 0xBB,// Start Address
這邊是指定要寫入的位址,每家廠商定義的位址都不一樣,得自己慢慢看原廠手冊。
0x0,0x1//Force data
這邊是讓該位址ON的指令,每家廠商設定不一樣,得自己慢慢看原廠手冊。
讀取register狀態
byte[] array=
{
0,0,// transaction id , no use in this case
0,0,// id no use in this case
0,0x6,// length of data
0,// device number, no use in this case
0x3,//function code
0x00, 0xAB,// Start Address
0x0,0x2//Number of registers
};
{
0,0,// transaction id , no use in this case
0,0,// id no use in this case
0,0x6,// length of data
0,// device number, no use in this case
0x3,//function code
0x00, 0xAB,// Start Address
0x0,0x2//Number of registers
};
大部分都和上面一樣,不同的是function code,這邊是0x3,另外是最後的兩個bytes,是一對High/Low byte,用來指定要讀取的register的數量。在這邊Address和register是同義。
回傳的資訊就是該Address的IO狀態了。
以下是簡易實作的程式碼:
var socket=new Socket( SocketType.Stream, ProtocolType.Tcp);
var Addr=new IPAddress (new byte[]{168,192,1,1});//slave device ip
int port=502;
var IEP = new IPEndPoint(Addr,port);
socket.Connect(IEP as EndPoint);
if(socket.Connected)
{
socket.send(array);
var buffer=new byte[1024];
int L= socket.recieve(buffer);
}
以下是簡易實作的程式碼:
var socket=new Socket( SocketType.Stream, ProtocolType.Tcp);
var Addr=new IPAddress (new byte[]{168,192,1,1});//slave device ip
int port=502;
var IEP = new IPEndPoint(Addr,port);
socket.Connect(IEP as EndPoint);
if(socket.Connected)
{
socket.send(array);
var buffer=new byte[1024];
int L= socket.recieve(buffer);
}
以上就是Modbus TCP的實作。
2021.Mar.24 Add:
Modbus specification:
https://modbus.org/specs.php
訂閱:
文章 (Atom)
同軸度 Coaxiality
同軸度和同心度是兩個非常容易搞混的幾何公差. 同軸度的符號如下: 跟正位度的符號是一樣的! 有這種設定,主要是它的定義和正位度的使用方法很像,反而跟同心度沒這麼相似. 首先來個範例: 由於這個不是繪圖軟體做的,只是示意用,不合工程圖規範的部分還請包涵. 這個是...
-
正位度(TRUE POSITION) 正位度在幾何公差上的定義(作者自己的定義)是標明一個特徵(通常是圓柱狀物體或圓柱狀孔位)的位置之容許公差帶,和一般的公差表示法有所不同,一般常見的尺寸公差(圖一) 圖一 其可變動範圍長寬各為+-0.2,所以他的公差帶會是一個矩...
-
同心度和正位度都是幾何公差的一種,同心度的定義(作者自己的定義),以參考圓的中心點為基準點,所量測圓的中心點必須落在基準點為圓心的特定直徑的範圍內。 用圖來解釋比較快: 同心度的符號如下, 由於同心度也得需要基準作為比對,因此在符號後面會註記所對應的基準特徵. 下圖是...
-
最近在弄MODBUS TCP的東西,但又不想引用第三方的LIBRARY,所以就從底層做起。 簡單來說, 用socket傳送 byte array就搞定了。 不好處理的是byte array的設定,以下是簡易的設定說明。 寫入output register MODBUS...