cs_Mumiah
Messages postés1Date d'inscriptionmercredi 24 septembre 2008StatutMembreDernière intervention24 septembre 2008
-
24 sept. 2008 à 21:53
cs_dvp
Messages postés2Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention25 septembre 2008
-
25 sept. 2008 à 13:33
Salut,
J'ai commencé par développer en VB6 pour faire de la récupératione de données sur des automates VIPA/S7_300/S7_200 depuis un PC en MPI/PROFIBUS.
Maintenant je fait ça directement depuis EXEL. Je peut vous reseigner sur les connections et aquisitions.
Pour l'instant je sait récupérer les réels/doubles mots et les mots, mais je coince sut les bits :
la fonction apropriée est mb_bittest mais je n'arrive pas à la comprendre correctement. Je parvient à récupérer des états true/false mais de bits inconnus.
Est-ce que quelqu'un peut m'expliquer en détail comment utiliser la fonction ?
le DB n'est pas demandé, dois-je récupérer un mot complet puis dans un deuxième temps en ressortir le bit voulu ?
cs_dvp
Messages postés2Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention25 septembre 2008 25 sept. 2008 à 13:33
MB_BITTEST
Sert a tester UN MEMENTO :
Exemple MW0 16 BITs MB0 (8 Bits) + MB1 (8 Bits)
Pour Tester l'état du bit 5 de MB1 [MB1.5 ] : mbno=1 bitno=5 ----> est equivalent à M1.5( Bit de Memento) voir function ReadMemo.
Exe: Res = ReadMemo("1.5")
cs_dvp
Messages postés2Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention25 septembre 2008 25 sept. 2008 à 11:01
bonjour, ci-desous un exemple en VBA
Option Compare Database
Option Explicit
Declare Function load_tool Lib "w95_s7" (ByVal lngNo As Byte, ByVal strName As String, ByVal strAdr As String) As Long
Declare Function new_ss Lib "w95_s7" (ByVal bytNr As Byte) As Long
Declare Function db_read Lib "w95_s7" (ByVal lngDbNo As Long, ByVal lngDwNo As Long, ByRef lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function unload_tool Lib "w95_s7" () As Long
Declare Function d_field_read Lib "w95_s7" (ByVal bstlngNo As Long, ByVal lngNo As Long, ByVal lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function d_field_write Lib "w95_s7" (ByVal bstlngNo As Long, ByVal lngNo As Long, ByVal lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function db_write Lib "w95_s7" (ByVal lngDbNo As Long, ByVal lngDwNo As Long, ByRef lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function e_field_read Lib "w95_s7" (ByVal lngNo As Long, ByVal lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function a_field_write Lib "w95_s7" (ByVal lngNo As Long, ByVal lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function a_field_read Lib "w95_s7" (ByVal lngNo As Long, ByVal lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function m_field_read Lib "w95_s7" (ByVal lngNo As Long, ByVal lngAmount As Long, ByRef intBuffer As Integer) As Long
Declare Function m_field_write Lib "w95_s7" (ByVal lngNo As Long, ByVal lngAmount As Long, ByRef intBuffer As Integer) As Long
Function Error_Message(lngRes As Long) As String
Dim strResult As String
Dim vntRep As Variant
If lngRes <> 0 Then
strResult = "Dit is foutmelding : " + Format(lngRes)
Select Case lngRes
Case 202: strResult = strResult + " No Resources available"
Case 203: strResult = strResult + " Configuration error"
Case 205: strResult = strResult + " Illegal call"
Case 206: strResult = strResult + " Module Not found"
Case 207: strResult = strResult + " Driver Not loaded"
Case 208: strResult = strResult + " Hardware fault"
Case 209: strResult = strResult + " Software fault"
Case 210: strResult = strResult + " Memory fault"
Case 215: strResult = strResult + " No message"
Case 216: strResult = strResult + " Storage fault"
Case 219: strResult = strResult + " Internal timeout"
Case 225: strResult = strResult + " Too many channels open"
Case 226: strResult = strResult + " Internal fault"
Case 231: strResult = strResult + " Hardware fault"
Case 233: strResult = strResult + " Sin_serv.exe Not started"
Case 234: strResult = strResult + " Protected"
Case 240: strResult = strResult + " Scp db file does Not exist"
Case 241: strResult = strResult + " No global dos storage available"
Case 242: strResult = strResult + " Error during transmission"
Case 243: strResult = strResult + " Error during reception"
Case 244: strResult = strResult + " Device does Not exist"
Case 245: strResult = strResult + " Incorrect sub system"
Case 246: strResult = strResult + " Unknown code"
Case 247: strResult = strResult + " Buffer too small"
Case 248: strResult = strResult + " Buffer too small"
Case 249: strResult = strResult + " Incorrect protocol"
Case 251: strResult = strResult + " Reception error"
Case 252: strResult = strResult + " Licence error"
Case 257: strResult = strResult + " Connection not established / parameterised"
Case 266: strResult = strResult + " Negative ackNowledgement received / timeout error"
Case 268: strResult = strResult + " Data does not exist or disabled"
Case 298: strResult = strResult + " System storage no longer available"
Case 302: strResult = strResult + " Incorrect parameter"
Case 306: strResult = strResult + " No memory in DPRAM"
Case 513: strResult = strResult + " Incorrect interface specified"
Case 514: strResult = strResult + " Maximum amount of interfaces exceeded"
Case 515: strResult = strResult + " PRODAVE already initialised"
Case 516: strResult = strResult + " Wrong parameter list"
Case 517: strResult = strResult + " PRODAVE Not initialised"
'if not open prodave
gstrPlcstrAdrTable = Chr(2) + Chr(0) + Chr(2) + Chr(0)
vntRep = load_tool(1, "S7ONLINE", gstrPlcstrAdrTable)
vntRep = new_ss(1)
Case 518: strResult = strResult + " Handle cannot be set"
Case 519: strResult = strResult + " Data segment cannot be disabled"
Case 768: strResult = strResult + " Initialisiation error"
Case 769: strResult = strResult + " Initialisiation error"
Case 770: strResult = strResult + " Block too small, DW does not exist"
Case 771: strResult = strResult + " Block limit exceeded, correct amount"
Case 784: strResult = strResult + " No HW found"
Case 785: strResult = strResult + " HW defective"
Case 786: strResult = strResult + " Incorrect config param"
Case 787: strResult = strResult + " Incorrect baud rate / interrupt vector"
Case 788: strResult = strResult + " HSA parameterised incorrectly"
Case 789: strResult = strResult + " MPI address error"
Case 790: strResult = strResult + " HW device already allocated"
Case 791: strResult = strResult + " Interrupt not available"
Case 792: strResult = strResult + " Interrupt occupied"
Case 793: strResult = strResult + " Sap Not occupied"
Case 794: strResult = strResult + " No remote station found"
Case 795: strResult = strResult + " Internal error"
Case 796: strResult = strResult + " System error"
Case 797: strResult = strResult + " Error Buffer size"
Case 800: strResult = strResult + " Hardware fault"
Case 801: strResult = strResult + " DLL function error"
Case 816: strResult = strResult + " Version conflict"
Case 817: strResult = strResult + " Error COM config"
Case 818: strResult = strResult + " Hardware fault"
Case 819: strResult = strResult + " COM Port not configured"
Case 820: strResult = strResult + " COM Port not available"
Case 821: strResult = strResult + " Serial drv in use"
Case 822: strResult = strResult + " No connection"
Case 823: strResult = strResult + " Job rejected"
Case 896: strResult = strResult + " Internal error"
Case 897: strResult = strResult + " Hardware fault"
Case 898: strResult = strResult + " No driver or device found"
Case 900: strResult = strResult + " No driver or device found"
Case 1023: strResult = strResult + " System fault"
Case 2048: strResult = strResult + " Toolbox occupied"
Case 16385: strResult = strResult + " Connection not known"
Case 16386: strResult = strResult + " Connection not established"
'if lngNot open prodave
gstrPlcstrAdrTable = Chr(2) + Chr(0) + Chr(2) + Chr(0)
vntRep = load_tool(1, "S7ONLINE", gstrPlcstrAdrTable)
vntRep = new_ss(1)
Case 16387: strResult = strResult + " Connection is being established"
Case 16388: strResult = strResult + " Connection broken down"
Case 32768: strResult = strResult + " Function already actively occupied"
Case 32769: strResult = strResult + " Not allowed in this operating status"
Case 33025: strResult = strResult + " Hardware fault"
Case 33027: strResult = strResult + " Object access not allowed"
Case 33028: strResult = strResult + " Context is not supported"
Case 33029: strResult = strResult + " Invalid address"
Case 33030: strResult = strResult + " Type (data type) not supported"
Case 33031: strResult = strResult + " Type (data type) not consistent"
Case 33034: strResult = strResult + " Object does not exist"
Case 33537: strResult = strResult + " Memory slot on CPU not sufficient"
Case 33796: strResult = strResult + " Grave error"
Case 34048: strResult = strResult + " Incorrect PDU size"
Case 34562: strResult = strResult + " Address invalid"
Case 53761: strResult = strResult + " Syntax error block name"
Case 53762: strResult = strResult + " Syntax error function parameter"
Case 53763: strResult = strResult + " Syntax error block type"
Case 53764: strResult = strResult + " No linked block in storage medium"
Case 53765: strResult = strResult + " Object already exists"
Case 53766: strResult = strResult + " Object already exists"
Case 53767: strResult = strResult + " Block exists in EPROM"
Case 53769: strResult = strResult + " Block does not exist"
Case 53774: strResult = strResult + " No block available"
Case 53776: strResult = strResult + " Block number too big"
Case 53825: strResult = strResult + " Protection level of function not sufficient"
Case 54278: strResult = strResult + " Information not available"
Case 61185: strResult = strResult + " Incorrect ID2"
Case 65531: strResult = strResult + " TeleService Library not found"
Case 65534: strResult = strResult + " Unknown error FFFE hex"
Case 65535: strResult = strResult + " Timeout error. Check interface"
End Select
MsgBox " " & strResult
Error_Message = strResult
End If
Error_Message = ""
End Function
Function ReadInput(strInputnumber As String) As Boolean
' format strInputnumber : "4.1" ou "40.1" ou "140.1"
Dim lngNo As Long, lngAmount As Long
Dim intBuffer(0) As Integer
Dim intBitnumber As Integer
'read actual value
Error_Message (a_field_read(lngNo, lngAmount, intBuffer(0)))
'Write new Value
If blnSetReset = True Then
intBuffer(0) = intBuffer(0) Or (2 ^ intBitnumber)
'Error_Message (a_field_write(lngNo, lngAmount, intBuffer(0)))
If Error_Message(a_field_write(lngNo, lngAmount, intBuffer(0))) <> "" Then
WriteOutput = False
Else
WriteOutput = True
End If
End If
If (blnSetReset = False) And ((intBuffer(0) And (2 ^ intBitnumber)) <> 0) Then
intBuffer(0) = intBuffer(0) Xor (2 ^ intBitnumber)
'Error_Message (a_field_write(lngNo, lngAmount, intBuffer(0)))
If Error_Message(a_field_write(lngNo, lngAmount, intBuffer(0))) <> "" Then
WriteOutput = False
Else
WriteOutput = True
End If
End If
End Function
Function readchar(lngDbNo As Long, lngDwNo As Long, lngAmount As Long) As String
Dim intBuffer(27) As Integer
Dim strBit_0_15, strBit_16_31 As String
Dim lngCounter As Long
Error_Message (db_read(lngDbNo, lngDwNo, lngAmount, intBuffer(0)))
readchar = ""
lngCounter = 0
Do While lngCounter < lngAmount ' Inner loop.
strBit_16_31 = Hex(intBuffer(lngCounter)) If Len(strBit_16_31) 3 Then strBit_16_31 "0" + strBit_16_31 If Len(strBit_16_31) 2 Then strBit_16_31 "00" + strBit_16_31 If Len(strBit_16_31) 1 Then strBit_16_31 "000" + strBit_16_31
strBit_0_15 = Hex(intBuffer(lngCounter + 1)) If Len(strBit_0_15) 3 Then strBit_0_15 "0" + strBit_0_15 If Len(strBit_0_15) 2 Then strBit_0_15 "00" + strBit_0_15 If Len(strBit_0_15) 1 Then strBit_0_15 "000" + strBit_0_15
readchar = readchar + Chr("&H" + Mid(strBit_16_31, 3, 2)) + Chr("&H" + Mid(strBit_16_31, 1, 2)) + Chr("&H" + Mid(strBit_0_15, 3, 2)) + Chr("&H" + Mid(strBit_0_15, 1, 2)) 'SWAP
lngCounter = lngCounter + 2 ' Increment Counter.
Loop
End Function
Function WriteMemo(strMemoNumber As String, ByVal blnSetReset As Boolean) As Boolean
' format strMemonumber : "4.1" ou "40.1" ou "140.1"
Dim lngNo As Long, lngAmount As Long
Dim intBuffer(0) As Integer
Dim intBitnumber As Integer
'read actual value
Error_Message (m_field_read(lngNo, lngAmount, intBuffer(0)))
'Write new Value
If blnSetReset = True Then
intBuffer(0) = intBuffer(0) Or (2 ^ intBitnumber)
'Error_Message (m_field_write(lngNo, lngAmount, intBuffer(0)))
If Error_Message(m_field_write(lngNo, lngAmount, intBuffer(0))) <> "" Then
WriteMemo = False
Else
WriteMemo = True
End If
End If
If (blnSetReset = False) And ((intBuffer(0) And (2 ^ intBitnumber)) <> 0) Then
intBuffer(0) = intBuffer(0) Xor (2 ^ intBitnumber)
'Error_Message (m_field_write(lngNo, lngAmount, intBuffer(0)))
If Error_Message(m_field_write(lngNo, lngAmount, intBuffer(0))) <> "" Then
WriteMemo = False
Else
WriteMemo = True
End If
End If
End Function
Function ReadMemo(strMemoNumber As String) As Boolean
' format strMemonumber : "4.1" ou "40.1" ou "140.1"
Dim lngNo As Long, lngAmount As Long
Dim intBuffer(0) As Integer
Dim intBitnumber As Integer