转载地址:http://www.cnblogs.com/jonney-wang/p/6238768.html

Tcp方式采集CNC兄弟设备数据

先说下为了采集CNC兄弟设备的数据可谓是一波三折。

因为首次接触brother设备(CNC)是直接在设备上设置IP、用户名、密码,然后直连PC,用Ftp可以查看和下载CNC brother设备里的数据库文件(NC文件)。其实我们最关心的是CNC的“工件计数”,经确认CNC可以实时的将计数写入WKCNTR.NC文件,现在理论上已经没有问题了,可是后面还有很多坑。

我们刚开始是用dotnet来做的,写好demo程序连接brother测试,可是怎么都无法下载,一直提示“基础连接关闭,协议冲突”之类的异常,查资料发现下载后文件保存的是在中文目录下,立马移动文件保存位置保证都在英文目录下,还真的好了!这下太好了。

后来我们就按照这个demo开始编写正式代码,结果怎么都无法下载,试了好多台设备都不行,真的莫名其妙、一头雾水。并且提示的异常都是“基础连接关闭,协议冲突”,这次可不是中文目录的问题了。于是就在google上查资料,各种方法都试了,结果还是不行,不能一头撞死南墙,最后放弃了。

灵光一闪,为什么不用python试试呢,于是随手写了个demo程序,也就有了上一篇随笔《远程监控显示brother数控机床数据》,结果真的好了很轻松就搞定了,并且所有的16台CNC brother设备都可以正常采集数据,按照30秒频率将采集到的数据写入数据库(mariadb),别慌到这里才是欢喜了一半。

真正运行起来稳定性可没那么好,刚开始16台都好好的,没过1天就有一台出现问题,现象是可以ping通,可以连接到设备,也可以登录,还可以列出设备上所有的文件,但就是无法下载,结果就是超时。后来经过不断调查发现,如果我同时开两个连接都访问这个文件,那么有一个失败超时,另一个居然可以下载读取,太奇妙了,没找到好的办法之前就用这个下下策吧。结果第三天又有一台出现问题,可以ping通,就不让连接了,就好像brother设备上没有开启ftp服务一样。本来好好的,就出现这种莫名其妙的问题,到这里简直郁闷到极点。

总之对这种方案不满意,也考虑到还有4台brother CNC设备没有ftp服务可以利用,于是找设备科找brother的操作手册参考书,看是否有其他方法。结果在第五章关于通信,还真的找到了,Tcp通讯协议在眼前一亮,再细看具体的指令协议,只能看懂指令必须以%开始,以%结束,里面的就不懂了。只好再拨打供应商电话,说明情况请求两个%之间的内容怎么写,供应商回复:%CLOD    WKCNTR     + 换行 + 00%

赶紧将指令贴在网络调试助手里,随便连接一台brother,结果真的返回数据了,目标工件计数就在返回的数据里面,接下来的就是解析返回字符串了,这都不是问题。结果不仅16台新的brother设备可以采集到数据,4台老的也可以,并且效率要比ftp要高很多。

下面就把最重要的部分代码贴出来:

