Acasă > forum > controlerele SlimLine e Netsyst (LogicLab) > Conectare cu TRP distribuite I / Os prin Modbus RTU
- Acest subiect are 9 răspunsuri, 3 participanți și a fost actualizat ultima dată 10 ani, acum 12 luni da Sergio Bertana.
-
AutorPost
-
Noiembrie 29, 2010 la 9: 13 am #34931AnonimInactiv
Am cumpărat câteva module distribuite Trycom I / O, am vrut să le folosesc pentru a construi un sistem de automatizare casnică. În practică, aș dori să conectez comutatoarele la intrările digitale 16 ale modulului TRPC26, în timp ce la ieșirile 16 ale modulului TRPC24, aș dori să conectez ieșirile de control ale utilizatorului (lămpi, aparate etc.).
M-am gândit să folosesc modulul CPU SLine pentru gestionarea logică a centralei, este posibil să gestionați aceste module I / O distribuite prin protocolul Modbus de la CPU?
Noiembrie 29, 2010 la 9: 15 am #36594Sergio BertanaAdministrator al forumuluiFormularul TRPC26 folosiți comanda modbus 01 Citiți starea bobinei pentru citirea stării celor 16 intrări digitale, în timp ce modulul TRPC24 folosiți comanda modbus 15 Force Multiple Bobine pentru scrierea ieșirilor digitale 16. Utilizarea blocului funcțional ModbusRTUMaster (Extract manual), este posibil să citiți intrările din modulul TRPC26 și să scrieți ieșirile în modulul TRPC24.
Am creat un program pe SLine care citește ciclic cele 16 intrări ale modulului de intrare și le susține în 16 variabile BOOL (TRPC26Input [0..15]), copiază 16 variabile BOOL (TRPC24Output [0..15]) pe 16 ieșiri logice ale modulului de ieșire. Cele două module au fost conectate la rețeaua RS485, este necesar să se definească adresa 0x01 (implicit) la modulul de intrare logică, adresa 0x02 la modulul de ieșire logică, vezi post.
În program veți găsi un program de scări Logică, care plasează intrarea DI0 a modulelor de intrare pe ieșirea DO0 a modulului de ieșire. Puteți adăuga toată logica de care aveți nevoie adăugând linii la acest fișier și / sau adăugând alte programe la proiect.
Programul de TRPComm efectuează citirea și scrierea ciclică a modulelor I / O, a programelor InputRead e OuputWrite, fac schimb de biți de citire și le scriu în modulele TRP pentru a avea ordonate variabilele BOOL în funcție de I / O pe modul. Programul de imprimare, descărcare program.
Noiembrie 30, 2010 la 7: 38 am #36598Sergio BertanaAdministrator al forumuluiFiind un sistem de automatizare acasă, vă recomand în fișiere InputRead ed OutputWrite pentru a redenumi variabilele distribuite de I / O folosind nume care sunt mnemonice pentru sistemul dvs.
Pentru intrări TRPC26Input [0] poate deveni PlsLuceSalone, TRPC26Input [1] poate deveni PlsLuceCucinaetc.
Pentru ieșiri TRPC24Output [0] poate deveni CdoLuceSalone, TRPC24Output [1] poate deveni CdoLuceCucinaetc.Iunie 18, 2011 la 10: 02 am #36794raffaeleparticipantCer clarificări cu privire la exemplu IOOverTRP care a testat cu succes diferiți producători de modbus IO.
În prezent, efectuez teste de comunicare cu un Siemens S7-200 folosit ca sclav modbus al conectatului la SlimLine. Singura modificare pe care am făcut-o pentru a putea citi sclavul modbus menționat mai sus a fost să o setez FCode= 16 # 03 și setați parametrul Adresă în timp util.
Am întâlnit situația din care se poate deduce Figurasau că tabloul TRPC26Read nu este evaluat corect. Într-adevăr de la fereastră Ceas numai bitul cel mai puțin semnificativ al tabloului este evaluat corect, în timp ce afișajul% MW100.0 arată că comunicarea are succes.
Iunie 20, 2011 la 6: 24 am #36795Sergio BertanaAdministrator al forumuluiTrebuie să înțelegem diferența dintre FCode 16 # 01 (Citiți starea bobinei) e 16 # 03 (Citiți registrul de deținere).
Comanda 16 # 01 citește starea contactelor logice, adică variabile booleene, apoi citește 16 variabile Puncte = 16, ca în programul meu TRPCom, sunt evaluate cele 16 valori BOOL consecutive ale tabloului TRPC26Read.
Comanda 16 # 03 citește cuvinte de memorie (biți 16), apoi citește variabila 1 Puncte = 1 ca în exemplul dvs., este evaluată doar o singură variabilă USINT de program. După cum puteți vedea % MW100.0 este evaluat cu valoarea 16 # 0005, care este valoarea prezentă în PLC Siemens.
Dacă problema dvs. este împărțirea unei variabile USINT în 16 variabile BOOL, puteți utiliza blocuri funcționale WordToByte e ByteToBit (Extract manual).
Iunie 20, 2011 la 6: 46 am #36796Sergio BertanaAdministrator al forumuluiAdăug un Sfat care poate fi util pentru a înțelege adresarea sistemelor SlimLine. SlimLine se bazează pe un procesor ARM care utilizează stocarea datelor în little-endian, începe cu cel mai puțin semnificativ octet și se termină cu cel mai semnificativ.
Așa cum puteți vedea din exemplul la % MW100.0 este evaluat cu valoarea 16 # 0005, deci la locația cu offset 0 al matricei TRPC26Read alocat la aceeași adresă ca% MW100.0 corespunde LSB din valoarea cuvântului, în timp ce locației cu offset 1 corespunde MSB.
Deoarece valoarea cuvântului 16 este # 0005, LSB-ul său va fi diferit de zero, adică ADEVĂRAT, în timp ce MSB-ul său va fi egal sau adică FALS. Dacă valoarea cuvântului ar fi fost 16 # 0101 am fi avut atât MSB cât și LSB la valoarea TRUE.
Iunie 21, 2011 la 4: 14 pm #36804raffaeleparticipantAm vrut să clarific codificarea folosită de SlimLine pentru date REALE. Practic, trebuie să tratez ca un număr de virgule flotant (32 biți) achiziționat prin MODBUS-RTU de la un PLC S7-200 FCode= 16 # 03 e Puncte= 2.
Din manualul LogicLab, singura specificație cu privire la tipul real este că are o gamă de -3.4E38 - + 3.4E38, în timp ce formatul utilizat de S7-200 este „REAL 32 bit pe virgulă mobilă 32 bit IEEE de la + 1,175495E- 38 la + 3,402823E + 38 de la -1,175495E-38 la -3,402823E + 38 "
Mă așteptam ca codificarea să fie identică, dar nu pot memora valoarea dobândită într-o variabilă REAL, am atașat capturi de ecran, Sper că testele efectuate sunt clare.
Iunie 21, 2011 la 4: 40 pm #36805Sergio BertanaAdministrator al forumuluiFormatul utilizat pentru variabilele REAL este IEEE 754 așa cum se menționează în questo mesaj, capturile de ecran arată că este același format folosit de S7-200. De fapt, în acest format de reprezentare, valoarea REAL 2.0 este în hexazecimală 16 # 40000000 (După cum puteți vedea din fereastra de depanare de pe S7-200).
Atenție! La citirea variabilelor de 32 de biți prin modbus, trebuie acordată atenție endianității datelor, de fapt protocolul modbus nu specifică în ce ordine trebuie returnate cele două părți de 16 biți ale datelor de 32 de biți. Prin urmare, este posibil ca în unele sisteme partea cea mai semnificativă să fie returnată înainte de partea cea mai puțin semnificativă sau invers.
Su SlimLine după cum sa menționat deja în alte posturi little-endian care începe cu cel mai puțin semnificativ octet și se termină cu cel mai semnificativ, și din ceea ce văd este același tip de reprezentare pe care Siemens îl folosește în S7-200 (probabil folosește un procesor ARM). De fapt, dacă observați în% MW100.16 care este primul registru citit de modbus veți găsi cea mai puțin semnificativă parte a numărului și în% MW100.18 cea mai semnificativă parte.
Așadar, greșeala voastră este doar în inversarea cuvintelor din conversie WordToDouble.
Iunie 22, 2011 la 5: 52 am #36806Sergio BertanaAdministrator al forumuluiAm adăugat un sfat, deoarece formatul de reprezentare al S7-200 este același cu cel al SlimLine, pentru a avea valoarea în REAL, definiți doar o variabilă REAL la DB100.16, unde FB modbus acceptă registrele citite de S7-200 pentru a putea să o utilizați în programul dvs. fără a fi nevoie să utilizați WordToDouble.
MyVariable AT% MD100.16: REAL; {DE: "Variabilă REAL citită din S7-200"}
Mai 2, 2013 la 1: 25 pm #37636Sergio BertanaAdministrator al forumuluiDa, desigur, soluția pe care ați propus-o este fezabilă, în questo mesaj puteți găsi un exemplu despre cum să gestionați de la SlimLine modulele I / O distribuite prin Modbus. Odată ce modulele sunt achiziționate, veți susține I / O pe variabile de memorie ale SlimLine accesibil de Modbus. PC-ul poate fi conectat în Ethernet și starea intrărilor dobândite prin modbus TCP, utilizând de exemplu un software SCADA (Vezi mesajul), o aplicație dezvoltată cu ProfilabExpert (Vezi mesajul) sau o aplicație dezvoltată ad Hoc cu limbajul de programare pe care îl cunoașteți. Dacă dezvoltarea protocolului Modbus TCP este prea complexă, puteți dezvolta un protocol de comunicare adaptat nevoilor dvs. (Vezi mesajul). Dacă trebuie doar să vizualizați starea clopotelor, ca alternativă la computer, vă recomand să utilizați un panoul operatorului ecran tactil care are deja gestionarea nativă a protocolului modbus TCP, în plus, dacă doriți, puteți gestiona sunetul sonor și puteți vizualiza, de asemenea, istoricul intervențiilor clopotelor. Panoul poate gestiona, de asemenea, fișierele istorice, permițând un raport al intervențiilor clopotelor legate de data / ora.
-
AutorPost
- Trebuie să fiți autentificat pentru a răspunde la acest subiect.