首页 > 系统相关 >树莓派Linux跨平台免授权CNC数控数据采集协议,TCP协议包,支持(fanuc、三菱、西门子、海德汉、马扎克、兄弟、哈斯、广数、凯恩帝KND、华中)数控跨平台,支持网关Linux

树莓派Linux跨平台免授权CNC数控数据采集协议,TCP协议包,支持(fanuc、三菱、西门子、海德汉、马扎克、兄弟、哈斯、广数、凯恩帝KND、华中)数控跨平台,支持网关Linux

时间:2023-07-10 11:23:56浏览次数:59  
标签:sender void Linux EventArgs 跨平台 数控 time byte Data

市面上的数控基本都支持了跨平台通讯,下面以三菱为列讲解跨平台协议如何通讯,无需任何DLL,适配任何开发语言,纯Socket通讯

先上采集图 

 

 代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 三菱TCP
{
    public partial class Form1 : Form
    {
        public static Socket TcpSocket;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
         

        }

        private void btnVer_Click(object sender, EventArgs e)
        {
           
        }
        //TcpSocket.Send(SendCommand.伺服名称);


        //    byte[] Data = ReceiveData();



        //byte[] Data2 = new byte[] { 0x10 };



        //string s = Encoding.Default.GetString(Data.Skip(28).Take(1).ToArray()).Replace("\0", string.Empty);

        public   byte[] ReceiveData()
        {
            byte[] b = new byte[1024];
            int n = TcpSocket.Receive(b);
            byte[] DATA = b.Take(n).ToArray();

            textBox1.Text = BitConverter.ToString(DATA).Replace("-","");;
            return DATA;






        }
     
        public string timeconvert(string time)
        {
            time= time.PadLeft(6,'0');

            if (time.Length > 6)
            {

                return time.Substring(0, time.Length-4)+":" + time.Substring(time.Length - 4, 2) + ":" + time.Substring(time.Length - 6, 2);
            }
            else
            {
                return time.Substring(0, 2) + ":" + time.Substring(2, 2) + ":" + time.Substring(4, 2);
            }


        }
      
     
        private void button12_Click(object sender, EventArgs e)
        {
            TcpSocket.Send(SendCommand.程序内容);
            byte[] Data = ReceiveData();
            程序内容.Text = Encoding.Default.GetString(Data.Skip(22).ToArray()).Replace("\0", string.Empty);

        }

        private void button13_Click(object sender, EventArgs e)
        {
            TcpSocket.Send(SendCommand.当前刀具号);
            byte[] Data = ReceiveData();
            int time = BitConverter.ToInt32(Data.Skip(22).Take(4).ToArray(), 0);
            当前刀具号.Text = time.ToString();
        }

        private void button14_Click(object sender, EventArgs e)
        {
            TcpSocket.Send(SendCommand.主轴设定);
            byte[] Data = ReceiveData();
            int time = BitConverter.ToInt32(Data.Skip(22).Take(4).ToArray(), 0);
            主轴转速设定.Text = time.ToString();
        
        }

        private void button15_Click(object sender, EventArgs e)
        {
            TcpSocket.Send(SendCommand.进给速度设定);
            byte[] Data = ReceiveData();
            
            进给速度设定.Text = BitConverter.ToDouble(Data.Skip(22).Take(8).ToArray(), 0).ToString();

        }

        private void button16_Click(object sender, EventArgs e)
        {
            TcpSocket.Send(SendCommand.进给速度实际值);
            byte[] Data = ReceiveData();
            进给速度实际值.Text = BitConverter.ToDouble(Data.Skip(44).Take(8).ToArray(), 0).ToString(); ;
        }

    

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                TcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                TcpSocket.ReceiveTimeout = 1000;
                TcpSocket.Connect(txt_ip.Text, int.Parse(txt_port.Text));
                if (TcpSocket.Connected)
                {
                    MessageBox.Show("ok");
                }

            }
            catch (Exception ex)
            {

            }
        }

        private void button19_Click(object sender, EventArgs e)
        {
           
            TcpSocket.Send(SendCommand.主轴倍率);
            byte[] Data = ReceiveData();
  
            主轴倍率.Text = Data.Last().ToString();

        }

        private void button20_Click(object sender, EventArgs e)
        {
            TcpSocket.Send(SendCommand.进给倍率);
            byte[] Data = ReceiveData();

            进给倍率.Text = Data.Last().ToString();
        }

        private void button21_Click(object sender, EventArgs e)
        {

            TcpSocket.Send(SendCommand.CNC类型);
            byte[] Data = ReceiveData();
            CNC类型.Text = Encoding.Default.GetString(Data.Skip(22).Take(22).ToArray()).Replace("\0", string.Empty);
             

        }

        private void button22_Click(object sender, EventArgs e)
        {
            TcpSocket.Send(SendCommand.加工件数);
            byte[] Data = ReceiveData();
            int time = BitConverter.ToInt32(Data.Skip(22).Take(4).ToArray(), 0);
            加工件数.Text = time.ToString();
            
        }

       

        private void button23_Click(object sender, EventArgs e)
        {
            增益.Text = 读取伺服监控(0x01);
        }

        private void button24_Click(object sender, EventArgs e)
        {
            跟踪延迟.Text = 读取伺服监控(0x02);
        }

      

        private void timer1_Tick(object sender, EventArgs e)
        {
            foreach (Control c in this.Controls)
            {
            
                Control c1 = c as Button;
                if (c1 != null)
                {
                    if (c1.Name != "button1"&& c1.Name != "button25")
                    {
                        ((Button)c1).PerformClick();

                    }
              
                }
            }
        }

        private void button25_Click_1(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

      
    }
}

 

