PLC论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 4454|回复: 51

上位机如何解析G代码

[复制链接]
发表于 2012-2-9 23:49:29 | 显示全部楼层 |阅读模式
理解这一篇文章,请注意先看
“用纯PLC程序做直线圆弧插补思路”
http://bbs.plcjs.com/thread-61374-1-1.html

上面说每一条代码最大有四个参数
我们定义下面的寄存器
D0(指令序号,正在执行的x条代码)
(第1条)D1 (指令代码)  D2 (第1个参数)  D3(第2个参数)  D4 (第3个参数)              D5(第4个参数)
(第2条)D6  (指令代码)  D7 (第1个参数)   D8(第2个参数)  D9 (第3个参数)                D10(第4个参数)
(第3条)D11(指令代码)   D12 (第1个参数)D13(第2个参数)D14 (第3个参数)                 D15(第4个参数)
(第4条)D16  (指令代码)  D17 (第1个参数)   D18(第2个参数)  D19 (第3个参数)         D20(第4个参数)

但是一个复杂的系统,估计有100条代码,而且有的是直线,有的是曲线,那我们怎么办呢!
这里我们举例用代码实现一个少女图像:

一共500行程序。
这是软件模拟的一个少女头像,就是上面的代码绘制出的,我们此次的目标也是就是绘制出个头衔,用点胶机!

如何把这500行程序写入PLC,是一个问题!下次在讨论!


上位机解析软件已经做成:
下载的地址:
http://bbs.plcjs.com/thread-67278-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册哦

x
回复

使用道具 举报

发表于 2012-2-10 20:09:04 | 显示全部楼层
这么长(100多条)如何输入触摸屏?
人工?也太累了吧
最好是PC编好,传给HMI
回复 支持 反对

使用道具 举报

发表于 2012-2-10 20:09:15 | 显示全部楼层
这么长(100多条)如何输入触摸屏?
人工?也太累了吧
最好是PC编好,传输给HMI
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-10 22:40:01 | 显示全部楼层
PC的数据如何传给HMI呢,是用USB吧
回复 支持 反对

使用道具 举报

发表于 2012-2-10 23:49:22 | 显示全部楼层
看选型了
HITECH有带USB口的,
多数是2个串口,可以一个用来和PLC相连,另一个用来接收PC文件(数据)
回复 支持 反对

使用道具 举报

发表于 2012-2-10 23:50:09 | 显示全部楼层
我觉得串口足够了,嘿嘿
回复 支持 反对

使用道具 举报

发表于 2012-2-10 23:50:36 | 显示全部楼层
我觉得串口足够了,嘿嘿
回复 支持 反对

使用道具 举报

发表于 2012-2-11 01:01:00 | 显示全部楼层
学习G代码,并试用LV解析,看能否画出这幅图像
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-11 01:21:13 | 显示全部楼层
很好,我正在学习这个软件,
回复 支持 反对

使用道具 举报

发表于 2012-2-11 21:28:55 | 显示全部楼层
看了这个图像的G代码,还真如你所说,参数最多不超过4个,而且,只有2种指令:G0和G1,即快速回原点和直线插补,难度降低很多,你选的确实很实用!赞一个!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-11 21:34:29 | 显示全部楼层
不要以为很复杂,其实是因为没有接触过,想的很神秘而已
回复 支持 反对

使用道具 举报

发表于 2012-2-11 21:35:22 | 显示全部楼层
先用LV做,一是想给屏程序趟个路;另外,也想为下步验证做个准备:即你所说,把PLC实际输出脉冲读入,与理论图像进行比较。LV有缩放功能,可以看的很仔细。
回复 支持 反对

使用道具 举报

