引用 | 編輯
a82613035
2010-09-25 13:33 |
樓主
▼ |
||
x1
X13.50Y1096.00T210 X32.50Y13.00T210 X13.50Y42.00T210 X32.50Y38.00T210 X13.50Y1056.00T210 X13.50Y13.00T210 X523.50Y1096.00T210 X521.50Y36.00T210 X33.50Y1096.00T210 X53.50Y1096.00T210 X538.50Y1081.00T210 X13.50Y1076.00T210 X538 .. 訪客只能看到部份內容,免費 加入會員 x0
|
引用 | 編輯
climbd25976
2010-09-27 21:32 |
1樓
▲ ▼ |
這是什麼...不明白你在說什麼←新手
x0 |
引用 | 編輯
ebolaman
2010-09-28 18:29 |
3樓
▲ ▼ |
||||||||||
大致上了解,這是第二次修改 不過還是搞不懂到底要依照何種標準來排序 假如要修改,只要調 CmpPos 函數裡的東西即可 Form1: 複製程式 Option Explicit Private Sub Command1_Click() Dim S As String Dim Arr() As String Dim i As Long, k As Long, XYInd As Integer Dim B As Boolean Dim CmpMethod1 As Integer, CmpMethod2 As Integer '------------ Ini. Var. ------------ CmpMethod1 = IIf(Option1(0).Value = True, 1, 0) 'Sort By Y or not CmpMethod2 = IIf(Check1.Value = 1, 2, 1) 'Increasing or not '--------- Put Datas Into Array ----------- S = Trim(Text1.Text) Do While Right(S, 2) = vbNewLine S = Left(S, Len(S) - 2) Loop Arr = Split(S, vbNewLine) k = UBound(Arr) ReDim Pos(k, 1) As Double For i = 0 To k Pos(i, 0) = GetUserVal(Arr(i), 0) 'X Pos(i, 1) = GetUserVal(Arr(i), 1) 'Y Next i '-------- Sort ---------- 'Bubble Sort For XYInd = 0 To 1 Do i = 0 B = False Do If CmpPos(Pos, i, CmpMethod1, CmpMethod2, XYInd) Then ExcgPos Pos, i B = True End If i = i + 1 Loop While i < k Loop While B Next XYInd '---------- Show Result --------- S = "" For i = 0 To k S = S & "(" & Pos(i, 0) & ", " & Pos(i, 1) & ")" & vbNewLine Next i Text2.Text = S End Sub Public Function GetUserVal(ByVal S As String, ByVal Typ As Byte) As Double Dim m As Long, m2 As Long 'Kill Str T... m = InStrRev(UCase(S), "T") If m <> 0 Then S = Left(S, m - 1) ''' m = InStr(1, UCase(S), "X") m2 = InStr(m + 1, UCase(S), "Y") GetUserVal = IIf(Typ = 0, Mid(S, m + 1, m2 - m - 1), Right(S, Len(S) - m2)) End Function Public Sub ExcgPos(ByRef P() As Double, ByVal i As Long) 'Exchange Two Pos. Dim tempk As Double, tempk2 As Double tempk = P(i, 0): tempk2 = P(i, 1) P(i, 0) = P(i + 1, 0): P(i, 1) = P(i + 1, 1) P(i + 1, 0) = tempk: P(i + 1, 1) = tempk2 End Sub Public Function CmpPos(ByRef P() As Double, ByVal i As Long, ByVal Mtd1 As Integer, ByVal Mtd2 As Integer, ByVal Ind As Integer) As Boolean Dim FixedMtd As Integer If Ind = 0 Then If Mtd2 = 2 Then CmpPos = (P(i, Mtd1) > P(i + 1, Mtd1)) Else CmpPos = (P(i, Mtd1) < P(i + 1, Mtd1)) End If Else FixedMtd = Mtd1 Mtd1 = CByte(Not CBool(Mtd1 * 255)) / 255 'Reverse 0 & 1 If Mtd2 = 2 Then CmpPos = (P(i, Mtd1) > P(i + 1, Mtd1)) And (P(i, FixedMtd) = P(i + 1, FixedMtd)) Else CmpPos = (P(i, Mtd1) < P(i + 1, Mtd1)) And (P(i, FixedMtd) = P(i + 1, FixedMtd)) End If End If End Function
x1 |
引用 | 編輯
a82613035
2010-09-30 07:46 |
4樓
▲ ▼ |
ebolaman你好 :
我有一個 長( X )552. 寬(Y)1109. 座標分為四個角落,四個角設定為Q1,Q2,Q3,Q4 為四個角落 Q1為 (X0. Y0.) , Q2為(X552. Y0.) , Q3為(X0. Y1109.) , Q4為( X552. Y1109.) 1: 首先開啟 入徑C:\ XXX \AAA.TXT (記事本),把( T210 或是T313或是T235或是T304等)無排序座標重新排列座標,把四個角落Q1,Q2,Q3,Q4,由外面排到裡面,例如座標分佈再Q4位置座標外面排到裡面,座標分佈再Q2位置座標外面排到裡面,座標分佈再Q3位置座標外面排到裡面,座標分佈再Q1位置座標外面排到裡面,由Q4角落排到---Q2角落排到--- Q3角落排到--- Q1角落排到 下面是座標無排序 (552.1109.) X10.00Y804.50T304 X10.00Y554.50T304 X10.00Y304.50T304 X542.00Y804.50T235 X542.00Y554.50T235 X542.00Y304.50T235 X451.00Y384.50T313(Q2) X451.00Y724.50T313(Q4) X101.00Y724.50T313(Q3) X101.00Y384.50T313(Q1) X3.50Y1041.27T210(Q3) X13.50Y1056.00T210(Q3) X13.50Y1076.00T210(Q3) X53.50Y1096.00T210(Q3) X33.50Y1096.00T210(Q3) X523.50Y1096.00T210(Q4) X538.50Y1081.00T210(Q4) X521.50Y36.00T210(Q2) X538.50Y36.00T210(Q2) X49.50Y13.00T210(Q1) X32.50Y13.00T210(Q1) X32.50Y38.00T210(Q1) X13.50Y42.00T210(Q1) X538.50Y13.00T210(Q2) X538.50Y1096.00T210(Q4) X13.50Y13.00T210(Q1) X13.50Y1096.00T210(Q3) 下面是重新排列座標 (552.1109.) X10.00Y804.50T304 X10.00Y554.50T304 X10.00Y304.50T304 X542.00Y804.50T235 X542.00Y554.50T235 X542.00Y304.50T235 X451.00Y724.50T313(Q4) X451.00Y384.50T313(Q2) X101.00Y724.50T313(Q3) X101.00Y384.50T313(Q1) X538.50Y1096.00T210(Q4) X538.50Y1081.00T210(Q4) X523.50Y1096.00T210(Q4) X538.50Y13.00T210(Q2) X538.50Y36.00T210(Q2) X521.50Y36.00T210(Q2) X13.50Y1096.00T210(Q3) X33.50Y1096.00T210(Q3) X53.50Y1096.00T210(Q3) X13.50Y1076.00T210(Q3) X13.50Y1056.00T210(Q3) X3.50Y1041.27T210(Q3) X13.50Y13.00T210(Q1) X13.50Y42.00T210(Q1) X32.50Y13.00T210(Q1) X32.50Y38.00T210(Q1) X49.50Y13.00T210(Q1) 重新排好座標,覆蓋AAA.TXT,裡面,小弟構想就是這樣 x0 |
引用 | 編輯
ebolaman
2010-09-30 20:15 |
5樓
▲ ▼ |
下面是引用 a82613035 於 2010-09-30 07:46 發表的 : 所以我先歸納一下規則: Q1 : Y 主遞增、X其次 Q2 : Y 主遞增、X接著遞減 Q3 : X 主遞增、Y接著遞減 Q4 : Y 主遞減、X其次 是嗎? 我另做了一個圖來展示以上意義: 不過有幾點我搞不太清楚: 1. 真的是照以上規則嗎? 不是照與某點距離? 2. 字串後面的 TXXX 是做什麼的 3. 輸出格式必須保持與原本相同嗎? 例如: X123Y345T678 4. 輸入來源有 Q1, Q2... 等字樣嗎? 歸納出以上規則後,相信會比較好了解排序之最終目的 我已把大致上的 VB 程式碼打好了,或許你先行修改看看 x0 |
引用 | 編輯
a82613035
2010-09-30 21:09 |
6樓
▲ ▼ |
1:照你圖上規定走的路線排序座標,不過Q3方向可以改走Y方向,另外Q1,Q2,Q3,Q4 也可以走X方向
2:字串後面的 TXXX 是做什麼的,是模具號碼,我工作性質是沖孔人員,每天對著電腦劃圖 3:輸出格式必須保持與原本相同,是的X123.Y345.T678 4:輸入來源有 Q1, Q2... 等字樣嗎?是沒有 x0 |
引用 | 編輯
a82613035
2010-10-01 07:28 |
7樓
▲ ▼ |
補充一下
1:再AAA.TXT資料裡,第一行是空行, 第二行是 (X552.Y1109.), " ) " 後面有加G92XXXXXXX 第三行以後都是 X10.00Y804.50T304 ,TXXX後面有( XXX )敘述說明,例如(3.1) 或是 (FAN*0.)等等,不一定每個TXXX後面都有敘述說明, 直到最後結束有個G50 例如: X10.00Y304.50T304 X542.00Y804.50T235 X542.00Y554.50T235 . . . . X32.50Y38.00T210 G50 G50下一行是空行 x0 |
引用 | 編輯
ebolaman
2010-10-01 19:01 |
8樓
▲ ▼ |
下面是引用 a82613035 於 2010-10-01 07:28 發表的 : 那麼,AAA.TXT 裡面就是從 最前面的 空行 到 G50 下一行空行 為止算一個群組,所以有很多群組需要排序囉? 不過我仍然無法掌控到 排序的規則 目前我的理解是這樣:X, Y 個軸 分別為主、次遞增或遞減 但仍有一個麻煩,就是在這個群組裡無法區分 Q1~Q4 這四個區塊 是以模組長寬 (X552.Y1109.) 的中心點? 抑或是 每個資料的X 與 Y 取平均值? 還是要看離散度? 相關係數?... 抓出這個點後要以這個點為中心,往南北與東西向各畫出分隔線,然後將分隔的四塊分為 Q1~Q4 嗎? 至於排序,機器只能以直線走嗎? 可以走斜線嗎? 假如排序依照最短路徑來走行嗎? 因為我對沖孔不懂,在著手進行前還是要把規則搞清楚才行 我畫了一個圖展示我認為的 AAA.txt 規則: x0 |
引用 | 編輯
a82613035
2010-10-01 22:54 |
9樓
▲ ▼ |
1: (X552.Y1109.)這是鐵板長度,不是模具長度
2: AAA.TXT是沖孔程式,是讓沖孔機器讀座標去沖孔 3: T210 才是模具號碼 4: 我解釋一下,為什麼要排序座標,T210這把模具是 20X20正方形,假如有四個座標 第一座標是X10.Y10.T210 第二座標是X30.Y10.T210第三座標是X10.Y30.T210第四座標是X30.Y30.T210,如果先排 X30.Y10.T210 X10.Y30.T210 X30.Y30.T210 X10.Y10.T210 最後X10.Y10.T210座標,鐵板就會掉料,所以才要排序座標,不要讓鐵板掉料 5:沖孔機器,是依據你寫的座標去沖孔 6:AAA.TXT是一條程式,G50是結束程式 7:機器可以直線走也可以走斜線,依據你寫的座標去沖孔,排序依照最短路徑來走行 8:(X552.Y1109.)這是鐵板長度,X552.及Y1109.這是一個變數,不是每條程式都不會一樣, 9:我有一個 鐵板長度,長( X )552. 寬(Y)1109. 座標分為四個角落,四個角設定為Q1,Q2,Q3,Q4 為四個角落 Q1為 (X0. Y0.) , Q2為(X552. Y0.) , Q3為(X0. Y1109.) , Q4為( X552. Y1109.) x0 |
引用 | 編輯
ebolaman
2010-10-02 07:46 |
10樓
▲ ▼ |
||||||||||
下面是引用 a82613035 於 2010-10-01 22:54 發表的 : 可以展示一下 機器運作的順序嗎? 我覺得既然座標分散在四個區塊,四個點連起來可以形成正方形,該不會是鐵板照著 (X276.Y554.50) 即鐵板中心旋轉然後沖孔? 目前發現有鐵板的點座標正好在劃分四區的線 (中心線) 上 (Y554.50) ,所以跟我想的好像又不太一樣 之前也以為四個角落的點一組一組剛好可以形成很多的矩形,但我發現你給的點座標數目並不是 4 的倍數,或許是因為那些剛好在中心線的點的緣故? 假如要照最短路徑,恐怕要像五子棋那樣,叫程式列出所有路徑可能性再去算出最短路徑 目前只寫了把點座標依序劃分到 5 區裡,Q0~Q3 分別是 左下、右下、左上、右上的區域,Q4 則是在中心線的點,卡在如何分區排序 為了追求最高效率,我想我可能得需要 沖孔的開始點、結束點、如何處理中心線上的點、是否旋轉、分區的用意、程序的進行 等資料 還有,"掉料" 是什麼啊..? 那幾個點看起來可以組成矩形,但為何那樣排就會 掉料呢? 另外模具資料後面 T210.... 目前程式我設計是把它忽略的,應該不會影響到 排序吧? 程式目前只有分 5 區,用陣列儲存 X,Y 點資料而已
x0 |
引用 | 編輯
a82613035
2010-10-02 13:12 |
11樓
▲ ▼ |
SEGXY.EXE 不知如何用,座標後面模具號碼,是有關希,
沖孔機器是抓取模具號碼來沖孔,如果排序座標沒有模具號碼機器無法抓取模具,因為模具號碼二,三十幾個號碼,座標分佈再Q4位置座標外面排到裡面,座標分佈再Q2位置座標外面排到裡面,座標分佈再Q3位置座標外面排到裡面,座標分佈再Q1位置座標外面排到裡面,排好由Q4角落排到Q2---Q由Q2角落排到Q3--- 由Q3角落排到Q1--- 最後排到Q1角落 x0 |
引用 | 編輯
ebolaman
2010-10-02 19:07 |
13樓
▲ ▼ |
下面是引用 a82613035 於 2010-10-02 13:12 發表的 : 那個 EXE 檔目前還不完全,尚缺 排序的功能,所以點 GO 沒有反應 我問了我爸,比較了解沖孔了,不過機器只能直線運作吧? 影片的話..不知檔案大不大,可以壓縮成 rar 或 7z 到我信箱: x0 |
引用 | 編輯
ebolaman
2010-10-03 09:37 |
15樓
▲ ▼ |
下面是引用 a82613035 於 2010-10-03 08:30 發表的 : 收到了, DWG 檔案 可以用 ABViewer 打開 原來模具是打洞的,鋼板是被打洞的 所以掉料就是 模具壓下去四個點形成一個矩形時,那四個洞就會一起掉落,稱之 掉料? (Q1 左下角、Q2 右下角、Q3 左上角、Q4 右上角) 那我就寫從 (平面座標系,X軸正向右、Y軸正向上) 左上角 到 右邊再到右下角再到左邊囉 先以最左上角的點當出發點,算出平面座標所有點 直接連線的最短路徑走完,並且出發點與結束點是 同一個點(最左上角) 順時鐘繞圈這樣應該 OK 吧 目前對 "順序" 我還是搞不懂最佳的規則,我先寫寫看到時候你再來修改 x0 |
引用 | 編輯
a82613035
2010-10-03 11:26 |
16樓
▲ ▼ |
ebolaman 你好:
有看你回信, 1:目前對 "順序" 你要先從Q4 右上角,Q4右上角排好之後換Q2 右下角,Q2右下角排好之後換Q3 左上角,Q3 左上角排好之後換Q1 左下角, 2:例如座標分佈再Q4位置座標外面排到裡面,座標分佈再Q2位置座標外面排到裡面,座標分佈再Q3位置座標外面排到裡面,座標分佈再Q1位置座標外面排到裡面,由Q4角落排到---Q2角落排到--- Q3角落排到--- Q1角落排到 3:外是指鐵板長度X552. 寬Y1109.,鐵板外面 4:內是指鐵板長度X552. 寬Y1109.,鐵板內面 x0 |
引用 | 編輯
a82613035
2010-10-05 19:03 |
21樓
▲ ▼ |
ebolaman 謝謝你
我有一個疑問,在排序座標時,可以相同TXXX排再一起然後再排別的TXXX,不要中間插一個不同TXXX,例如: X100.Y100.T210 X110.Y100.T210 X120.Y100.T210 X130.Y100.T313 X150.Y100.T210 X170.Y100.T210 . . . x0 |
引用 | 編輯
ebolaman
2010-10-05 23:19 |
23樓
▲ ▼ |
||||||||||
下面是引用 a82613035 於 2010-10-05 20:01 發表的 : 這是修改過的,可以選 演算法,其中 XY Abs 就是原本的排序方法 而 XY Abs (T) 則是照著 XY Abs 排序後再以 模具來排序(由小到大) 現在程式還有一些缺點,所以還是請詳細對照座標吧 不過 按模具來排的 總距離會大大超過 XY Abs 的方法 而另外的 A*, RadioSpread 那些暫時不用 也要調整程式相容性
x0 |
引用 | 編輯
a82613035
2010-10-06 07:53 |
24樓
▲ ▼ |
ebolaman你好 :
有一個AAA(無排).TXT ,經過排序座標之後第一個為什麼是Q3座標 X13.50Y1096.00T210(Q3)----A ,而不是Q4座標,Q4排序座標之後是Q2座標,Q2座標 有三個座標如下 X538.50Y13.00T210(Q2)…..1 X521.50Y36.00T210(Q2) ….2 X538.50Y36.00T210(Q2)…..3 程式可以排下面座標 X538.50Y13.00T210(Q2)…..1 X538.50Y36.00T210(Q2)…..3 X521.50Y36.00T210(Q2) ….2 2 :----- Q2排序座標之後是Q3座標如下 X53.50Y1096.00T210(Q3)----B X33.50Y1096.00T210(Q3)----C X13.50Y1076.00T210(Q3)----D X13.50Y1056.00T210(Q3)----E X3.50Y1041.27T210(Q3)-----F 程式可以排下面座標 X13.50Y1096.00T210(Q3)----A X33.50Y1096.00T210(Q3)----C X53.50Y1096.00T210(Q3)----B X13.50Y1076.00T210(Q3)----D X13.50Y1056.00T210(Q3)----E X3.50Y1041.27T210(Q3)-----F 3 :----- Q3排序座標之後是Q1座標如下 X13.50Y13.00T210(Q1)----11 X32.50Y13.00T210(Q1)----12 X49.50Y13.00T210(Q1)----13 X32.50Y38.00T210(Q1)----14 X13.50Y42.00T210(Q1)----15 程式可以排下面座標 X13.50Y13.00T210(Q1)----11 X32.50Y13.00T210(Q1)----12 X49.50Y13.00T210(Q1)----13 X13.50Y42.00T210(Q1)----15 X32.50Y38.00T210(Q1)----14 x0 |
引用 | 編輯
ebolaman
2010-10-06 21:51 |
25樓
▲ ▼ |
||||||||||
下面是引用 a82613035 於 2010-10-06 07:53 發表的 : 之前是後來以模具 遞增 排序,也就是把模具順序當作優先權第一,才會發生此狀況 看來你要求的排序優先權是 1. 分區 2. 模具 3. XY 目前已經修改完畢,但... 當時修改到最後由於正在重組磁碟,可能與某些監控軟體互衝,導致 VB6 專案檔 表單元件、專案部分、主要原始碼皆遺失 好險遺失前不久有編譯程式,這恐怕是最後的作品了,不知順序對不對 雖然還留有上一個作品的專案,但我今天修改了 1 個多小時,要重寫的話我已經沒那個時間了
x1 |