最近幾個月公司太忙了,到現在已經連續出差兩個多月了。
這個項目這要做mes系統,涉及到產品在機床的加工過程監控,然后led看板顯示產品進度。
這里的主角是日本的brother數控機床,服務器按照一定頻率讀取機床的生產數據,最基本的包括機床的工件產量,開機狀態等信息。
后台是Java寫的,其中一部分是led顯示機床數據,而讀取機床數據的部分本來想用dotnet做個Windows服務,可是折騰了很長時間還是沒有搞定。
brother機床設備里面是個Linux系統,里面架設有ftp服務,可以從遠程pc訪問數據庫nc文件,第一次用dotnet無法讀取,原因是項目所在目錄包含中文字符,后來換個位置后可以讀取。如今在純英文目錄都不行,換了好幾台設備還是不行,一直提示“基礎連接已經關閉: 服務器提交了協議沖突”,網上很多資料都說是目錄含有中文字符,可是我再三確認沒有中文,我用的系統是win10 x64專業版,也有說是使用了代理,我把reqFtp.Proxy = null;還有關掉本地防火牆,主動被動模式都不行。
最后只能放棄,第二天早上突發奇想,用python寫個腳本試試,果真見效,只能說dotnet framework 在ftp方面還是存在不少bug。以下是python腳本:
1 # coding: utf8 2 from ftplib import FTP 3 4 5 def download(host='192.168.1.5', port=21, user='1234', pwd='1234', nc='WKCNTR.NC'): 6 cnc = FTP() 7 try: 8 cnc.connect(host=host, port=port, timeout=10) 9 except Exception as e: 10 print(e) 11 return 12 try: 13 cnc.login(user=user, passwd=pwd) 14 except Exception as e: 15 print(e) 16 return 17 print(cnc.getwelcome()) 18 for name in cnc.nlst(): 19 print(name) 20 file = open('d:/' + nc, 'w', encoding='utf8') 21 22 def save_local(line): 23 file.write(line + '\n') 24 print(line) 25 26 cnc.retrlines('RETR ' + nc, save_local) 27 file.close() 28 cnc.quit() 29 30 if __name__ == '__main__': 31 download(host='192.168.26.5')
下面是新的進展,由於cnc brother的ftp並不穩定,有時會不允許連接,或連接后不允許下載文件,只要出現這種情況,就再也無法回復,只有重啟。