发表于 2012-2-11 21:44:42 | 显示全部楼层
头疼的是,就这么4组G代码,还是没看明白
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-11 21:52:51 | 显示全部楼层
比如第一条
G00 X-67.5 Y-1710 F1000
这条指令,应该是定位到坐标X=-67.5,Y=-1710 ,速度是F1000,我们暂且认认为是1000HZ。
所以先要搞清楚现在电机的位置,然后计算定位点到目前位置的距离,然后计算出,XY轴的距离,各自运行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-11 21:57:56 | 显示全部楼层
上面是定位如果是直线插补的话,那么移动的路径就不是随便了,而是“联动”,
联动的概念应该是“你动我也动,你不动我也不动!”
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-11 22:00:59 | 显示全部楼层
至于怎么动,那就是算法的问题,直线插补应该好做点,算好比例,即可,圆弧就麻烦了,要有数学圆公式约束,还要不断修正轨迹,不是照搬公式就可以做到的。
回复 支持 反对

使用道具 举报

发表于 2012-2-11 22:19:49 | 显示全部楼层
好的,我再看看吧。
插补还好办些,有很多“先人”的范例可以参考,做起来容易些。
回复 支持 反对

使用道具 举报

发表于 2012-2-11 22:34:13 | 显示全部楼层
loveplc 发表于 2012-2-11 21:57
上面是定位如果是直线插补的话,那么移动的路径就不是随便了,而是“联动”,
联动的概念应该是“你动我也 ...

说的很对,联动是个比较难搞的话题
回复 支持 反对

使用道具 举报

发表于 2012-2-14 19:07:08 | 显示全部楼层
G代码里怎么还有小数点?   
回复 支持 反对

使用道具 举报

发表于 2012-2-14 20:26:54 | 显示全部楼层
loveplc 发表于 2012-2-11 21:52
比如第一条
G00 X-67.5 Y-1710 F1000
这条指令,应该是定位到坐标X=-67.5,Y=-1710 ,速度是F1000,我们暂 ...

X-67.5      这里,67.5的单位是什么? mm 吗?那么电机走一步的距离是多少?1微米?
这个应该先确定。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-15 01:44:24 | 显示全部楼层
毫米
回复 支持 反对

使用道具 举报

发表于 2012-2-15 10:56:50 | 显示全部楼层
不错的项目 关注中
回复 支持 反对

使用道具 举报

发表于 2012-2-16 09:19:22 | 显示全部楼层
yt5408 发表于 2012-2-10 23:49
看选型了
HITECH有带USB口的,
多数是2个串口,可以一个用来和PLC相连,另一个用来接收PC文件(数据) ...

是这样的,具体做法可以参照SMT机械手贴片机的案例!
回复 支持 反对

使用道具 举报

发表于 2012-2-16 09:21:32 | 显示全部楼层
点胶机,完全可以参照SMT机械手的做法!
回复 支持 反对

使用道具 举报

发表于 2012-2-16 23:41:45 | 显示全部楼层
psukdm 发表于 2012-2-16 09:21
点胶机,完全可以参照SMT机械手的做法!

SMT机械手 是个什么东东?有介绍吗?参考一下,呵呵
回复 支持 反对

使用道具 举报

发表于 2012-2-17 05:43:10 | 显示全部楼层
yt5408 发表于 2012-2-14 20:26
X-67.5      这里,67.5的单位是什么? mm 吗?那么电机走一步的距离是多少?1微米?
这个应该先确定。 ...

回复 支持 反对

使用道具 举报

发表于 2012-2-17 05:44:14 | 显示全部楼层
本帖最后由 yt5408 于 2012-2-17 05:48 编辑


G代码读入

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册哦

x
回复 支持 反对

使用道具 举报

发表于 2012-2-17 05:45:07 | 显示全部楼层
先读进来,下步进行解析,,,,,
回复 支持 反对

使用道具 举报

发表于 2012-2-18 12:55:10 | 显示全部楼层
很正点
回复 支持 反对

使用道具 举报

发表于 2012-2-20 14:47:30 | 显示全部楼层
没有给出算法吗,现在还在算法讨论吗?
回复 支持 反对

使用道具 举报

发表于 2012-2-20 17:03:19 | 显示全部楼层
提供一分G代码的下载吧,复制的有乱码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-20 18:53:04 | 显示全部楼层
917346 发表于 2012-2-20 14:47
没有给出算法吗,现在还在算法讨论吗?

