{"id":679,"date":"2011-01-31T04:07:36","date_gmt":"2011-01-31T03:07:36","guid":{"rendered":"http:\/\/netrix.org.pl\/index.php\/2011\/01\/31\/emulator-modbus\/"},"modified":"2011-07-30T21:59:00","modified_gmt":"2011-07-30T20:59:00","slug":"emulator-modbus","status":"publish","type":"post","link":"https:\/\/netrix.org.pl\/index.php\/2011\/01\/31\/emulator-modbus\/","title":{"rendered":"Modbus Emulator"},"content":{"rendered":"<p><a href=\"http:\/\/netrix.org.pl\/wp-content\/2011\/01\/modbusEmulator.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px 5px 6px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"modbusEmulator\" border=\"0\" alt=\"modbusEmulator\" align=\"right\" src=\"http:\/\/netrix.org.pl\/wp-content\/2011\/01\/modbusEmulator_thumb.png\" width=\"244\" height=\"169\" \/><\/a>Jednym z ostatnich zada\u0144 na laboratorium Informatycznych System\u00f3w Sterowania (i jednocze\u015bnie jedynym ciekawym) by\u0142o zaimplementowanie protoko\u0142u <a href=\"http:\/\/pl.wikipedia.org\/wiki\/Modbus\" target=\"_blank\">Modbus<\/a> w postaci aplikacji emuluj\u0105cych urz\u0105dzenia master i slave, komunikuj\u0105cych si\u0119 ze sob\u0105 bezpo\u015brednio korzystaj\u0105c z port\u00f3w szeregowych COM (RS-232). Zadanie to zrealizowa\u0142em minimalistycznie tworz\u0105c jedn\u0105 aplikacj\u0119, kt\u00f3ra emuluje oba urz\u0105dzenia i implementuje 6 pierwszych publicznych funkcji wraz z podgl\u0105dem rejestr\u00f3w.<\/p>\n<p>Aplikacja jest napisana w C# i korzysta z Windows Forms oraz klasy SerialPort (kt\u00f3ra za\u0142atwia ca\u0142\u0105 komunikacj\u0119 po porcie COM). Ca\u0142o\u015b\u0107 implementacji bazuje na specyfikacji Modbusa znajduj\u0105cej si\u0119 <a href=\"www.modbus.org\/docs\/Modbus_Application_Protocol_V1_1b.pdf\" target=\"_blank\">tutaj<\/a>. Opr\u00f3cz tego podczas pisania wykorzystywa\u0142em r\u00f3wnie\u017c kilka aplikacji:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.eterlogic.com\/Products.VSPE.html\" target=\"_blank\">Virtual Serial Ports Emulator (VSPE)<\/a> \u2013 aplikacja emuluj\u0105ca pary port\u00f3w COM,<\/li>\n<li><a href=\"http:\/\/www.modbustools.com\/modbus_poll.asp\" target=\"_blank\">Modbus Poll<\/a> \u2013 aplikacja emuluj\u0105ca urz\u0105dzenie Master dla protoko\u0142u Modbus,<\/li>\n<li><a href=\"http:\/\/www.modbustools.com\/modbus_slave.asp\" target=\"_blank\">Modbus Slave<\/a> \u2013 aplikacja emuluj\u0105ca urz\u0105dzenie Slave dla protoko\u0142u Modbus.<\/li>\n<\/ul>\n<p>Dwie ostatnie aplikacje pos\u0142u\u017cy\u0142y mi jako referencja implementacji protoko\u0142u, poniewa\u017c sama specyfikacja nie zawiera informacji o sposobie liczenia CRC i LRC, wi\u0119c trzeba by\u0142o do tego doj\u015b\u0107 metod\u0105 pr\u00f3b, b\u0142\u0119d\u00f3w i Google.<\/p>\n<p>Sam program obs\u0142uguje (jak ju\u017c wcze\u015bniej wspomnia\u0142em) 6 pierwszych, publicznych funkcji protoko\u0142u Modbus dla obu urz\u0105dze\u0144 (Master i Slave) przesy\u0142aj\u0105c dane w trybie ASCII lub RTU. Urz\u0105dzenie Slave posiada podgl\u0105d rejestr\u00f3w Coils, Discrete Inputs, Input Registers oraz Holding Registers, po 4096 sztuk ka\u017cdy (wszystkie Read-Only, generowane na podstawie seed = 0). Aplikacja posiada r\u00f3wnie\u017c podgl\u0105d wysy\u0142anych i otrzymywanych ramek w postaci logu transmisji.<\/p>\n<p>Program wraz z kodem \u017ar\u00f3d\u0142owym znajduj\u0105 si\u0119 <a href=\"http:\/\/netrix.org.pl\/content\/blog\/ModbusEmulator.7z\">tutaj<\/a> (wymaga .NET Framework 2.0) .<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jednym z ostatnich zada\u0144 na laboratorium Informatycznych System\u00f3w Sterowania (i jednocze\u015bnie jedynym ciekawym) by\u0142o zaimplementowanie protoko\u0142u Modbus w postaci aplikacji emuluj\u0105cych urz\u0105dzenia master i slave, komunikuj\u0105cych si\u0119 ze sob\u0105 bezpo\u015brednio korzystaj\u0105c z port\u00f3w szeregowych COM (RS-232). Zadanie to zrealizowa\u0142em minimalistycznie tworz\u0105c jedn\u0105 aplikacj\u0119, kt\u00f3ra emuluje oba urz\u0105dzenia i implementuje 6 pierwszych publicznych funkcji wraz z [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47],"tags":[132,185,127,126,124],"_links":{"self":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/679"}],"collection":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/comments?post=679"}],"version-history":[{"count":2,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/679\/revisions"}],"predecessor-version":[{"id":1027,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/679\/revisions\/1027"}],"wp:attachment":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/media?parent=679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/categories?post=679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/tags?post=679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}