當前位置:首頁 » 編程語言 » 採集設備數據到sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

採集設備數據到sql

發布時間: 2023-02-09 08:19:08

❶ 如何將pdf 中的數據快速導入到sql server 中,類似下圖中的數據一樣。

這個東西很復雜。
首先,要做數據的結構化處理 。你可以將PDF數據先轉成word。然後再建個EXCEL表將WORD轉到excel。
其次,利用sqlserver的數據導入工具將excel數據轉成SQLSERVER數據。

❷ 遠程數據採集系統設計,數據傳輸到上位機。通過3G無線傳輸,傳到監控中心後,怎麼把數據存儲SQL資料庫

數據中心動態庫說明

1、數據類型

typedefUINT u32t;

typedefUCHAR u8t;

typedefUSHORT u16t;

typedefULONG u64t;

2、數據結構

1) 用以區分標識各台DTU的數據結構

typedefstruct_modem_info_t_

{

u32t m_modemId; //Modem模塊的ID號

u8t m_phoneno[12]; //Modem的11位電話號碼,必須以''字元結尾

u8t m_dynip[4]; //Modem的4位動態ip地址

u64t m_conn_time; //Modem模塊最後一次建立TCP連接的時間

u64t m_refresh_time; //Modem模塊最後一次收發數據的時間

}ModemInfoStruct;

2) DTU數據包的數據結構

#defineMAX_RECEIVE_BUF1450

typedefstruct_modem_data_t

{

u32t m_modemId; //Modem模塊的ID號

u64t m_recv_time; //接收到數據包的時間

u8t m_data_buf[MAX_RECEIVE_BUF+1]; //存儲接收到的數據

u16t m_data_len; //接收到的數據包長度

u8t m_data_type; //接收到的數據包類型,

// 0x01:用戶數據包

// 0x02:對控制命令幀的回應

}ModemDataStruct;

以上u64t類型的時間是基於GMT時間1970年1月1日0:00:000以來的秒數指示時間值,即當前時間距1970年1月1日0點0分0秒以秒為單位的數值。在大多數語言都提供轉換函數。

3、API函數說明

1) BOOLDSStartService(u16tuiListenPort);

功能:啟動伺服器的數據服務

參數:u16ListenPort:服務的偵聽埠

返回:成功返回TRUE,失敗返回FALSE;

說明:啟動伺服器的數據服務。啟動數據服務後,伺服器偵聽在指定埠。

如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

2) BOOLDSStopService(void);

功能:停止伺服器的數據服務

參數:無

返回:成功返回TRUE,失敗返回FALSE;

說明:停止伺服器的數據服務。所有的DTU都將下線。

如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

3) BOOLDSGetNextData(ModemDataStruct*pDataStruct,u16twaitseconds);

功能:讀取下一條DTU送上來的信息

參數:pDataStruct:存放DTU所送上來的信息和數據的結構,讀函數執行成功後,返回的數據存放到該參數指向的結構中

waitseconds:本函數讀到數據後立即返回;如果沒有數據到達,則等待最長waitseconds(時間單位:秒)的時間,直到有數據到達,取值范圍從0~65535,如果取值為0表明本函數將立即返回。另外,當在另一個線程中執行成功了DSStopService()後,本函數將立即返回。

返回:成功返回TRUE,失敗返回FALSE;

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

4) BOOLDSSendData(u32tmodemId,u16tlen,u8t*buf);

功能:向指定ID號的的DTU發送數據

參數:modemId:DTU的ID號,用以標識一個DTU

len:待發送的數據長度(位元組數),數據長度必須小於或等於1450個位元組

buf:待發送的數據

返回:成功返回TRUE,失敗返回FALSE;

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

5) BOOLDSSendControl(u32tmodemId,u16tlen,u8t*buf);

功能:向指定ID號的的DTU發送控制命令

參數:modemId:DTU的ID號,用以標識一個DTU

len:待發送的控制命令長度(位元組數),數據長度必須小於或等於1000個位元組

buf:待發送的控制命令幀

返回:成功返回TRUE,失敗返回FALSE

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。]

6) u32tDSGetModemCount(void);

功能:取得當前在線的所有的DTU的總數

參數:無

返回:得到在線的DTU的數量

7) BOOLDSGetModemByPosition(u32tpos,ModemInfoStruct*pModemInfo);

功能:取得指定位置的DTU的數據;

參數:pos:DTU列表中的位置信息,0代表第一個DTU位置;