上位机,不需要多么复杂的算法,上面说每一条代码最大有四个参数,只要把这个四个参数送到PLC中即可!PLC执行完一条,反馈给上位机,上位机再发一条执行,直到执行完毕。目前在考虑PLC如何如何执行一条指令,例如上面提到的4条G代码
回复 支持 反对

使用道具 举报

发表于 2012-2-22 13:10:36 | 显示全部楼层
给一个自己在C#下的解析代码,只针对帖子中的G代码功能,其它的陆续改进中:
        {
            string str=tSource.Text;
            string[] sArray = new string[9];
            System.IO.StreamReader objFileR = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory +
                @"cod.txt", true);//第二个参数用于指明创建文件的方式 false 新建,true 在原文件后插入
            //str=str.Replace(" ","");
            //str = str.Substring(4, str.Length - 4);
            //tSource.Text=str;
            //sArray = Regex.Split(str, "Y", RegexOptions.IgnoreCase);
            //tXvalue.Text = sArray[0];
            //tYvalue.Text = sArray[1];
            Bitmap bitmap = new Bitmap(550, 550);
            Graphics g = Graphics.FromImage(bitmap);
            Pen myPen = new Pen(Color.Green, 2);  //创建画笔
            Pen bluePen = new Pen(Color.Blue, 2);
            g.TranslateTransform(pPrint.Width / 2, pPrint.Height / 2); //坐标平移
            g.RotateTransform(-180);
            //g.DrawEllipse(bluePen, new Rectangle(-100, -100, 200, 200));
            Int32 oldX=0, oldY=0;
            do
            {
                tSource.Text = objFileR.ReadLine();
                str = tSource.Text;
                //str = str.Substring(4, str.Length - 4);
                //tSource.Text = str;
                str = str.Replace("X", ",");
                str = str.Replace("Y", ",");
                str = str.Replace("F", ",");
                sArray = Regex.Split(str, ",", RegexOptions.IgnoreCase);
                tXvalue.Text = sArray[1];
                tYvalue.Text = sArray[2];
                if (sArray[0] == "G01")
                {
                    g.DrawLine(myPen, new Point(-1*oldX / 20, oldY / 20), new Point(-1*(Int32)float.Parse(tXvalue.Text) / 20, (Int32)float.Parse(tYvalue.Text) / 20));

                }
                oldX = (Int32)float.Parse(tXvalue.Text);
                oldY = (Int32)float.Parse(tYvalue.Text);
            } while (!(objFileR.EndOfStream));
            objFileR.Close();
           
            pPrint.Image = bitmap;
            
            
        }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册哦

x
回复 支持 反对

使用道具 举报

发表于 2012-2-25 22:11:08 | 显示全部楼层
loveplc 发表于 2012-2-20 18:53
上位机,不需要多么复杂的算法,上面说每一条代码最大有四个参数,只要把这个四个参数送到PLC中即可!PLC ...

现在PLC不都提供多轴的直线和圆弧插补吗?所以PLC在执行上应该不难。我觉得需要考虑的是G代码的语法检测,循环处理,跳转等问题。
回复 支持 反对

使用道具 举报

ym96669 该用户已被删除
发表于 2012-3-17 09:31:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-17 19:12:52 | 显示全部楼层
有专门的BMP转G代码的工具软件的
回复 支持 反对

使用道具 举报

发表于 2012-8-31 19:07:30 | 显示全部楼层
用这些不如直接用运动控制卡进行系统开发,比这个更有保障
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-22 15:05:06 | 显示全部楼层
头像尺寸太大,话个小的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册哦

x
回复 支持 反对

使用道具 举报

发表于 2017-2-28 15:30:38 | 显示全部楼层
品牌开源PLC技术方案,上位机开源+主机扩展模块也开源,gongkong.taobao.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

小黑屋|手机版|Archiver|PLC技术网    

GMT+8, 2018-6-22 10:04 , Processed in 0.236195 second(s), 32 queries .

快速回复 返回顶部 返回列表