首先说说结论:在不和SEW官方取得沟通之前,你几乎无法直接通过查阅SEW官方文档得到相关减速机的所有技术参数:比如轴的模数和齿数,轴承的参数。我在周一耗费了一个上午,最终和SEW方面确认后才知晓相关技术参数需要凭借销售合同查询。不过,也把我做的搜集和尝试列在后面。
前面的参数查询里,漏掉了一种减速机,就是行星齿轮减速机。这个产品的故障频点需要另行分析。
1.一个失败的尝试
案例一 Gear reducer 32.38:1 ST77DT100L4-KS 二手价 290刀
这个减速机是在bing.com上搜索"SEW gearbox ratio 35.5 tag",随机找到一个铭牌:
注意sn = 890036862.08.07.001
1.1 SEW资料库的资料全集:
首先在SEW资料库里找到,因为有序列号。
https://www.sew-eurodrive.cn/os/dud/?tab=productdata&country=CN&language=zh_cn1
1.1.1 产品参数:
从产品参数页面可以知道:
- 变速比32.38
- 460V/60Hz的电压是美标电机
Catalog designation | ST77DT100L4-KS |
Product data | |
Serial number | 890036862.08.07.001 |
Gear ratio | 32.38 |
Output speed | 52 |
Mounting position | M4B |
Shaft diameter | NP-NS |
Terminal box position | 0 |
Cable entry at terminal box | X |
Output torque (lb-in) | 5375 |
Service factor | 1.7 |
Motor power | 5 |
Motor voltage | 230YY/460Y |
Frequency | 60 |
Wiring diagram | DT79 |
Rated current | 13.6/6.8 |
KVA Code | G |
Thermal class | F |
Other | CB@0, CE X, Bore Size=1 5/8 |
Weight | on request |
2.原始资料搜集和故障频点计算.py程序(片段)
频点计算部分可以自动进行。我现在的做法是使用.json搜集相关信息,然后使用python自动计算,请参见附录A,附录B.
最终我们需要计算出相关的故障频点有多少,分别隶属于哪根轴,哪个齿轮,那个轴承。在故障发生后,还需要反向查询这个故障频点表,来搜索出可能出问题的故障源。这个过程,无需人工参与,是可以自动计算的。
附录A 机械设备相关振动配置信息搜集(.json)
仅仅是一个示例
{"author": "fengxh","desc": "产品的一级参数录入,注意不要混入任何可以自动计算的结果","json_format": "1.0","created": "Apr16,2024","last_modify": "Apr16,2024","CAD_file": "xxxxx.pdf","unit": {"engine": {"type": "xxxx","manualfacture": "xxxx","PinKw": 30,"type_rpm": 730},"gearbox": {"type": "xxxxx","ratio": 75.577,"shaft_in": {"desc": "变速箱输入轴","memo": "输入轴 - 一个外齿轮,一个输入大齿轮,一个输出小齿轮,2个轴承","gear": [{"type": -1,"memo": "外齿轮","module": -1,"tooth": -1},{"type": -1,"memo": "输入大齿轮","module": -1,"tooth": -1},{"type": -1,"memo": "输出小齿轮","module": -1,"tooth": -1}],"bearing": [{"type": -1,"memo": "动力端轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1},{"type": -1,"memo": "随动轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1}]},"shaft_inter": [{"sn": 1,"desc": "变速箱二级输入轴","memo": "中间轴 - 一个输入大齿轮,一个输出小齿轮,2个轴承","gear": [{"type": -1,"memo": "输入大齿轮","module": -1,"tooth": -1},{"type": -1,"memo": "输出小齿轮","module": -1,"tooth": -1}],"bearing": [{"type": -1,"memo": "动力端轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1},{"type": -1,"memo": "随动轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1}]},{"sn": 2,"desc": "变速箱三级输入轴","memo": "中间轴 - 一个输入大齿轮,一个输出小齿轮,2个轴承","gear": [{"type": -1,"memo": "输入大齿轮","module": -1,"tooth": -1},{"type": -1,"memo": "输出小齿轮","module": -1,"tooth": -1}],"bearing": [{"type": -1,"memo": "动力端轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1},{"type": -1,"memo": "随动轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1}]}],"shaft_out": {"desc": "变速箱输出轴","memo": "输出轴 - 一个输入齿轮,2个轴承","gear": [{"type": -1,"memo": "输入大齿轮","module": -1,"tooth": -1}],"bearing": [{"type": -1,"memo": "动力端轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1},{"type": -1,"memo": "随动轴承","outer_edge_D_in_mm": -1,"inter_edge_D_in_mm": -1,"ball_D_in_mm": -1,"ball_cnts": -1}]}},"final_output": {"name": "齿轮齿条摇架","gear": [{"type": -1,"memo": "输入外齿轮","module": 20,"module_scale": "mm","tooth": 16},{"type": -1,"memo": "齿条","module": 20,"module_scale": "mm","length": 4631}]},"smooth_oil": {"desc": "润滑液","std_tempeature": -1,"deadline_tempeature": -1}}
}
附录B 故障频点自动解析程序(.py)
并不完整,仅显示部分逻辑。可以逆推处理的方法。
''''
''''class GpGearDesc:def __init__(self, module, tooth, ratioOfShaft):self.module = moduleself.tooth = toothself.ratioOfShaft = ratioOfShaftself.ratioOfGear = ratioOfShaft*toothdef __hash__(self):# 返回一个哈希值,通常可以使用内置类型的哈希值,比如元组return hash((self.module, self.tooth))def __eq__(self, other):# 定义相等性判断逻辑return isinstance(other, GpGearDesc) and (self.module == other.module) and (self.tooth == other.tooth)def __str__(self):return str("gear.errFreq:%8.3f, with(shaftRatio=%8.3f, module=%8.3f, tooth=%8.3f" (self.ratioOfGear, self.ratioOfShaft, self.module, self.tooth))def __repr__(self):return f"GpGearDesc('moudle = {self.module}', tooth = {self.tooth})"''''
''''
def getVibrationSensorList_v1(filename):# 读取JSON文件sensor_data={}with open(filename, 'r', encoding='utf-8') as file:sensor_data = json.load(file)# 初始化温振型传感器数量total_temperature_vibration_sensors = 0# 遍历每个单元sensor_location = []for unit in sensor_data["sensors"]:# 获取当前单元的温振型传感器数量unit_temperature_vibration_sensors = sum(unit["sensors"]["温振型"].values())locations = unit["sensors"]["温振型"].keys();cntOfLocation = unit["sensors"]["温振型"].values();for loc in unit["sensors"]["温振型"]:for j in np.arange(unit["sensors"]["温振型"][loc]):sensor_location.append(unit["unit"] + "\\" + loc + "\\" + str("%02d" %j))# 将当前单元的数量添加到总数中total_temperature_vibration_sensors += unit_temperature_vibration_sensors# 打印总数print("总温振型传感器数量:", total_temperature_vibration_sensors) print(sensor_location)return sensor_locationdef doGearsOfShaft(gearsArray, shaftRpm, shaftName, arGear, last_gear_tooth):gearIdx = 1for gear in gearsArray:gearName = str(shaftName+"\\gear\\%d" %gearIdx)gearRpmRatio = shaftRpm;gearTooth = gear["tooth"]gearModule = gear["module"]arGear |= {gearName: GpGearDesc(gearModule, gearTooth, gearRpmRatio)}gearIdx=gearIdx+1last_gear_tooth = gearToothreturn last_gear_toothdef doBearingsOfShaft(bearingArray, shaftRpm, shaftName, arBearing):bearingIdx = 1for bearing in bearingArray:bearingName = str(shaftName +"bearing\\%d" %bearingIdx)outer_edge_D_in_mm = bearing["outer_edge_D_in_mm"]inner_edge_D_in_mm = bearing["inter_edge_D_in_mm"]ball_D_in_mm = bearing["ball_D_in_mm"]ball_cnts = bearing["ball_cnts"]arBearing |= {"bearingName": GpBearingDesc(outer_edge_D_in_mm*1e-3, inner_edge_D_in_mm*1e-3, ball_D_in_mm*1e-3, ball_cnts, shaftRpm)}bearingIdx += 1def getVibrationUnitsOf(arJsonFiles):ret=[]# 遍历每个单元arShaft = {}arGear = {}arBearing = {}for filename in arJsonFiles:# 读取JSON文件sensor_data={}with open(filename, 'r', encoding='utf-8') as file:sensor_data = json.load(file)# 初始化温振型传感器数量total_vibration_units = 0last_gear_tooth = -1for unit in sensor_data["unit"]:if "gearbox" == unit:shaftRpm = 1.0;if("shaft_in" in sensor_data["unit"]["gearbox"].keys()):si = sensor_data["unit"]["gearbox"]["shaft_in"]shaftName = filename + "\\gearbox\\shaft_in";shaftRpm = shaftRpm*si["gear"][0]["tooth"]/si["gear"][1]["tooth"]arShaft |= {shaftName:shaftRpm}last_gear_tooth = doGearsOfShaft(si["gear"], shaftRpm, shaftName, arGear, last_gear_tooth)doBearingsOfShaft(si["bearing"], shaftRpm, shaftName, arBearing)if("shaft_inter"):rpmUpdated = False;for si in sensor_data["unit"]["gearbox"]["shaft_inter"]:if not (rpmUpdated):shaftRpm = shaftRpm*si["gear"][0]["tooth"]/last_gear_toothrpmUpdated = TrueshaftName = filename + "\\gearbox\\shaft_inter";arShaft |= {shaftName:shaftRpm}last_gear_tooth = doGearsOfShaft(si["gear"], shaftRpm, shaftName, arGear, last_gear_tooth)doBearingsOfShaft(si["bearing"], shaftRpm, shaftName, arBearing)if("shaft_out" in sensor_data["unit"]["gearbox"].keys()):si = sensor_data["unit"]["gearbox"]["shaft_out"]shaftRpm = shaftRpm*si["gear"][0]["tooth"]/last_gear_toothshaftName = filename + "\\gearbox\\shaft_out";arShaft |= {shaftName: shaftRpm}last_gear_tooth = doGearsOfShaft(si["gear"], shaftRpm, shaftName, arGear, last_gear_tooth)doBearingsOfShaft(si["bearing"], shaftRpm, shaftName, arBearing)# 打印总数#return (arShaft, arGear, arBearing)