सी # से आज्ञा मैं पंख पीएलसी ईथरनेट मॉड्यूल के लिए पीसी (सी # नेट) (ओमरोन) से यूडीपी के माध्यम से आदेश भेजने का प्रयास करें, लेकिन पीएलसी से किसी भी प्रतिक्रिया नहीं मिल रहा है और कोई सुराग नहीं है जहाँ मैं है समस्या निवारण शुरू कर सकते हैं।भेजें पंख पीएलसी
पीएलसी पालन एक बहुत ही सरल सीढ़ी तर्क है: DM100
तो #0001
का महत्व है, तो उत्पादन 101.00
पर ट्रिगर। (यहाँ, "उत्प्रेरक" स्मृति क्षेत्र D100
के लिए केवल एक संकेत नाम है, और "आउटपुट" उत्पादन 101.00
के लिए एक प्रतीक है)
तब मैं सी # का एक टुकड़ा है कि "लिखें मेमोरी क्षेत्र" के पंख आदेश करता है लिखा था जिसमें 01 02
का कमांड कोड है, इसके बाद पता, आइटमों की संख्या लिखी जानी चाहिए, और डेटा। 101.00
पर ट्रिगर करने के लिए सी # कोड को पीएलसी के D100
क्षेत्र में # 0001
का मान लिखना चाहिए।
[हटाए कोड वह काम नहीं करता] ..
उत्पादन 101.00
शुरू हो रहा था कि नहीं मिलता है, और न ही मैं किसी भी अपवाद प्राप्त करते हैं। मुझे यकीन है कि निम्नलिखित बना दिया है:
- पोर्ट, नोड और पते सही ढंग से कॉन्फ़िगर रूप से "काम ऑनलाइन" CX-प्रोग्रामर में की पुष्टि की। यह सुनिश्चित करने के लिए कि प्रत्येक नोड जुड़े हुए हैं, मैंने प्रत्येक आईपी को भी पिंग किया है।
UdpClient
कोड मान्य है क्योंकि मैंने एक बहुत ही सरल सर्वर/क्लाइंट कोड लिखा है जो सफलतापूर्वक पैकेट भेजता है और प्राप्त करता है।- सीढ़ी तर्क में कोई समस्या नहीं है। मैंने सीढ़ी को पीएलसी में स्थानांतरित कर दिया और मॉनीटर मोड में वर्क ऑनलाइन द्वारा परीक्षण किया और
D100
को मैन्युअल रूप से एक मान सेट किया।
मुझे लगता है fins_cmnd
सरणी में गलती नहीं है, लेकिन के रूप में अपने कोड में देखा, मैं हर कीमत पर संभव के रूप में विस्तार के रूप में टिप्पणी की है; मैं संभवतः खुद को कुछ भी याद नहीं कर सकता। मुझे संदेह है कि मैं हेक्साडेसिमल को सही ढंग से पार्स नहीं कर सकता, लेकिन फिर, मुझे मार्गदर्शन करने के लिए मुझे कोई अपवाद नहीं है।
मुझे नहीं पता कि मैं कहां और कैसे समस्या निवारण कर सकता हूं। आशा है कि FINS
प्रोग्रामिंग या पीएलसी अनुभव के साथ कोई मुझे कुछ मदद दे सकता है।
[उत्तर]
धन्यवाद Porge लिंक के लिए - कि मिल गया मुझे समस्या में पता चला। अंत में कुछ ट्रेल्स के बाद इसे काम करने के लिए मिलता है। कार्य कोड के लिए नीचे देखें।
string SERV_IP_ADDR = "192.168.250.1";
const int FINS_UDP_PORT = 9600;
byte[] sendPacket = new byte[]
{
// Full UDP packet: 80 00 02 00 00 00 00 05 00 19 01 02 82 00 64 00 00 01 00 01
// Header
0x80, //0.(ICF) Display frame information: 1000 0001
0x00, //1.(RSV) Reserved by system: (hex)00
0x02, //2.(GCT) Permissible number of gateways: (hex)02
0x00, //3.(DNA) Destination network address: (hex)00, local network
0x00, //4.(DA1) Destination node address: (hex)00, local PLC unit
0x00, //5.(DA2) Destination unit address: (hex)00, PLC
0x00, //6.(SNA) Source network address: (hex)00, local network
0x05, //7.(SA1) Source node address: (hex)05, PC's IP is 192.168.250.5
0x00, //8.(SA2) Source unit address: (hex)00, PC only has one ethernet
0x19, //9.(SID) Service ID: just give a random number 19
// Command
0x01, //10.(MRC) Main request code: 01, memory area write
0x02, //11.(SRC) Sub-request code: 02, memory area write
// PLC Memory Area
0x82, //12.Memory area code (1 byte): 82(DM)
// Address information
0x00, //13.Write start address (2 bytes): D100
0x64,
0x00, //15.Bit address (1 byte): Default 0
0x00, //16.No. of items (2 bytes): only one address which is D100
0x01,
// Write Data
0x00, //18.Data to write (2 bytes): value is 1
0x01,
};
UdpClient client = new UdpClient(); //create a UdpClient instance
try
{
client.Send(sendPacket, sendPacket.Length, SERV_IP_ADDR, FINS_UDP_PORT);
}
catch (SocketException se)
{
Console.WriteLine(se.ErrorCode + ": " + se.Message);
}
client.Close();
स्मृति है, हाँ, 4 बाइट्स, इसलिए मेरे पास दो सरणी आइटम एक 0x00 और 0x64 एक साथ 4 बाइट हैं। क्योंकि प्रत्येक "सेक्शन" में केवल 16 बिट लगते हैं। – KMC
@ केएमसी: मैंने 'डेटा' भाग का विस्तार किया है जो मुझे लगता है कि यह दिए गए पृष्ठ की तरह दिखने के लिए है। क्या इसने सहायता की? – porges