pModemInfo:指向用以保存DTU信息的數據結構;

返回:成功返回TRUE,失敗返回FALSE

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

一般來說DSGetDtuCount()和DSGetDtuByPosition()函數配合使用,用以查看當前所有DTU的信息,如下例所示:

u32t uiDtuCount;

uiDtuCount=DSGetDtuCount();

DtuInfoStruct dtuInfo;

u32t i;

for(i=0;i<uiDtuCount;i++)

{

DSGetDtuByPosition(i,&dtuInfo);

//對dtuInfo進行操作

}

8) voidDSGetLastError(char*str,intnMaxBufSize);

功能:獲得先前API執行時發生的錯誤;

參數:str:用來存放錯誤信息的緩沖區;

nMaxStrSize:緩沖區的最大長度,如果錯誤信息的大小超過了這個值,則此函數將把錯誤信息的尾部截除。

返回:無

9) BOOLDSDisconnect(u32tmodemId);

功能:斷開指定ID號的DTU連接

參數:modemId:DTU的ID號,用以標識一個DTU

返回:成功返回TRUE,失敗返回FALSE

說明:如果失敗了,可以調用DSGetLastError()函數查看錯誤原因。

4、函數的具體使用

3) 導入動態庫

調用WINDOWSAPI函數LoadLibrary裝載動態庫,如下:

HMODULE DllMule; //指向動態庫的句柄

BOOL(*DSStartService)(u16t); //定義一個指向函數的地址的指針

hDllMole=LoadLibrary(「gprsdll.dll」);

If(hDllMole!=NULL) //判斷調用是否成功

{

//從動態庫中取函數地址

DSStartService=GetProcAddress(hDllMole,」DSStartService」);

if(DSStartService!=NULL) //判斷是否取到該函數地址

{

if((*DSStartService)(5001)!=FALSE)

MessageBox(「啟動成功」);

Else

MessageBox(「啟動失敗」);

}

}

在程序開始時需要調用動態庫,程序運行完畢後,要釋放動態庫,調用windowsAPI函數FreeLibrary可釋放動態庫:

FreeLibrary(hDllMole);//TRUE-successFALSE-failed

程序中LoadLibrary次數必須和FreeLibrary相同,每調用一次LoadLibrary,相應的應該調用一次FreeLibrary,保證每次調用後都會釋放。

4) 啟動服務

首先從動態庫中取到該函數地址,取到地址後,就可以執行該函數,如下:

BOOL(*DSStartService)(u16t); //定義一個指向函數的地址的指針

DSStartService=(BOOL(*)(u16t))GetProcAddress(hDllMole,「DSStartService」);

if(DSStartService!=NULL)

{

(*DSStartService)(5001);

}

5) 停止服務

BOOL(*DSStopService)(void);

DSStopService=(BOOL(*)(void))GetProcAddress(hDllMole,「DSStopService」);

If(DSStopService!=NULL)

(*DSStopService)();

6) 讀數據

BOOLDSGetNextData(ModemDataStruct*,u16t);

DSGetNextData=

(BOOL(*)(ModemDataStruct*,u16t))GetProcAddress(hDllMole,「DSGetNextData」);

if(DSGetNextData!=Null)

if((*DSGetNextData)(&dtudata,100)==0) //dtudata為DtuDataStruct型結構

//如果沒有數據最長等待100秒

{

//處理結構dtudata中的數據

}

7) 發送數據

BOOLDSSendData(u32t,u16t,u8t*);

DSSendData=(BOOL(*)(u32t,u16t,u8t*))GetProcAddress(hDllMole,「DSSendData」);

if(DSSendData!=NULL)

{

(*DSSendData)(nID,len,buf);

}

8) 用戶列表

底層服務維護一張用戶列表,記錄當前在線用戶的信息,DSC如果想知道底層用戶列表,需要調用提供的API函數:DSGetModemCount、DSGetModemByPosition

for(u32ti=0;i<(*DSGetModemCount)();i++)

{

(*DSGetModemByPosition)(i,&dtuinfo);

//1、處理記錄用戶信息記錄dtuinfo中的信息;

}

9) 錯誤信息

可以通過調用DSGetLastError()函數來獲得上次調用API函數失敗後的具體的錯誤信息。

charszErrorMsg[256];

DSGetLastError(szErrorMsg,255);

這個是廈門才茂DTU動態庫文件,如果需要咨詢更詳細,可以直接聯系廈門才茂技術,或者直接到他們網站咨詢

