実際の目的のためのRaspberryPi3モデルBのCodeSys + MSSQL。コルゲーターで生産された製品の映像の計算

目次

  1. 映像と制作エリアの計算(いくつかのマトリックス)





  2. 経費





  3. PyODBCを使用したデータのダンプ





  4. MsSQLライブラリSLを使用したデータのアップロード





映像と制作エリアの計算(いくつかのマトリックス)

プロファイルとフォーマットによる製造製品のフッテージのマトリックスは、2次元配列A 6 * 6であり、2次元配列B p * fに分割されます。ここで、p = 5は波形プロファイル、f = 5は形式であり、1次元のZ pは、波形プロファイルによって生成されたメーターの合計であり、Z f  は、形式によって生成されたメーターの合計です。したがって、行列Zpは5要素の1次元行列であり、行列Aの列の合計であり、Zfは5要素の1次元行列であり、行列Aの行の合計です。製品。





さらに2つの1次元行列が必要でした:Sp-プロファイルによって製造された製品の領域とSf-フォーマットによって製造された製品の領域と定数行列F-5要素の1次元行列-リスト原材料フォーマットの。





詰め物に対処!これで代数が始まります。





フォーマットとプロファイルの合計は、元の行列Aの行と列をそれぞれ加算することによって計算されます。





 フォーマットによる面積の計算は非常に簡単で、2つの行列AとFを単純に乗算します。





または





波形プロファイルによる面積:





機能ブロック一覧
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

      
      







経費

  • 4千ルーブルのRPI3モデルB(AliExpressでは3000ルーブル)。より安価なRPIゼロ(2000ルーブル)でうまくいくことは可能でしたが、システムのフレームワークは最初は存在しないTKによってぼやけていました(最初にこれを実行してから、何か他のものが必要かどうかを確認します)。 ..次に...そして...);





  • 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





  • リモートホストの可用性を確認するためのfbPing





  • 時間の経過とともにより多くのSQLクエリを処理するfbFIFOQuery





4つのデフォルトのレンダリングテンプレートがあります





  • ログイン認証情報





  • ログイン手順





  • クエリウィンドウ





  • 応答ウィンドウ





store.codesys.comからパッケージをダウンロードしてインストールします。MsSQLライブラリSLパッケージを.. \ CODESYS MsSQLSLライブラリ\ V1.4.0.5 \例\ Raspberry Piターゲットディレクトリにインストールした後、ライブラリの使用例が解凍されます。





データベースに接続してデータを表示するためのページ。












All Articles