private int GetCncDada(string ip){TcpClient client = new TcpClient();int cnc = -1;try{client.Connect(new IPEndPoint(IPAddress.Parse(ip), 10000));if (client.Connected){var networkStream = client.GetStream();var buffer = Encoding.UTF8.GetBytes("%CLOD    WKCNTR    \r\n00%");networkStream.Write(buffer, 0, buffer.Length);networkStream.ReadTimeout = 3000;var readBuffer = new byte[1024];var len = networkStream.Read(readBuffer, 0, readBuffer.Length);var result = Encoding.UTF8.GetString(readBuffer, 0, len);//_logger.Debug(result);networkStream.Close(3000);var lines = result.Split(new[] { Environment.NewLine }, StringSplitOptions.None);foreach (var line in lines){if (line.StartsWith("A01")){var fields = line.Split(',');_logger.Debug("工件计数 = " + fields[2].Trim());cnc = Convert.ToInt32(fields[2].Trim());break;}}}return cnc;}catch (Exception err){_logger.Error(err);return cnc;}finally{if (client.Connected){client.Close();}}}

以下是python版的代码:

# coding: utf8
import socket
import pymysql
import os
import time
cnc_config = [('J01', "192.168.1.40"), ('J02', "192.168.1.41"), ('J03', "192.168.1.42"), ('J04', "192.168.1.43"),('J22', "192.168.1.44"), ('J21', "192.168.1.45"), ('J20', "192.168.1.46"), ('J19', "192.168.1.47"),('J18', "192.168.1.48"), ('J17', "192.168.1.49"), ('J16', "192.168.1.50"), ('J15', "192.168.1.51"),('J14', "192.168.1.52"), ('J13', "192.168.1.53"), ('J12', "192.168.1.54"), ('J11', "192.168.1.55"),('J37', "192.168.1.56"), ('J36', "192.168.1.57"), ('J35', "192.168.1.58"), ('J34', "192.168.1.59")]def get_from_brother(ip='127.0.0.1', port=10000):client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.settimeout(3)try:client.connect((ip, port))instruct = '%CLOD    WKCNTR    ' + os.linesep + '00%'client.send(instruct.encode())lines = client.recv(1024).decode().split(os.linesep)lines = [line for line in lines if line.startswith('A01')]  # 选出以A01开头的行fields = lines[0].split(',')  # 拆分出字段,第3个字段就是目标[工件计数]return int(fields[2].strip())except Exception as e:print(ip, e)return -1finally:client.close()def save_db(name='J44', qty=-1):try:conn = pymysql.Connect(user='root', password='1234', database='dademes', charset='utf8')cus = conn.cursor()if qty == -1:cus.execute('update kbequipment set running=%s where name=%s', ('关机', name))else:cus.execute('update kbequipment set running=%s, status=%s where name=%s', ('正常', qty, name))conn.commit()cus.close()conn.close()except Exception as e:print('机台号=%s保存数据异常,%s' % (name, e))if __name__ == '__main__':while True:try:for cnc_name, ip in cnc_config:print('正在读取机台号=%s,ip=%s' % (cnc_name, ip))qty = get_from_brother(ip=ip)save_db(qty=qty, name=cnc_name)except Exception as e:print('__main__', e)finally:print('CNC数据读取完毕...30秒后再次读取...')time.sleep(30)

Tcp方式采集CNC兄弟设备数据相关推荐

  1. 三菱数控系统M70 M80,纯协议TCP方式采集实战,windows,linux,C#,java,C,C++都能调用

    1.用三菱SDK的方式采集,需要安装驱动包,这个驱动包是windows 操作系统下,做网关的不能用这种方式采,可以用纯tcp协议 2.有了这个协议,不管你用C# ,JAVA,C或者其它语言来实现TCP ...

  2. opc服务器组态文件已写保护_「杰控软件」OPC代理服务,通过OPC方式采集远程OPC服务...

    34.OPC 代理服务 34.1 OPC 代理服务.实现功能  由两个只需拷贝的文件组成,拷贝到远程计算机任何目录,脱离组态软件运行;  通过 OPC 方式采集远程 OPC 服务器数据;  对采 ...

  3. 第一节 使用ISM Web组态软件采集Modbus设备数据

    系列文章目录 第一节 使用ISM Web组态软件采集Modbus设备数据 文章目录 系列文章目录 前言 一.登录系统,并创建项目 二.创建Modbus设备数据模型 三.添加Modbu设备模型的寄存器组 ...

  4. 实验室信息化LIMS如何采集实验室仪器设备数据?

    1. 简述 数据采集功能,数据采集工具将以客户端的形式运行在与设备连接的工作站电脑上,主要负责将设备产生的完整的可输出的原始结果提取到LIMS系统,供实验室人员进行报告生成,汇总等操作. 2. 实现方 ...

  5. 17. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据++dma中断通知

    adc 使用教程3-dma方式采集数据+dma中断通知 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 1. ...

  6. 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据

    adc 使用教程2-dma+连续扫描方式采集数据 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 1.时钟配 ...

  7. TDengine极简实战:从采集到入库,从前端到后端,体验物联网设备数据流转

    作者:牛晓青 背景 我们的项目涉及物联网相关业务,由于一开始的年少无知,传感器数据采用了 MySQL 进行存储,经过近两年的数据累积,目前几个核心表单表数据已过亿,虽然通过索引优化. SQL 优化以及 ...

  8. vue2的三种传值方式之父传子、子传父、兄弟共享数据

    vue2的三种传值方式之父传子.子传父.兄弟共享数据 1. 父传子 <!-- 父组件 --> <template><div class="app"&g ...

  9. 重新设计TCP/IP协议栈以支持设备移动性

    上帝管上帝的,凯撒管凯撒的!耶稣这样说过. 如果这句话传到包容的罗马皇帝或者罗马元老院耳朵里,估计就没有基督教了吧,只是那可恶的总督本丢.彼拉多和犹太权贵勾结,滥用了职权,才使耶稣成了基督,一起简单的 ...

最新文章

  1. 一文详解科研中的Paper阅读方法!!!
  2. day15-JavaScript字符串操作以及跑马灯示例
  3. springmuvc如何设置jsp的input跳转_如何扩大私域流量?「上线了」跳转小程序来帮你...
  4. MyEclipse6.0下代码提示(alt+/)无法使用的解决方法
  5. appium java版本错误_升级Appium最新java-client 6.0.0包后-问题来了...
  6. ft2232驱动安装方法_ST-Link资料03_ST-Link固件升级、驱动下载安装方法
  7. 我心中的ASP.NET Core 新核心对象WebHost(二)
  8. Hadoop 基础系列一Hadoop 系列之 1.0 和2.0 架构
  9. Socket I/O模型全接触
  10. 不来看看这些 VUE 的生命周期钩子函数? | 原力计划
  11. python pip卸载不了库,比如使用pyinstaller时greenlet报错但卸载不了
  12. 11x 程序员专属 TapTap 代码编辑器主题
  13. 收藏:产品经理和技术经理等的OKR模板大全
  14. 手把手教你R语言CIBERSORT计算免疫浸润+Rproject的使用
  15. Centos7之清理/var/tmp目录下内容
  16. Android中的封装流式布局FlowLayout
  17. 1413. 逐步求和得到正数的最小值
  18. 云服务器修改虚拟内存,云服务器可以设置虚拟内存
  19. Android 开发 入门
  20. 插画手绘培训,“安利25周年”插画主题创作:畅游RichJay的创业之旅!【创业篇】

热门文章

  1. 深入浅出python机器学习_3.3.1_对数据集进行分析
  2. java面试换背景颜色_证件照换底色 证件照换背景 证件照背景颜色
  3. 如何将Git上的项目克隆到idea中
  4. 又到了上云时刻啦!!!阿里云 Docker部署SpringBoot项目 方便测试的部署方式
  5. python写表格_python写入表格
  6. mel表达式_maya 2012 mel 表达式编辑器
  7. 2021高考杭二中成绩查询,浙江高中成绩排名2021,浙江中考分数线排行榜
  8. 做折线图坐标轴数字_你做的柱状图太丑了,这些美化技巧教给你(收藏)
  9. 医学计算机教学计划,医学院教学计划
  10. python代码编辑器下载_编程猫Python编辑器