引用 | 编辑
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 |