Ik ben voor mijn stage bezig een programma te maken dat kan communiceren met een PLC over Modbus/TCP. Het doel is dat PLC's er straks mee kunnen gaan verbinden om data naar toe te sturen. Het is me al gelukt om dmv het programma een register te schrijven op de PLC. Het lukt me alleen niet om de PLC een 'register' in mijn programma te laten schrijven. Ik ontvang wel de data van de PLC en kan die ook vertalen, maar het modbus protocol vereist dat ik daarna weer het zelfde pakket terug stuur om de andere kant te laten weten dat het gelukt is. En daar gaat het fout 
Nu geeft de plc steeds error 6003, wat staat voor "Unexpected FIN or RST".
Als ik met een sniffer op de lijn kijk zie ik in het geval dat ik wat stuur:
Echter als ik de PLC in mijn programma laat schrijven, dan zie ik dit:
Zoals te zien is wordt gelijk na de respons een FIN gestuurd naar de PLC, terwijl de PLC volgens mij eerst een ACK en daarna een FIN,ACK wil versturen.
Iemand enig idee wat het zou kunnen zijn? Of hoe ik die FIN/ACK etc kan beinvloeden? Ik heb het vermoede dat het te maken heeft met de mannier waarom de socket wordt aangemaakt..
Ik gebruik GCC versie 3.2.3 op een Fedora Core 1 bak met kernel 2.4.22
Nu geeft de plc steeds error 6003, wat staat voor "Unexpected FIN or RST".
Als ik met een sniffer op de lijn kijk zie ik in het geval dat ik wat stuur:
code:
1
2
3
4
5
6
7
8
9
10
11
| Bron Doel: inhoud Prog PLC : [SYN] PLC Prog: [SYN, PSH, ACK] Prog PLC : [ACK] Prog PLC : Write multiple registers PLC Prog: Write multiple registers Prog PLC : [ACK] Prog PLC : [FIN, ACK] PLC Prog: [FIN, PSH, ACK] Prog PLC : [ACK] |
Echter als ik de PLC in mijn programma laat schrijven, dan zie ik dit:
code:
1
2
3
4
5
6
7
8
9
10
| Bron Doel: inhoud PLC Prog: [SYN] Prog PLC : [SYN,ACK] PLC Prog: Write multiple registers Prog PLC : [ACK] Prog PLC : Write multiple registers Prog PLC : [FIN, ACK] Prog PLC : [TCP Retransmission] Write multiple registers PLC Prog: [RST, ACK] |
Zoals te zien is wordt gelijk na de respons een FIN gestuurd naar de PLC, terwijl de PLC volgens mij eerst een ACK en daarna een FIN,ACK wil versturen.
Iemand enig idee wat het zou kunnen zijn? Of hoe ik die FIN/ACK etc kan beinvloeden? Ik heb het vermoede dat het te maken heeft met de mannier waarom de socket wordt aangemaakt..
Ik gebruik GCC versie 3.2.3 op een Fedora Core 1 bak met kernel 2.4.22
Cupra Born