{"id":433,"date":"2016-08-30T00:06:46","date_gmt":"2016-08-30T03:06:46","guid":{"rendered":"http:\/\/www.pascalscada.com\/?page_id=433"},"modified":"2026-09-17T09:36:42","modified_gmt":"2026-09-17T12:36:42","slug":"mitsubishi-melsec-tcp","status":"publish","type":"page","link":"https:\/\/www.pascalscada.com\/pb\/mitsubishi-melsec-tcp\/","title":{"rendered":"Mitsubishi Melsec TCP"},"content":{"rendered":"<h5>Introdu\u00e7\u00e3o<\/h5>\n<p>O <code>TMelsecTCPDriver<\/code> fala o <strong>MC Protocol<\/strong> (MELSEC Communication Protocol) da Mitsubishi Electric sobre TCP\/IP, no formato <strong>3E frame, c\u00f3digo bin\u00e1rio<\/strong> \u2014 o protocolo nativo das portas Ethernet dos CLPs das s\u00e9ries <strong>Q<\/strong>, <strong>L<\/strong>, <strong>iQ-F (FX5)<\/strong> e <strong>iQ-R<\/strong>, e dos m\u00f3dulos Ethernet QJ71E71\/LJ71E71. Ele l\u00ea e escreve rel\u00e9s (bits) e registradores (words) diretamente, sem OPC nem software da Mitsubishi no meio.<\/p>\n<p>O driver n\u00e3o fala o formato 1E (s\u00e9rie FX3 e anteriores pelo m\u00f3dulo FX3U-ENET) nem o formato ASCII.<\/p>\n<h5>Componentes necess\u00e1rios<\/h5>\n<ol>\n<li>Uma <img decoding=\"async\" alt=\"\" src=\"https:\/\/www.pascalscada.com\/wp-content\/uploads\/2026\/09\/TTCP_UDPPort.png\"> <strong><code>TTCP_UDPPort<\/code><\/strong> com <code>Host<\/code> = IP do CLP e <code>Port<\/code> = porta configurada no CLP para o MC Protocol (veja <em>Preparando o CLP<\/em>). Veja <a href=\"\/pb\/communication-ports\/\">Portas de comunica\u00e7\u00e3o<\/a>.<\/li>\n<li>Um <img decoding=\"async\" alt=\"\" src=\"https:\/\/www.pascalscada.com\/wp-content\/uploads\/2026\/09\/TMelsecTCPDriver.png\"> <strong><code>TMelsecTCPDriver<\/code><\/strong> com <code>CommunicationPort<\/code> apontando para a porta.<\/li>\n<li>Os tags (<code>TPLCTagNumber<\/code>, <code>TPLCBlock<\/code>, <code>TPLCString<\/code>) com <code>ProtocolDriver<\/code> apontando para o driver.<\/li>\n<\/ol>\n<h5>Preparando o CLP<\/h5>\n<p>No GX Works2\/GX Works3, nos par\u00e2metros da porta Ethernet da CPU (ou do m\u00f3dulo E71), abra a configura\u00e7\u00e3o de conex\u00f5es (<em>Open Setting<\/em> \/ <em>External Device Configuration<\/em>) e adicione uma conex\u00e3o com:<\/p>\n<ul>\n<li><strong>Protocol<\/strong>: TCP;<\/li>\n<li><strong>Open system<\/strong>: MC Protocol (<em>SLMP<\/em> no iQ-R\/iQ-F);<\/li>\n<li><strong>Code<\/strong>: <strong>Binary<\/strong> (n\u00e3o ASCII);<\/li>\n<li><strong>Host station port No.<\/strong>: a porta que vai em <code>TTCP_UDPPort.Port<\/code> (ex.: 5002);<\/li>\n<li>no iQ-F\/iQ-R, marque tamb\u00e9m <em>Enable online change<\/em> se quiser escrever com a CPU em RUN.<\/li>\n<\/ul>\n<p>Grave os par\u00e2metros e reinicie a CPU. Cada conex\u00e3o configurada atende um cliente; para duas esta\u00e7\u00f5es de supervis\u00e3o configure duas conex\u00f5es (portas diferentes).<\/p>\n<h5>Propriedades do driver<\/h5>\n<table>\n<thead>\n<tr>\n<th>Propriedade<\/th>\n<th>Padr\u00e3o<\/th>\n<th>Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>CommunicationPort<\/code><\/td>\n<td>\u2013<\/td>\n<td>A porta <code>TTCP_UDPPort<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>ReadSomethingAlways<\/code><\/td>\n<td><code>True<\/code><\/td>\n<td>L\u00ea algum tag a cada ciclo mesmo sem necessidade, mantendo a conex\u00e3o ativa.<\/td>\n<\/tr>\n<tr>\n<td><code>Output_M_MaxHole<\/code>, <code>Output_SM_MaxHole<\/code>, <code>Output_L_MaxHole<\/code>, <code>Output_F_MaxHole<\/code>, <code>Output_V_MaxHole<\/code>, <code>Output_X_MaxHole<\/code>, <code>Output_Y_MaxHole<\/code>, <code>Output_B_MaxHole<\/code><\/td>\n<td>10<\/td>\n<td>Para cada \u00e1rea de rel\u00e9s, quantos endere\u00e7os <strong>n\u00e3o mapeados<\/strong> o driver aceita entre dois tags para ainda l\u00ea-los na mesma requisi\u00e7\u00e3o.<\/td>\n<\/tr>\n<tr>\n<td><code>Register_D_MaxHole<\/code>, <code>Register_SD_MaxHole<\/code><\/td>\n<td>10<\/td>\n<td>O mesmo para as \u00e1reas de registradores.<\/td>\n<\/tr>\n<tr>\n<td><code>SerieCLP<\/code><\/td>\n<td><code>Serie_Q_L<\/code><\/td>\n<td>Reservada para diferen\u00e7as entre s\u00e9ries; a vers\u00e3o atual do driver TCP n\u00e3o a usa \u2014 deixe no padr\u00e3o.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>O driver agrupa tags vizinhos da mesma \u00e1rea em uma requisi\u00e7\u00e3o (at\u00e9 10 dispositivos por bloco). Um &#8220;buraco&#8221; maior que <code>*_MaxHole<\/code> entre dois tags gera duas requisi\u00e7\u00f5es. Se voc\u00ea tem D100 e D125 e nada entre eles, ler os dois de uma vez (<code>MaxHole \u2265 25<\/code>) custa uma mensagem s\u00f3.<\/p>\n<h5>Endere\u00e7ando mem\u00f3rias<\/h5>\n<p>Um endere\u00e7o MELSEC \u00e9 o <strong>tipo de dispositivo<\/strong> (M, X, Y, D\u2026) mais o n\u00famero. No tag:<\/p>\n<table>\n<thead>\n<tr>\n<th>Propriedade do tag<\/th>\n<th>Preencha com<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>MemReadFunction<\/code><\/td>\n<td>C\u00f3digo do dispositivo (tabela abaixo).<\/td>\n<\/tr>\n<tr>\n<td><code>MemWriteFunction<\/code><\/td>\n<td>O <strong>mesmo<\/strong> c\u00f3digo \u2014 leitura e escrita usam a mesma tabela.<\/td>\n<\/tr>\n<tr>\n<td><code>MemAddress<\/code><\/td>\n<td>N\u00famero do dispositivo, <strong>em decimal<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td><code>PLCStation<\/code><\/td>\n<td>Deixe <code>0<\/code> em todos os tags de um driver. O valor n\u00e3o vai no frame (rede 0, PC <code>FF<\/code>); serve s\u00f3 para o driver agrupar tags do mesmo CLP.<\/td>\n<\/tr>\n<tr>\n<td><code>MemFile_DB<\/code>, <code>MemSubElement<\/code>, <code>PLCRack<\/code>, <code>PLCSlot<\/code><\/td>\n<td>N\u00e3o usados.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<thead>\n<tr>\n<th>C\u00f3digo<\/th>\n<th>Dispositivo<\/th>\n<th>Tipo<\/th>\n<th>Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td><code>M<\/code><\/td>\n<td>bit<\/td>\n<td>Rel\u00e9 interno<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td><code>SM<\/code><\/td>\n<td>bit<\/td>\n<td>Rel\u00e9 especial<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td><code>L<\/code><\/td>\n<td>bit<\/td>\n<td>Rel\u00e9 de reten\u00e7\u00e3o (latch)<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td><code>F<\/code><\/td>\n<td>bit<\/td>\n<td>Anunciador<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td><code>V<\/code><\/td>\n<td>bit<\/td>\n<td>Rel\u00e9 de borda<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td><code>X<\/code><\/td>\n<td>bit<\/td>\n<td>Entrada<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td><code>Y<\/code><\/td>\n<td>bit<\/td>\n<td>Sa\u00edda<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td><code>B<\/code><\/td>\n<td>bit<\/td>\n<td>Rel\u00e9 de link<\/td>\n<\/tr>\n<tr>\n<td>9<\/td>\n<td><code>D<\/code><\/td>\n<td>word<\/td>\n<td>Registrador de dados<\/td>\n<\/tr>\n<tr>\n<td>16<\/td>\n<td><code>SD<\/code><\/td>\n<td>word<\/td>\n<td>Registrador especial<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Timers, contadores (<code>T<\/code>, <code>C<\/code>, <code>ST<\/code>), registradores de link (<code>W<\/code>, <code>R<\/code>, <code>ZR<\/code>) e as \u00e1reas <code>SB<\/code>\/<code>DX<\/code>\/<code>DY<\/code> n\u00e3o est\u00e3o implementados nesta vers\u00e3o.<\/p>\n<p><strong>Aten\u00e7\u00e3o aos endere\u00e7os X e Y<\/strong>: no CLP eles s\u00e3o numerados em <strong>hexadecimal<\/strong> (<code>X0<\/code>\u2026<code>X1F<\/code>, <code>Y20<\/code>\u2026). <code>MemAddress<\/code> \u00e9 decimal, ent\u00e3o <code>X10<\/code> (hex) \u00e9 <code>MemAddress = 16<\/code>, e <code>Y2F<\/code> \u00e9 <code>MemAddress = 47<\/code>. Os demais dispositivos (M, D, \u2026) j\u00e1 s\u00e3o decimais no CLP.<\/p>\n<p>Tipos de dados:<\/p>\n<table>\n<thead>\n<tr>\n<th>No CLP<\/th>\n<th>TagType<\/th>\n<th>Observa\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Rel\u00e9 (M, X, Y\u2026)<\/td>\n<td><code>pttDefault<\/code><\/td>\n<td>Um dispositivo = um bit; <code>Value<\/code> \u00e9 0 ou 1. <code>TPLCBlock<\/code> com <code>Size = n<\/code> l\u00ea n rel\u00e9s consecutivos.<\/td>\n<\/tr>\n<tr>\n<td><code>D<\/code> de 16 bits<\/td>\n<td><code>pttDefault<\/code>, <code>pttSmallInt<\/code> ou <code>pttWord<\/code><\/td>\n<td>Um registrador.<\/td>\n<\/tr>\n<tr>\n<td>Dois <code>D<\/code> como 32 bits (<code>DMOV<\/code>, <code>DINT<\/code>)<\/td>\n<td><code>pttLongInt<\/code> \/ <code>pttDWord<\/code><\/td>\n<td>Ocupa <code>D[n]<\/code> e <code>D[n+1]<\/code>; a ordem <em>low word first<\/em> do MELSEC \u00e9 a que o driver assume \u2014 sem swaps.<\/td>\n<\/tr>\n<tr>\n<td>Dois <code>D<\/code> como <code>REAL<\/code> (<code>EMOV<\/code>)<\/td>\n<td><code>pttFloat<\/code><\/td>\n<td>Idem.<\/td>\n<\/tr>\n<tr>\n<td>Texto em <code>D<\/code> (<code>$MOV<\/code>)<\/td>\n<td><code>TPLCString<\/code>, <code>StringType = stC<\/code><\/td>\n<td>Dois caracteres por registrador, byte baixo primeiro. <code>StringSize<\/code> em caracteres.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Exemplos:<\/p>\n<table>\n<thead>\n<tr>\n<th>Endere\u00e7o MELSEC<\/th>\n<th>MemReadFunction \/ MemWriteFunction<\/th>\n<th>MemAddress<\/th>\n<th>TagType<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>M100<\/code><\/td>\n<td>1<\/td>\n<td>100<\/td>\n<td><code>pttDefault<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>X1A<\/code><\/td>\n<td>6<\/td>\n<td>26<\/td>\n<td><code>pttDefault<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>Y0<\/code> a <code>Y7<\/code><\/td>\n<td>7<\/td>\n<td>0<\/td>\n<td><code>TPLCBlock<\/code>, <code>Size = 8<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>D200<\/code><\/td>\n<td>9<\/td>\n<td>200<\/td>\n<td><code>pttSmallInt<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>D300<\/code> como <code>REAL<\/code><\/td>\n<td>9<\/td>\n<td>300<\/td>\n<td><code>pttFloat<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>D400<\/code> a <code>D409<\/code><\/td>\n<td>9<\/td>\n<td>400<\/td>\n<td><code>TPLCBlock<\/code>, <code>Size = 10<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>SD210<\/code> (rel\u00f3gio)<\/td>\n<td>16<\/td>\n<td>210<\/td>\n<td><code>pttWord<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para um bit dentro de um <code>D<\/code>, use um <a href=\"\/pb\/tags\/#TTagBit\"><code>TTagBit<\/code><\/a> sobre o tag do registrador \u2014 o MC Protocol l\u00ea palavras inteiras.<\/p>\n<h5>Exemplo passo a passo<\/h5>\n<p>Ler o n\u00edvel <code>D100<\/code> e comandar a bomba <code>M50<\/code> em um FX5U em 192.168.3.250, MC Protocol na porta 5002:<\/p>\n<ol>\n<li>GX Works3 \u2192 par\u00e2metros da CPU \u2192 <em>Ethernet Port<\/em> \u2192 <em>External Device Configuration<\/em>: adicione <em>SLMP Connection Module<\/em>, TCP, porta 5002, c\u00f3digo bin\u00e1rio. Grave e reinicie.<\/li>\n<li><code>TTCP_UDPPort<\/code>: <code>Host = 192.168.3.250<\/code>, <code>Port = 5002<\/code>, <code>Active = True<\/code>.<\/li>\n<li><code>TMelsecTCPDriver<\/code>: <code>CommunicationPort = TCP_UDPPort1<\/code>.<\/li>\n<li><code>TPLCTagNumber<\/code> <code>Nivel<\/code>: <code>ProtocolDriver = MelsecTCPDriver1<\/code>, <code>MemReadFunction = 9<\/code>, <code>MemWriteFunction = 9<\/code>, <code>MemAddress = 100<\/code>, <code>TagType = pttSmallInt<\/code>.<\/li>\n<li><code>TPLCTagNumber<\/code> <code>Bomba<\/code>: <code>MemReadFunction = 1<\/code>, <code>MemWriteFunction = 1<\/code>, <code>MemAddress = 50<\/code>.<\/li>\n<li>Um <code>THMILabel<\/code> em <code>Nivel<\/code> e um <code>THMICheckBox<\/code> em <code>Bomba<\/code> (<code>ValueTrue = 1<\/code>, <code>ValueFalse = 0<\/code>).<\/li>\n<\/ol>\n<h5>Problemas comuns<\/h5>\n<table>\n<thead>\n<tr>\n<th>Sintoma<\/th>\n<th>Causa prov\u00e1vel<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Porta n\u00e3o abre<\/td>\n<td>IP\/porta errados, ou a conex\u00e3o MC Protocol n\u00e3o foi criada\/gravada no CLP.<\/td>\n<\/tr>\n<tr>\n<td>Porta abre mas os tags d\u00e3o <code>ioDriverError<\/code><\/td>\n<td>Conex\u00e3o configurada como <strong>ASCII<\/strong> ou como <em>MELSOFT connection<\/em> em vez de MC Protocol\/SLMP bin\u00e1rio.<\/td>\n<\/tr>\n<tr>\n<td><code>ioPLCError<\/code> em alguns tags<\/td>\n<td>O CLP recusou (<em>end code<\/em> \u2260 0): dispositivo inexistente ou fora da faixa da CPU, ou escrita bloqueada com a CPU em RUN.<\/td>\n<\/tr>\n<tr>\n<td><code>X<\/code>\/<code>Y<\/code> lendo o vizinho<\/td>\n<td><code>MemAddress<\/code> informado em hexadecimal; converta para decimal.<\/td>\n<\/tr>\n<tr>\n<td>Um segundo supervis\u00f3rio n\u00e3o conecta<\/td>\n<td>Cada conex\u00e3o MC Protocol atende um cliente; crie outra conex\u00e3o com outra porta.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>Exemplos relacionados<\/h5>\n<p>N\u00e3o h\u00e1 um exemplo espec\u00edfico para Melsec no reposit\u00f3rio. Os exemplos Modbus TCP (<a href=\"https:\/\/github.com\/fluisgirardi\/pascalscada_v0\/tree\/master\/examples\/laz_modbus_tcp_example\"><code>examples\/laz_modbus_tcp_example<\/code><\/a>) e ISOTCP (<a href=\"https:\/\/github.com\/fluisgirardi\/pascalscada_v0\/tree\/master\/examples\/laz_isotcp_demonstration\"><code>examples\/laz_isotcp_demonstration<\/code><\/a>) mostram a mesma estrutura porta \u2192 driver \u2192 tags \u2192 controles; s\u00f3 o driver e as propriedades de endere\u00e7o mudam.<\/p>","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o O TMelsecTCPDriver fala o MC Protocol (MELSEC Communication Protocol) da Mitsubishi Electric sobre TCP\/IP, no formato 3E frame, c\u00f3digo bin\u00e1rio \u2014 o protocolo nativo das portas Ethernet dos CLPs &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-fullwidth.php","meta":{"footnotes":""},"class_list":["post-433","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/pages\/433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/comments?post=433"}],"version-history":[{"count":12,"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/pages\/433\/revisions"}],"predecessor-version":[{"id":1234,"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/pages\/433\/revisions\/1234"}],"wp:attachment":[{"href":"https:\/\/www.pascalscada.com\/pb\/wp-json\/wp\/v2\/media?parent=433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}