❸ 有數據,需要通過PC機,用rs485採集,然後存到SQL資料庫中。 不太懂這個過程要怎麼實現,求大

串口讀寫,設置好設備與PC的相關串口參數,PC機向設備發送通信命令,設備返回相關信息,跟據數據設定拆分出你所需的數據寫入SQL資料庫即可

❹ ABPLC如何採集讀寫MYSQL資料庫

通過資料庫網關連接羅克韋爾1756-L72的乙太網埠標簽方式採集數據,將數據存入MySQL資料庫,以下描述具體的操作步驟。PLC數據MQTT多主題發布/訂閱西門子PLC數據採集到資料庫

網關模塊安裝在設備側,不用電腦軟體,隨設備上電啟動自動運行,保證設備數據採集與設備運行同步,簡單高效的完成了數據採集;已批量用於多種行業的智能工廠,大大提高MES等工業互聯網項目的實施效率。IGT-DSER帶有兩種數據緩存功能:

1. 高頻次採集數據緩存,打包後一次性上報到資料庫;

2. 斷網、伺服器維護上報異常時,將數據緩存,待故障解除後重新上報到資料庫

網關支持西門子、三菱、歐姆龍、施耐德等幾乎所有的PLC品牌,通過以上參數軟體自行切換即可;關於網關模塊的詳細介紹可查看CSDN的這篇文章,或者到這里下載PDF手冊。以下是詳細的操作步驟:


首先用Navicat連接伺服器資料庫,建立一個數據表,名稱為'abplcdata',數據表設計視圖如下:

然後在PC上運行網關的參數設置軟體,網線連接IGT-DSER網關的網口1,先配置網路參數(默認IP:192.168.1.244,確認PC的網口與網關默認IP同網段),通過『工具』->『搜索在線網關』,搜索到網關後,修改IP地址等參數,具體如下:


網口1.PLC設備末段IP設置為0表示有多台同系列同網段的PLC,每台PLC的IP地址在PLC數據地址表裡面配置,後面有描述;設置完成後通過『參數』->『參數寫入到網關』,下載參數,會有以下提示:

點『是(Y)』即可,參數下載成功後將網關斷電,網口1接入PLC的交換機網路,同時修改PC的網口參數為PLC同網段,重新搜索網關讀取參數後,通過『功能』->『數據上報與下載』進入數據服務配置頁面,選擇SQL遠程資料庫,配置資料庫地址、PLC標簽的參數;


配置完成後要下載參數,通過『工具』->『重啟網關』,重啟後,網關即進入工作狀態,通過讀取參數可查看網關的實際數據,雙擊配置表對應的數據序號可查看數據值,如下圖:

序號001是日期時間,取自網關的RTC時鍾;002和003是PLC的控制器二維數組;004、005和006是控制器一維數組;007為程序變數,字元串類型;008是程序數組;009是控制器變數,BOOL類型;

設備/站號欄目的數值9,表示PLC的IP地址(192.168.0.9)末段(前三段與網關的網口1相同),如果需要增加另外的同系列同網段PLC,在這里設置對應的IP末段地址即可,不同的PLC對應不同的數據表,或者不同的記錄行;

需要注意配置表『數據地址』欄是PLC的數據標簽,不能錯誤,否則讀不到數據,所以最好是通過PLC的編程軟體從PLC導出CSV文件,然後復制到配置表,如下圖:

再打開Navicat查看資料庫中的數據,如下圖:

這樣就完成了數據採集,沒間隔5秒網關會自動上報一次數據,這個周期可以調整,也可以設置成觸發模式,根據數據變化上報數據;

相關資源:利用PLC實現數據採集_plc數據採集並存入資料庫,plc數據採集-專業...

————————————————

版權聲明:本文為CSDN博主「肉褚」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_42302872/article/details/113655413

❺ 西門子PLC1200數據如何直接存儲到SQL資料庫中

網上搜到的:
pc從西門子plc讀取數據的方法有兩類:

1是通過wincc這類組態軟體

2是自己用高級語言(vb、vc等等),方法主要有:
opc(西門子simaticnet opc、第三方kepware opc)
prodave(西門子的一個軟體包,提高vb和c的通訊函數庫)
simticnet軟體提供了幾個通訊dll(此法是一般的第三方scada所採用)

可以用其他組態軟體,比如組態王。也可以用vb編寫一程序然後從plc讀取數據再寫入資料庫。如果不需要監控畫面,我覺得vb好些。