Daftar Isi
Penghitungan footage dan area produksi (beberapa matriks)
Beban
Membuang data dengan PyODBC
Mengupload Data Menggunakan MsSQL Library SL
Penghitungan footage dan area produksi (beberapa matriks)
Matriks rekaman produk manufaktur menurut profil dan formatnya adalah larik dua dimensi A 6 * 6, yang dibagi lagi menjadi larik dua dimensi B p * f, di mana p = 5 adalah profil kerut, f = 5 adalah format, dan Z p satu dimensi adalah jumlah meter yang diproduksi oleh profil bergelombang dan Z f - jumlah meter yang diproduksi dengan format. Dengan demikian, matriks Zp adalah matriks satu dimensi dari 5 elemen, itu adalah jumlah kolom dari matriks A, Zf adalah matriks satu dimensi dari 5 elemen, itu adalah jumlah baris dari matriks A. produk.
Ini juga mengambil 2 matriks satu dimensi lagi: Sp - area produk yang diproduksi oleh profil dan Sf - area produk yang diproduksi oleh format dan matriks konstan F - matriks satu dimensi dari 5 elemen - daftar format bahan baku.
Berurusan dengan mengisi! Sekarang aljabar dimulai.
Jumlah untuk format dan profil dihitung dengan menambahkan baris dan kolom, masing-masing, dari matriks A.
Perhitungan luas berdasarkan format sangat sederhana, kita cukup mengalikan 2 matriks A dan F
atau
Area dengan profil bergelombang:
Daftar blok fungsi
FUNCTION_BLOCK Format_math
VAR_INPUT
EN:BOOL;
imp:BOOL;
END_VAR
VAR_INPUT RETAIN
f:INT := 1;
p:INT := 1;
END_VAR
VAR_INPUT
l_roll:REAL;
k_imp:INT;
res:BOOL;
res_month:BOOL;
END_VAR
VAR_OUTPUT
// [f,p], f=6 - , p=6 -
length_f:ARRAY[1..6, 1..6] OF REAL;
wS_f:ARRAY [1..5] OF WORD;
wS_p:ARRAY [1..5] OF WORD;
END_VAR
VAR_OUTPUT RETAIN
S_f:ARRAY [1..5] OF REAL;
S_p:ARRAY [1..5] OF REAL;
END_VAR
VAR_OUTPUT
S_f_month:ARRAY [1..5] OF REAL;
S_p_month:ARRAY [1..5] OF REAL;
END_VAR
VAR
imp_old:BOOL;
f_b: ARRAY [1..5] OF BOOL;
p_b: ARRAY [1..5] OF BOOL;
length_f_old:ARRAY[1..6, 1..6] OF REAL;
i:BYTE;
j: BYTE;
k:REAL;
END_VAR
BEGIN
k:=l_roll/(k_imp*1000);
IF EN AND not imp AND imp_old THEN
length_f[f,p]:=length_f[f,p]+k;
//length_p[p]:=length_p[p]+(l_roll/(k_imp*1000));
END_IF
FOR i:=1 TO 5 DO
length_f[i,6]:=0;
length_f[6,i]:=0;
FOR j:=1 TO 5 DO
length_f[i,6]:=length_f[i,6]+length_f[i,j];
length_f[6,i]:=length_f[6,i]+length_f[j,i];
END_FOR
END_FOR
CASE f OF
1: S_f[f]:=length_f[f,6]*1.050/1000;
2: S_f[f]:=length_f[f,6]*1.250/1000;
3: S_f[f]:=length_f[f,6]*1.400/1000;
4: S_f[f]:=length_f[f,6]*1.575/1000;
5: S_f[f]:=length_f[f,6]*1.600/1000;
END_CASE
FOR i:=1 TO 5 DO
S_p[i]:=length_f[1,i]*1.05/1000+length_f[2,i]*1.25/1000+length_f[3,i]*1.4/1000+length_f[4,i]*1.575/1000+length_f[5,i]*1.6/1000;
wS_p[i]:=REAL_TO_WORD(S_p[i]*10);
wS_f[i]:=REAL_TO_WORD(S_f[i]*10);
END_FOR
IF res THEN
FOR i:=1 TO 6 DO
FOR j:=1 TO 6 DO
length_f_old[i,j]:=length_f[i,j];
length_f[i,j]:=0;
END_FOR
END_FOR
FOR i:=1 TO 5 DO
S_f_month[i]:=S_f_month[i]+S_f[i];
S_f[i]:=0;
S_p_month[i]:=S_p_month[i]+S_p[i];
S_p[i]:=0;
END_FOR
END_IF
IF res_month THEN
FOR i:=1 TO 5 DO
S_f_month[i]:=0;
S_p_month[i]:=0;
END_FOR
END_IF
FOR i:=1 TO 5 DO f_b[i]:=0; END_FOR
FOR i:=1 TO 5 DO p_b[i]:=0; END_FOR
f_b[f]:=TRUE;
p_b[p]:=TRUE;
imp_old:=imp;
END
Beban
RPI 3 model B untuk 4 ribu rubel (di AliExpress 3 ribu rubel). Dimungkinkan untuk bertahan dengan RPI nol yang lebih murah (2 ribu rubel), tetapi kerangka sistem awalnya dikaburkan oleh TK yang tidak ada (mari kita lakukan ini terlebih dahulu, dan kemudian kita akan melihat apakah kita memerlukan sesuatu yang lain. .. kemudian ... dan kemudian ...);
24/5 AliExpress 300 . ( );
CODESYS Control for Raspberry Pi SL 50 . - RealTime 2 , ;
PyODBC
ODBC Raspberry
:
pi@raspberrypi:~ $ sudo apt-get install python3-dev unixodbc-dev git
pi@raspberrypi:~ $ git clone https://github.com/mkleehammer/pyodbc
pi@raspberrypi:~ $ cd pythodbc
pi@raspberrypi:~ $ import pyodbc
pi@raspberrypi:~ $ python3 setup.py
pi@raspberrypi:~ $ cd /home/pi/pyodbc
pi@raspberrypi:~ $ sudo python3 setup.py build
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install g++
pi@raspberrypi:~ $ sudo apt-get install unixodbc-dev
pi@raspberrypi:~ $ pip install pyodbc
pi@raspberrypi:~ $ odbcinst -j
pi@raspberrypi:~ $ cat /etc/odbcinst.ini
[FreeTDS]
Description=FreeTDS Driver v0.91
Driver=/usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
Setup=/usr/lib/arm-linux-gnueabihf/odbc/libtdsS.so
fileusage=1
dontdlclose=1
UsageCount=1
pi@raspberrypi:~ $ cat /etc/odbc.ini
Driver = FreeTDS
Description = My Test Server
Trace = No
ServerName = mssql
#Port = port
instance = MSSQLSERVER #(whatever is the service u r runningcould be SQLEXPRESS)
Database = database_name
TDS_Version = 4.2
pi@raspberrypi:~ $ sudo nano /etc/freetds/freetds.conf
[egServer70]
host = ntmachine.domain.com
port = 1433
tds version = 7.0
[mssql]
host = server_ip_adress
instance = MSSQLSERVER
#Port = port
tds version = 4.2
.
pi@raspberrypi:~ $ sudo python3
>>> server = '192.168.1.2'
>>> port = '1433'
>>> database = 'GA'
>>> username = 'plc'
>>> password = '123456'
>>> cnxn = pyodbc.connect('DRIVER={FreeTDS};SERVER='+server+';PORT='+port+';DATABASE='+database+';UID='+username+';PWD='+ password)
>>> cursor = cnxn.cursor()
>>> cursor.execute('select top 10 ID,Val,Date_Time from tbl_Val')
#cursor.execute('INSERT INTO tbl_Val (ID, Val) VALUES (15, 20)')
>>> rows=cursor.fetchall()
>>> for row in rows: print(row.ID, row.Val)
/home/pi/pyodbc/ βquery.pyβ. , .
import pyodbc
import sys
cnxn = pyodbc.connect('DRIVER={FreeTDS};SERVER='+sys.argv[1]+';PORT='+sys.argv[2]+
';DATABASE='+sys.argv[3]+';UID='+sys.argv[4]+';PWD='
+ sys.argv[5])
cursor = cnxn.cursor()
cursor.execute('INSERT INTO [Py_Tbl] ([ID], [Val]) VALUES ('+sys.argv[6]+','
+sys.argv[7]+')')
cnxn.commit()
5 2 , :
IP ;
( MSSQL 1433);
;
;
;
ID ;
.
SQL_Insert
FUNCTION_BLOCK SQL_Insert
VAR_INPUT
xExecuteScript: BOOL;
Server:STRING := '192.168.1.2';
PORT:INT := 1433;
DB_Name:STRING := 'GA';
login:STRING := 'plc';
password:STRING := '123456';
ID: INT;
Val: REAL;
END_VAR
VAR
pResult: POINTER TO SysProcess.SysTypes.RTS_IEC_RESULT;
Text: string;
END_VAR
BEGIN
IF xExecuteScript THEN
text:='sudo python /home/pi/pyodbc/query.py ';
text:=concat(text,Server);
text:=concat(text,' ');
text:=concat(text,INT_TO_STRING(Port));
text:=concat(text,' ');
text:=concat(text,DB_Name);
text:=concat(text,' ');
text:=concat(text,login);
text:=concat(text,' ');
text:=concat(text,password);
text:=concat(text,' ');
text:=concat(text,INT_TO_STRING(id));
text:=concat(text,' ');
text:=concat(text,REAL_TO_STRING(Val));
SysProcess.SysProcessExecuteCommand(text,pResult);
xExecuteScript:=FALSE;
END_IF
END
query.py . :
pi@raspberrypi:~ $ sudo python /home/pi/pyodbc/query.py server port DB_name login pass id Value
DB_send , ID 10 integer Val 10 real.
FUNCTION_BLOCK DB_Send
VAR_INPUT
id:ARRAY[1..10] OF INT;
val:ARRAY[1..10] OF REAL;
Time_send:TIME :=T#60S;
END_VAR
VAR
SQL_Ins: SQL_Insert;
TONInst: TON;
i: int;
END_VAR
BEGIN
TONInst(IN := NOT(TONInst.Q), PT:= Time_send);
IF TONinst.Q THEN
FOR i:=1 TO 10 DO
IF id[i]<>0 THEN
sql_ins(xExecuteScript:=true, ID:=id[i], val:=val[i]);
END_IF
END_FOR
END_IF
END
? DB_Send , , ID->Val SQL_Inset Python . pyodbc.connect cursor.execute SQL- INSERT⦠.
MsSQL Library SL
3S-Smart Software Solutions GmbH MsSQL Library SL β (200β¬) , MsSQL OPC-. TDS . - 2 , , , , 2 , , PyODBC.
:
SELECT
INSERT
UPDATE
DELETE
Execute Stored procedures
5 SQL IEC:
BOOL
DINT
REAL
STRING
DATETIME
4- :
fbMsSQL_compact
fbMsSQL untuk komunikasi database
fbPing untuk memeriksa ketersediaan host jarak jauh
fbFIFOQuery untuk menangani lebih banyak kueri SQL dari waktu ke waktu
Memiliki 4 template rendering default
kredensial login
prosedur login
jendela kueri
jendela respons
Unduh dan instal paket dari store.codesys.com. Setelah menginstal paket MsSQL Library SL di .. \ CODESYS MsSQL SL Library \ V1.4.0.5 \ Contoh \ direktori target Raspberry Pi, contoh ilustrasi penggunaan perpustakaan dibongkar.
Halaman untuk menghubungkan ke database dan menampilkan data.