标签:sender,void,Linux,EventArgs,跨平台,数控,time,byte,Data
From: https://www.cnblogs.com/fzxxkj/p/17540472.html

相关文章

  • Linux操作常用命令
    目录一、Linux简介二、在线版Linux的使用三、常用命令四、扩展命令一、Linux简介Linux内核最初只是由芬兰人林纳斯·托瓦兹(LinusTorvalds)在赫尔辛基大学上学时出于个人爱好而编写的。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务......
  • 一款在Linux 中将网页转成 PDF 的智能工具
    wkhtmltopdf是一个开源、简单而有效的命令行 shell 程序,它可以将任何HTML(网页)转换为PDF文档或图像(jpg、png等)。wkhtmltopdf是用C++编写的,并在GNU/GPL(通用公共许可证)下发布。它使用WebKit渲染引擎将HTML页面转换为PDF文档且不会丢失页面的质量。这是一个......
  • Linux,shell入门,第二篇
    #!/bin/bash#显示出本机的ip地址方法一#ipa|grepdynamic|tr-s''\/|cut-d'/'-f3#显示出本机的ip地址方法二ipa|sed-rn's/(.*inet)([0-9].*)(\/[0-9].*)(brd.*)/\2/p'#显示出本机ip地址方法三#hostname-I#把ip地址赋值给变量ipaddr,上述三种方法均可ipaddr=......
  • linux shell template
    Replaceenvironmentvariablesinafilewiththeiractualvalues?#config.xml<property><name>instanceId</name><value>$INSTANCE_ID</value></property><property><name>rootPath</name>......
  • linux常用命令
    1.linux常用命令1.1简介Linux_百度百科(baidu.com)1.2虚拟机相关安装:虚拟机安装linux,这里不做介绍登录:如果是root,提示符为#,普通用户则为$退出:logout重启:reboot关机:halt1.3linux文件系统了解即可linux下一切皆是文件目录结构1.3.1 目录说明 /:为跟目录/bin:b......
  • Linux相关概念及操作
    目录linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。1./bin是Binary的缩写,这个目录存放着最经常使用的命令2./opt这是给主机额外安装软件所存放的目录。如安装ORACLE数据库就可放到该目录下。默认为空3./boot......
  • Linux 切换用户及环境变量的问题
    背景前几天用Linux的时候遇到一个问题,使用su切换用户时,用户已经切换了,但是环境变量却还是原来用户的,导致命令执行不了。现象首先,用普通用户登录Linux,运行echo$PATH:square@debian:~$whoamisquaresquare@debian:~$echo$PATH/home/square/.local/bin:/usr/local/bin:/usr/......
  • linux LVS+Keepalived
    keepalived服务主要用来做高可用,高可用在企业中是非常重要的技术,避免数据丢失和服务停止。目录一、keepalived概述二、keepalived实验原理三、keepalived模块四、实验演示五、总结        一、keepalived概述  1.keepalived服务重要功能......
  • Linux 使用 dup2 无法正常重定向管道 tinyhttpd
    项目地址:https://github.com/pphboy/pihttpd文件p_sys.ctinyhttpd是这样写的但是文档是,旧的在前,新在后intdup2(intoldfd,intnewfd);所以是,才能正常输出和输入dup2(1,in_pipe[1]);dup2(0,out_pipe[0]);......
  • 扫描linux系统磁盘占用,释放空间的免费工具
    如何查找linux系统的磁盘占用,扫描大文件,释放空间,可以使用免费工具ncdu。虽然有du和df命令可以查询磁盘和文件夹的大小,但毕竟不方便,不能扫描整个磁盘的情况。用ncdu命令更直观,可以按目录以树形显示每个文件夹的大小,找到占空间的文件或者文件夹,删除释放磁盘空间。并且扫描速度飞快......