Dobrý den,
jednotky SBI-12 komunikují protokolem Epsnet (případně Modbus - dle nastavení). Budu předpokládat, že máte nastavený protokol Epsnet.
Na
této stránce je ke stažení
Driver.Epsnet (
fred-driver-epsnet.zip). Po jeho nainstalování dostanete nejenom testovací nástroj na ověření funkce komunikace (spuštění aplikace VP.RemoteDriver.exe, které je součástí instalace), ale také rozhraní
IEpsnet, které umožňuje snadné používání protokolu Epsnet bez nutnosti jeho vlastní implementace.
Po nainstalování otevřete Váš projekt v C# a přidejte referenci na COM objekt - ve Visual Studio 2008 je to hlavním menu
Project -> Add Reference.... V zobrazeném dialogu volte záložku COM a na ní vyberte
Elsaco Epsnet 2.0 Type Library (viz přiložený obrázek reference-epsnet.png).
Nyní můžete používat rozhraní IEpsnet ve Vašem projektu. Detailní popis je v nápovědě, která je součástí instalace. Ve zkratce je to takto:
- potřebujete instanci objektu
EpsnetLib.Epsnet, tj:
// COM objekt - komunikace protokolem Epsnet
EpsnetLib.Epsnet epsnet;
- kterou potřebuje inicializovat:
Type oType = Type.GetTypeFromProgID("Elsaco.Driver.Epsnet.2");
if (oType != null)
{
// vytvoreni instance
epsnet = (EpsnetLib.Epsnet)Activator.CreateInstance(oType);
// nastaveni pripojeni (tj. COM, na kterem je pripojeno SBI-12)
epsnet.SetConnection("serialPort:COM5/38400/8/2");
// nastaveni adresy ciloveho zarizeni (adresy SBI-12)
epsnet.SetCurrentStationAddress(1);
}
- a pak už jenom čtení hodnot, dle
manuálu k SBI-12 na straně 7, jsou nefiltrované stavy vstupů na prvních 2 bajtech v bloku 2 nebo 3 (to je jedno) od offsetu 0, tj. budeme tedy číst
z bloku 3 a offsetu 0 pouze 2 bajty:
object x;
// zkus nacist data
x = epsnet.Read(3, 0, 2);
// pretypuj vysledek na pole dat
try
{
// nactena data uloz do pole (cteni z bloku 3, offset 0, delka 2)
byte[] nData = (byte[])x;
// ... dalsi zpracovani
}
catch
{
// chyba (napr. chyba komunikace)
}
- zpracovaní hodnot ... po načtení dat a přetypování na datový typ byte máme v poli nData stavy všech vstupů. V nData[0] je prvních 8 vstupů, v nData[1] je druhých 8 vstupů. Stav vstupu je vždy jako jeden bit, tj. pro zjištění stavu jednotlivých vstupů je potřeba použít bitové operace, a to nejlépe logický součin:
if ((nData[0] & 0x01) == 0x01) {
// 1. vstup je aktivni
}
else {
// 1. vstup neni aktivni
}
if ((nData[0] & 0x02) == 0x02) {
// 2. vstup je aktivni
}
else {
// 2. vstup neni aktivni
}
if ((nData[0] & 0x04) == 0x04) {
// 3. vstup je aktivni
}
else {
// 3. vstup neni aktivni
}
// atd...
if ((nData[0] & 0x40) == 0x40) {
// 7. vstup je aktivni
}
else {
// 7. vstup neni aktivni
}
if ((nData[0] & 0x80) == 0x80) {
// 8. vstup je aktivni
}
else {
// 8. vstup neni aktivni
}
a analogicky pro druhou osmici
if ((nData[1] & 0x01) == 0x01) {
// 9. vstup je aktivni
}
else {
// 9. vstup neni aktivni
}
// ...atd.
Pokud by jste chtěl s jednotkou komunikovat protokolem Modbus, pak je postup stejný, jen je potřeba nainstalovat místo IEpsnet rozhraní
IModbus.´